Borrado de registros mediante checkbox

Deseo borrar un registro mediante un checkbox, os explico:
Estoy creando una web para un restaurante y el cliente desea insertar él mismo los menús y los platos de la carta.
Por el momento he conseguido mostrar en una tabla los datos como nombre de plato, precio ... Y he conseguido que inserte registros también. A la hora de mostrar los datos, delante de cada registro he puesto un checkbox con el propósito de como en hotmail y latinmail... Si el cliente activa los checkbox a medida que va leyendo los registros, luego al darle al botón borrar se borren todos los registros activados.
¿Me podríais dar una pista?

1 Respuesta

Respuesta
1
Si no existe ya, deberías añadir un identificador único para cada registro de la tabla, para evitar confusiones y evitar eliminar el que no corresponda. Puede ser un código propio o bien un simple número, p.ej: un campo INT AUTO_INCREMENT llamado id.
En el momento de mostrar la lista, añade un campo checkbox al lado de la siguiente forma:
<input type=checkbox <input type=checkbox name="delete[]" value=<?=$row['id'];?>>
Dónde $row['id'] devuelve el valor del campo id de los sucesivos registros.
En la página php que recibe los datos, obtendrás el array $_POST['delete'] que contendrá sólo los ids de los checkboxes que se hayan marcado:
if(count($_POST['delete'])) {
//incluir conexión a la bdd
foreach ($_POST['delete'] as $v) {
//para cada registro seleccionado ejecutamos un sql DELETE
$sql = "DELETE FROM tabla WHERE id = $v";
$res = mysql_query($sql);
}
}
else {
//no se ha seleccionado ningún registro para borrar
}
Para probar que los registros chequeados se guardan correctamente, reemplaza dentro del foreach la acción sql por un echo $v."<br>"; Para que te salga el listado de los id pertenecientes a los registros marcados en el formulario.
Muy buen trabajo, me has sido de gran ayuda. Puntuación 11!
Hola y gracias por contestar tan pronto.
He hecho lo que me has indicado pero aun seleccionando varios checkbox, el mensaje que me aparece es "no has seleccionado ningún registro".
Te indico cómo tengo el código.
1ºFormulario MostrarPlatos.php
<?php
(conexión....)
$nbrow=0;
$cont = 0; //Para el checkbox
while($row=mysql_fetch_array($result))
{
$nbrow++;
$cont++;
$CodPlato=$row["CodPlato"];
$Plato =$row["Plato"];
$Precio = $row["PrecioPlato"];
$CodTipoPl =$row["CodTipoPlato"];
$CodTipoSubPl =$row["CodTipoSubPlato"];
print "<tr bgcolor='#FBF3E4'> ";
print "<td><div align=\"center\"><font color=\"#000000\"><font face=\"Verdana\"><input type=\"checkbox\" name=\"delete[]\" value=\"".$CodPlato."\"></font></font></div></td>";
print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$CodPlato</font></font></div></td>";
print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$Plato</font></font></div></td>";
print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$Precio</font></font></div></td>";
print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$CodTipoPl</font></font></div></td>";
print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$CodTipoSubPl</font></font></div></td>";
print "</tr>";
}
//imprime número de registros
print "<b><font size=\"1\"><font face=\"Verdana\">$nbrow </font></b>";
?>
2º Script BorrarPlatos.php
<?php
if (count($_POST['delete']))
{
//Establece una conexión con la BD y lanza un mensaje de error en el caso de que ésta no se haya realizado con éxito.
mysql_connect("localhost","root","p8001626") or die ("no se ha podido conectar con el servidor");
foreach ($_POST['delete'] as $v)
{
$sql="DELETE FROM Platos WHERE CodPlato=$v";
mysql_query("astelena",$sql);
}
}else{ echo ('No has seleccionado ningún registro...');}
?>
Actúa como si nunca seleccionara los checkbox.
Muchas gracias por la ayuda.
En el formulario no has puesto los tags form. Añade justo antes del while:
print "<form action ='BorrarPlatos.php' method='post'>";
y después de cerrar el while:
print "<input type='submit' name='borrar' value='Borrar'>";
Cuando pulses el botón Borrar te llevará a la página BorrarPlatos.php dónde podrás tratar los datos introducidos en el formulario mediante $_POST.
print "</form>";
Otra cosa, asígnale una variable al mysql_connect para que puedas identificar la conexión:
$con = mysql_connect(....
También tienes que especificar el nombre de la base de datos, seguido de la conexión añade:
mysql_select_db("astelena",$con);
Y modifica esto:
mysql_query("astelena",$sql);
Por esto:
$res = mysql_query($sql,$con);
Especificar el identificador de conexión ($con) no es necesario si no se abren varias conexiones a mysql a la vez, pero no está de más.
Ya me contarás que tal!
Saludos,
iNphYx
Te voy a dar la máxima puntuación puesto que has conseguido que me salga. Buen trabajo!
Pero antes abuso y te hago otra preguntita. En el mismo formulario de
MostrarPatlos debo realizar 3 operaciones diferentes y para ello tengo 3 botones.
1- Insertar platos
2- Borrar platos (lo acabo de hacer)
3- Editar/Modificar Platos.
Llamo a 3 scripts diferentes.
1-InsertarPlatos.php
2-BorrarPlatos.php
3-EditarPlatos.php
¿Cómo debo poner el action del form para que según el botón que pulso, me lleve a un script o a otro?
Gracias.
Un formulario sólo puede tener una página definida en action, de modo que básicamente tienes 2 opciones:
1 - Crear un formulario diferente para cada acción, de forma que cada uno enviará los datos a su página correspondiente.
2 - Usar una única página para recibir los datos, y en ella distinguir el botón que se ha presionado y ejecutar el código correspondiente.
Una forma de hacer esto es la siguiente:
<form action='Platos.php' method='POST'>
<!--campos para la acción insertar-->
<input type='submit' name='accion' value='Insertar'>
<!--campos para la acción borrar-->
<input type='submit' name='accion' value='Borrar'>
<!--campos para la acción editar-->
<input type='submit' name='accion' value='Editar'>
</form>
De forma que tenemos 3 botones submit para el mismo formulario. Dependiendo de cuál se pulse se ejecutará un código u otro.
Crea la página Platos.php con el siguiente código:
<?
if($_POST) {
$accion = $_POST['submit'];
//Según la acción escojemos el script correspondiente
switch ($accion) {
case "Insertar":
$script = "InsertarPlatos.php";
break;
case "Borrar":
$script = "BorrarPlatos.php";
break;
case "Editar":
$script = "EditarPlatos.php";
break;
default:
echo "Script inexistente";
exit();
}
//Conexión a MySQL
require($script);
}
else {
//Se ha accedido a esta página directamente, sin someter ningún formulario. Aquí puedes mostrar un mensaje, redireccionar la página, finalizar el script con exit(),...
}
?>
La función require añade el archivo especificado a la página, como si escribiéramos el código.
Cómo la conexión a mysql es necesaria en todos los casos, con que la pongas una vez en este script es suficiente, quítala de las otras páginas.
Así mismo, todo el código que se repita en las 3 páginas que tienes creadas puedes ponerlo sólo una vez en esta.
Importante: Asegúrate que los nombres de los campos del formulario no se repitan, ya que tratándose del mismo formulario no se distinguirán los elementos con el mismo identificativo.
Me he colado con el nombre del botón submit, en lugar de...
$accion = $_POST['submit'];
...es
$accion = $_POST['accion'];

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas