• Domingo 22 de Diciembre de 2024, 19:27

Autor Tema:  procesar muchos ID tildados por un checkbox  (Leído 6772 veces)

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
procesar muchos ID tildados por un checkbox
« en: Jueves 4 de Marzo de 2010, 00:50 »
0
hola gente

 Necesito resolver una operacion que hace tiempo me tiene rompiendo la cabeza.. y es algo asi espero se entienda.. Tengo este cacho de tabla que recupera registros de un DB

Código: PHP
  1. <tr>
  2.    <td align="center"><input type="checkbox" name="id" value="<?php echo $reg['id']; ?>"> </td>
  3.     <td align="center"><?php echo $reg['fecha']; ?></td>
  4.     <td align="center"><?php echo $reg['titular']; ?></td>
  5.     <td align="center"><?php echo $reg['categoria']; ?></td>
  6.     <td align="center"><?php echo $reg['licencia']; ?></td>
  7.     <td align="center"><?php echo $reg['emitida']; ?></td>
  8.  <td align="center"> </td>
  9.   </tr>
  10.  

COMO ven cada registro en la columna de la izquierda va tener un checkbox (el value de este check. es la id del registro) esto a su ves es un <form> con lo que yo quiero hacer es supongamos qu esta tabla recupero 10 registros de los cuales se me acurre ami tildar o marcar 4 para que el form procese y poder  llevarme solo esos 4 registros para mostrarlos en otra pagina... creo quedo bien explicado, seguramente tengo que llevarme los id que tilde con el check pero como? ya que si yo en la pagina que proceso el form hago un echo $_POST[id]; me imprime el ide del ultimo registro.. nose no me sale como hacerlo :ouch:  

otra cosa que desconosco $_POST[id]; pasa a cer un array que contiene todos los ID que arrastro el check al marcarlos?

es algo similar a lo que vemos en un correo electronico por ejemplo cada registro tiene un check y podemos marcar los que queramos y depues con click en ´borrar ´ eliminamos muchos id como hallamos marcado de una sola vez...

como  se hace eso?

quedo a laespera de sus ayudas no puedo avanzar en mi primer proyecto personal hasta no resolver esto  :angry:

desde ya mil gracias.

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #1 en: Viernes 5 de Marzo de 2010, 09:55 »
0
El name del checkbox ponlo así:

<input type="checkbox" name="id[]" value="<?php echo $reg['id']; ?>">

Tendrás un array basado en cero con los checkbox que están tildados.

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #2 en: Domingo 7 de Marzo de 2010, 06:48 »
0
muchisimas gracias driverOp
no me habria imaginado que poniendo asi el name se generaba el array, probe de mil foema pero asi no.. te agradesco lla ayuda

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #3 en: Martes 9 de Marzo de 2010, 03:00 »
0
HOLa DriverOp ..

sabes que tuve un problema al intentar hacer un echo para ver los id que recupero el array id[] que cree como me dijiste que lo puciera en el name.. mas que nada el problema lo tuve en que no supe escribir la sintaxis para mostrarlo los resultados ya que es un array id[] pero al procesar vA a tener el $_POST ese array como quedaria para hacer un echo a las distintas pociciones del array?

probe de muchas formas que por lo visto estan mal.. asi lo intente

echo $_POST['id[]'];

tambien

echo $_POST['id[0]'];

y tampoco, como tendria que hacer con esto amigo?

espero tu ayuda desde ya mil gracias.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #4 en: Martes 9 de Marzo de 2010, 03:13 »
0
Te debera devolver un arreglo, para despues manejar...

Código: PHP
  1.  
  2. $ids=$_POST['id[]'];
  3. for ($i=0;$i<count($ids);$i++) {
  4.      echo $ids[$i]."<br />";
  5.    }
  6.  
  7.  

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #5 en: Martes 9 de Marzo de 2010, 04:14 »
0
Cita de: "cesand"
HOLa DriverOp ..

sabes que tuve un problema al intentar hacer un echo para ver los id que recupero el array id[] que cree como me dijiste que lo puciera en el name.. mas que nada el problema lo tuve en que no supe escribir la sintaxis para mostrarlo los resultados ya que es un array id[] pero al procesar vA a tener el $_POST ese array como quedaria para hacer un echo a las distintas pociciones del array?

probe de muchas formas que por lo visto estan mal.. asi lo intente

