sábado, 24 de noviembre de 2012

Eliminar multiples datos con checkbox PHP y MySQL

Para eliminar múltiples datos de la base de datos, utilizaremos el ciclo foreach de PHP. Este ciclo se utiliza para recorrer arrays. Convertiremos los checkbox entonces en un array. El ejemplo se encuentra divido en tres únicos archivos para facilitar su comprensión.

El archivo conexion.php para hacer la conexion con la base de datos MySQL. La base de datos se llama database y la tabla personas compuesta por dos columnas cod y nombre.

conexion.php


<?php

function conexion(){

$con = mysql_connect("localhost","root","");

if (!$con){

die('Could not connect: ' . mysql_error());
}

mysql_select_db("database", $con);

return($con);

}

?>


El archivo index.php es donde creamos la consulta a la base de datos para mostrar en una tabla HTML los registros que estan almacenados en la base de datos. Cuando se presiona el boton el archivo eliminar.php procesa la información. Es importante aclarar que hemos convertido los checkbox en un array colocando en su nombre unos corchetes, en este caso todos los checkbox se llaman casilla[], cada uno toma un diferente valor, pues les pasamos los codigos que identifcan a las personas.

index.php


<?php

include 'conexion.php';

$con=conexion();

$res=mysql_query("select * from personas",$con);

?>

<!DOCTYPE html>
<html>
<body>

<h1>Eliminar datos</h1>

<form method="post" action="eliminar.php">

<table border="1">

<tr>
<th></th>
<th>Codigo</th>
<th>Nombre</th>
</tr>

<?php
while($fila=mysql_fetch_array($res)){
?>
<tr>
<th><input type="checkbox" name="casilla[]" value="<?php echo $fila[cod]; ?>"></th>
<th><?php echo $fila[cod]; ?></th>
<th><?php echo $fila[nombre]; ?></th>
</tr>
<?php
}
?>

</table>

<input type="submit" value="Eliminar" />

</form>

</body>
</html>


Finalmente el archivo eliminar.php lo que hace es capturar a través del método POST el checkbox con nombre casilla y asignarlo en la variable $x. Luego para cada iteración del ciclo, el valor del elemento de la matriz actual se asigna a $value (que vendrían siendo los códigos de las personas) y el puntero se va moviendo uno por uno hasta que ya no se encuentren más datos. Por ejemplo, si el usuario seleccionó 5 datos el ciclo itera 5 veces y por tanto ejecuta 5 veces la sentencia delete eliminando uno a uno los datos seleccionados.

eliminar.php


<?php

include 'conexion.php';

$con=conexion();

$x=$_POST[casilla];

foreach ($x as $value){

$res=mysql_query("delete from personas where cod=".$value."",$con);

if($res){

echo 'Dato eliminado correctamente<br />';

}

}

?>

<a href="index.php">Volver</a>


Descargar código fuente

14 comentarios:

  1. muxas gracias x explicarnos te lo agradesco

    ResponderEliminar
  2. Estuve varios días pensando como hacerlo y mi idea era bastante aproximada a la tuya. Pero ahora que lo veo así lo tengo mucho más claro. Muchas gracias.

    ResponderEliminar
  3. no puedo descargar el archivo... enlace roto...

    ResponderEliminar
  4. muchas gracias por el coodigo me sirvio para un sistema que estoy desarrolando

    ResponderEliminar
  5. saludos, tengo una pregunta.
    si en tal caso no quiero hacer la comparacion uno a uno, sino quiero eliminar los que no existan en mi arreglo, por ejemplo tengo 10 registro en mi tabla, y en mi array pase 5 valores [0,3,4,5,3], quiero que me elimine los 5 que no esten en ese array[1,2,6,7,8], pero si me hace la comparacion por iteracion, en la primera me borraria los 9 ??? e estado luchando y no se como hacer esto jejeje

    ResponderEliminar
  6. Gracias por esta Explicación que esta muy claro, y en verdad me ayudo mucho
    saludos !!

    ResponderEliminar
  7. Gracias por esta Explicación que esta muy claro, y en verdad me ayudo mucho
    saludos !!

    ResponderEliminar
  8. hola que tal oye podras poner un tutorial para modificar multiples datos en php y mysq porfas

    ResponderEliminar
  9. Excelente. muy bueno.-
    Gracias

    ResponderEliminar
  10. Muy útil la información, en verdad muchas gracias!! :D
    *para aquellos que tuvieran problemas con la ejecución del código, pueden enviarme un mensaje y yo os compartiré el código modificado
    saludos!

    ResponderEliminar
  11. Aunque estoy trabajando con frameworks me ha sido muy útil esta información. Gracias

    ResponderEliminar