Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: luar79 en 23 Enero 2016, 11:28 am



Título: Problemas al recoger de un ckeckbox el id recogido de la base de datos
Publicado por: luar79 en 23 Enero 2016, 11:28 am
Buenas!

Vereis estoy creando un backend, y mi intención es crear en cada fila de una tabla un checkbox que si lo selecciona el usuario y confirma en borrar se elimine esa fila. Para identificar que fila se selecciono a traves del checkbox se me ha ocurrido indicar en el atributo name el ID que tiene asignado cada fila en la BBDD.

EL problema lo tengo al comprobar dentro de un if que reciba que ID ha sido seleccionado. SI lo hago con un isset me da error de que el index is offset. Y si lo ejecuto como muestro en el codigo que adjunto en el mensaje, eliga el checkbox que eliga empieza siempre eliminando la última fila:

Código
  1. $registros=mysqli_query($conexion,"select * from usuarios")or
  2. die("Problemas en el select:".mysqli_error($conexion));
  3. while($reg=mysqli_fetch_array($registros))
  4. { $ID=$reg['ID'];
  5. echo $ID;
  6. $login=$reg['NombreUsuario'];
  7.  
  8.  
  9. echo "<form method='post' action='BBDD_usuarios.php' enctype='multipart/form-data'>";
  10. echo "<input type='checkbox' name='$ID' >&nbsp";
  11.  
  12.  
  13.  
  14.  
  15. mysqli_close($conexion);
  16. echo "<form method='post' action='BBDD_usuarios.php' enctype='multipart/form-data'>";
  17. echo "<input type='submit' name='borrar' value='borrar'>" ;
  18. echo "</form>";
  19. $borrar=$_REQUEST['borrar'];
  20.  
  21. if ($borrar){
  22. $conexion=mysqli_connect("localhost","root","","usuarios")or die("Problemas con la conexión");
  23.  
  24. $registros=mysqli_query($conexion,"select * from usuarios")or
  25. die("Problemas en el select:".mysqli_error($conexion));
  26.  
  27.  
  28. if($_POST[$ID]=true){
  29. echo "hola";
  30. $selecc=$_POST[$ID];
  31. echo $selecc;
  32.  
  33.  
  34. mysqli_query($conexion,"delete from usuarios where id='.$selecc.'") or
  35. die("Problemas en el delete:".mysqli_error($conexion));
  36. echo "<form method='post' action='BBDD_usuarios.php' enctype='multipart/form-data'>";
  37. }
  38.  
  39. mysqli_close($conexion);
  40. }
  41.  


Gracias de antemano por la ayuda!


Mod: Los códigos deben ir en etiquetas GeSHi


Título: Re: Problemas al recoger de un ckeckbox el id recogido de la base de datos
Publicado por: ASW en 11 Febrero 2016, 03:05 am
Hola, fijate en echo "<input type='checkbox' name='$ID' >&nbsp";
el nombre de la variable deberia ser ID, no $ID.
Si sigue sin funcionar le hecho otra mirada.
Saludos.


Título: Re: Problemas al recoger de un ckeckbox el id recogido de la base de datos
Publicado por: sodark en 15 Febrero 2016, 16:54 pm
Hola, fijate en echo "<input type='checkbox' name='$ID' >&nbsp";
el nombre de la variable deberia ser ID, no $ID.
Si sigue sin funcionar le hecho otra mirada.
Saludos.

Desde cuando el nombre de las variables en PHP van sin $ delante?

Respecto al OP, primero de todo decirte que los input checkbox solo se envian si estan marcados, ergo en el backend solo recibiras los que hayas marcado para borrar.

Si les das el mismo nombre, recibiras un "array" que podras recorrer. Cada input tiene un tag value='' que es donde yo pondria la id.

De esta forma luego en el backend, puedes recorrer el array y recuperaras la id de cada uno de los que se han enviado, de manera que tendras la id del que han marcado para borrar.

Luego si queires afinar la velocidad, te recomiendo que prepares la query y envies una unica query del formato

DELETE FROM tabla WHERE id_usuario IN ('id1','id2','id3')

Así solo enviarás una Query a la base de datos.

Para asegurarte haz la prueba, pero en vez de ejecutar la query, pintala y asi veras que realmente hace lo que quieres.