echo $_POST['id[]'];

tambien

echo $_POST['id[0]'];

Bueno, es entendible, porque $_POST ya es un array.

Tienes dos formas de hacerlo:

[php:3rnrke1q]
  1.  
  2. $ids = $_POST["id"];
  3. foreach($ids as $key => $value) {
  4.   echo "El valor del indice ".$key." es: ".$value."<br>";
  5. }
[/php:3rnrke1q]

o bien:

[php:3rnrke1q]
  1. echo "El valor del indice 0 es: ".$_POST["id"][0];
[/php:3rnrke1q]

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #6 en: Martes 9 de Marzo de 2010, 22:27 »
0
Muchas gracias por las respuestas amigos, les cuento lo pude hacer con el foreach y con la otra sintaxis --- Como ya e dicho muchas veces estoy aprendiendo y por esto seguramente como ustedes cuando empezaron nostrabamos seguido en los script por no saber como hacer algo... este tema yo crei no me iva a presentar tantas complicaciones pero no fue asi espero no se tome a mal otra pregunta mia sobre el tema..

lo que pasa es que yo queria generar este array para despues hacer una SQL (select) para mostrar solo estos registros en otro script. Entonces me surge otra vez el problema supongamos que la sql fuera asi:

$sql = "SELECT * FROM clientes where clientes.id = " ??????????? ;

ahi donde puse los ? se entiende que es lo que no puede hacer nose como poner el array que contiene los id como tendria que ser? imagino puede ser que hacer un loop para que haga un echo a los distintos id  pero nose si se puede hacer esto... intente hacerlo pero lo unici que consegui fueron errores :brickwall:

los espero por favor que me puedan dar otra ayuda.
desde ya mil graciassss.

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #7 en: Miércoles 10 de Marzo de 2010, 02:32 »
0
Solo para estar seguro que comprendí bien: el usuario pone tildes en aquellos ids que luego va a visualizar y para ello debes recuperar los clientes cuyo id sea igual a alguno de los ids que el usuario tildó (o todos ellos).

Para lograrlo quieres hacerlo con una sola sentencia SQL. Bien pues, sí, se puede:

Reusando el código anterior...

[php:1qnviwky]
  1.  
  2. $ids = $_POST["id"];
  3. $condicion = "";
  4. if (count($ids) > 0) {
  5. foreach($ids as $key => $value) {
  6.   $condicion .= $value." ";
  7. }
  8. $condicion = trim($condicion); // quita el último espacio
  9. $condicion = str_replace(" ",",",$condicion); // reemplaza los espacios por coma
  10. $condicion = "(".$condicion.")"; // agrega los paréntesis
  11. } else { echo "No ha seleccionado ningún cliente."; exit; }
  12. $sql = "SELECT * FROM `clientes` WHERE `id` IN ".$condicion";"; // La sentencia SQL
  13. echo $sql;
  14.  
[/php:1qnviwky]

He separado cada paso en una línea cada uno para que se comprenda, pero podría hacerse todo de una sola vez así:
[php:1qnviwky]
  1. $condicion = "(".str_replace(" ",",",trim($condicion)).")";
[/php:1qnviwky]
El operador de SQL "IN" devuelve verdadero si el elemento que está a la izquierda (`id`) pertenece al conjunto que está a la derecha ($condicion = "(1,3,6)");

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #8 en: Viernes 12 de Marzo de 2010, 00:24 »
0
muchimas gracias por el tiempo y las respuestas driverOp..

te digo la verdad todavia no pude probar tu codigo no e podido estar en la pc ahora voy a mirarlo y probarlo si te comento despues cualquier cosita

gracias otra vez

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #9 en: Martes 16 de Marzo de 2010, 01:50 »
0
driverOp ahi estuve probando el codigo que me pasaste, me gustaria hacerte dos consultas si puede ser;

1)
      no entiendo esta parte, te pregunto sobre tu codigo

Código: PHP
  1.  
  2.  
  3.  foreach($ids as $key => $value)  {
  4.    $condicion .= $value." "; // [b]aca le agregas un espacio al final[/b]
  5.  }
  6.  $condicion = trim($condicion); // [b]no entiendo por que lo sacas aca al espacio si en la linea de abajo vas a reemplazar el espacio por una " , " [/b] por que lo sacas aca si recien en la linea de abajo vas a reemplazar el espacio por la coma. por que sino en la linea de abajo que espacio reemplazas si ya lo sacaste con el trim??
  7.  $condicion = str_replace(" ",",",$condicion); // reemplaza los espacios por coma
  8.  

2)
     cree la sql con el codigo que me diste la misma quedo asi
SELECT * FROM renovacion WHERE 'id' IN (5,7);
no me da error de sintaxis pero la pruevo en el phpmyadmin y me devuelvo 0 resultados y los id 5 y 7 existen por que podra ser esto?

desde ya muchas gracias amigo y como siempre yo pregunto y en lo posible que se me pueda ayudar bienvenido sea si no se puede no se puede no quiero resultar molesto.

saludos gente

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #10 en: Martes 16 de Marzo de 2010, 05:03 »
0
1)
Es un truco para evitar un problema de programación.
Para que entiendas el truco necesitarías hacer la prueba de escritorio (¿sabes qué es eso?).
El tema está en que para formar sintácticamente correcta la cláusula IN de SQL, el conjunto debe ser una lista de valores separados por coma y encerrada entre paréntesis.
Supongamos que el array $ids vale eso:
(0 => 1, 1 => 7, 2 => 8)

cuando entra al foreach recorre el array posición a posición concatenando cada posición en la variable $condicion, como bien has señalado dentro del foreach $condicion se va formando con un valor seguido de un espacio:

"1 7 8 "

Al final del foreach quedan los tres valores y tres espacios. Si reemplazara ahí mismo los espacios por comas me quedaría:

"1,7,8,"

Esa última coma causaría error de sintaxis en SQL. Para evitar eso antes de reemplazar los espacios por coma, uso trim() para quitar el último espacio:

"1 7 8"

Y luego del reemplazo me queda:

"1,7,8"

Lo cual es correcto.

2)
Ignoro qué está pasando. Recuerda que yo no tengo tu base de datos así que no puedo saber dónde está el problema. En mis tablas funciona perfectamente (de otra forma no te habría dado esta ayuda ;)).

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #11 en: Martes 16 de Marzo de 2010, 14:14 »
0
El problema es que estas tomando id como una cadena de texto

Citar
SELECT * FROM renovacion WHERE 'id' IN (5,7);
No da error porque es una sentencia valida,

para que te devolviera resultados seria lo siguiente:
Citar
SELECT * FROM renovacion WHERE 'id' IN ('5','7','id');
Y no es el caso...

El codigo de DriverOp
utiliza el caracter (`) para los campos, el cual no es lo mismo que  (')

Código: PHP
  1.  
  2.  $sql  = "SELECT * FROM `clientes` WHERE `id` IN ".$condicion.";"; // La sentencia SQL
  3.  

aunque incluso puedes omitir dicho caracter....

Código: PHP
  1.  
  2.  $sql  = "SELECT * FROM clientes WHERE id IN ".$condicion.";"; // La sentencia SQL
  3.  

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

cesand

  • Miembro MUY activo
  • ***
  • Mensajes: 127
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #12 en: Miércoles 17 de Marzo de 2010, 00:15 »
0
mil mil graciassss...

era eso no mas F_tanori no sabia la diferencia entre esas comillas de ahora en adelante se tendra encuenta gracias a los dos entonces logre lo que buscaba. voy a buscar en google pero no tienen un buen link donde ver en su mayoria las sentencias sql ? por ejemplo esa sentencia IN no la conocia.

suerte amigos hasta la proxima :good:

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #13 en: Miércoles 17 de Marzo de 2010, 02:09 »
0
Aqui hay unos quizas de utilidad

viewtopic.php?f=58&t=33343
http://mysql.conclase.net/

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: procesar muchos ID tildados por un checkbox
« Respuesta #14 en: Miércoles 17 de Marzo de 2010, 03:38 »
0
Cita de: "F_Tanori"
El codigo de DriverOp
utiliza el caracter (`) para los campos, el cual no es lo mismo que  (')
Buena observación :)
Hay cosas que uno por hacerlas tan repetitivas y sin pensar (obvias para uno), se le pasan a la hora de explicarle a alguien más.

Solo para clarificar terminología. "IN" no es una sentencia, es un operador dentro de una cláusula que está en una sentencia, la sentencia es SELECT y todo lo que le sigue. WHERE es la cláusula e "IN" es un operador de esa cláusula.