PHP con MySQL: Eliminar Registros en MySQL

En artículos previos hemos explicado como interactuar con MySQL utilizando PHP, desde consultar, insertar y editar registros, ahora veremos como eliminar registros de manera sencilla. Si es que no has leído los artículos anteriores te recomiendo revisar:

Para eliminar registros seguiremos los siguientes pasos: primero haremos un listado de todos los registros de la tabla elegida, luego en el listado agregaremos un enlace a un archivo delete.php que se encargará de hacer la eliminación. Antes de eliminar el registro le preguntaremos al usuario si desea proceder con la eliminación. Finalmente eliminaremos el registro y redireccionaremos al usuario a listado de registros.

Crear el Listado de Registros

Para nuestro ejemplo utilizaremos la base de datos de ejemplo que contiene una tabla llamada empresa (Descargar el Script SQL). Creamos una consulta a la tabla ‘empresa’ y lo mostramos en una tabla HTML con un enlace a eliminar el registro.

<?php
// conexión a mysql
require("conexion.php");
require("funciones.php");
// consulta de registros
$query = "SELECT * FROM empresa ORDER BY nombre ASC";
$queEmp = mysql_query($query, $conexion);
?>
<html>
<head>
<title>Listado de Empresas</title>
</head>
<body>
<table>
  <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  <tr>
    <td><?php echo $rsEmp&#91;'nombre'&#93;; ?></td>
    <td><?php echo $rsEmp&#91;'direccion'&#93;; ?></td>
    <td><a href="editar.php?id=<?php echo $rsEmp&#91;'id'&#93;; ?>">Editar</a></td>
    <td><a href="#" onclick="delEmpresa(<?php echo $rsEmp&#91;'id'&#93;; ?>);">Eliminar</a></td>
  </tr>
  <?php } ?>
</table>
<script type="text/javascript">
function delEmpresa(id) {
	if (window.confirm("Aviso:\nDesea eliminar el registro seleccionado?"))	{
		window.location = "delete.php?action=del&id="+id;	
	}
}
</script>
</body>
</html>

Hay que notar que en lugar de colocar un enlace directo a delete.php estamos llamando a una función Javascript delEmpresa, esta función le pregunta al usuario si esta seguro de eliminar el registro (Para evitar eliminar registros de manera accidental). Si el usuario acepta entonces redireccionamos a otra página donde pasamos el id del registro que deseamos eliminar.

Eliminar el registro

Creamos un archivo llamado delete.php el cual recibe dos parámetros: el identificador del registro un otro parámetro para verificar que acción se quiere realizar. Creamos la consulta para eliminar el registro y finalmente redireccionar al listado de registros.

// file: delete.php
require("conexion.php");
require("funciones.php");

$idempresa = getParam($_GET["id"], "-1");
$action = getParam($_GET["action"], "");

if ($action == "del") {
	$sql = "DELETE FROM empresa WHERE id = ".sqlValue($idempresa, "int");
	mysql_query($sql, $conexion);
	header("location: listado.php");
}

Notar que estamos utilizando dos funciones especiales:

  • getParam permite filtrar los datos enviados por el usuario y definir un valor por defecto (En el ejemplo si no se ha enviado el parámetro id devuelve como valor -1).
  • sqlValue permite formatear el tipo de dato que acepta la consulta (Por ejemplo se puede definir que el campo es entero int, si el usuario envía un cadena de texto esta función la convertirá a un entero).

Para finalizar les dejo los archivos con el código fuente que incluye el archivo de conexión y las funciones utilizadas en nuestro ejemplo.

[download id=»57″ autop=»false»]

Comentarios Total 26 comentarios

Studio25
Publicado: 13/10/2011 11:00 am

Yo le agregaria a la consulta el or die(mysql_error());
para que te muestre el error si es que ocurriera

Konami12
Publicado: 14/10/2011 4:49 pm

En ocaciones no es muy bueno mostrar los errores ya que si esto tiene salida a internet puede generar problemas con los jackers bueno tomando en cuenta a que el desarrollador se le eolvide quitar esta sentencia ……

Alex
Publicado: 24/10/2011 11:42 am

Buenaso pana… Felicitaciones es un BLOG estupendo e recomendado que lo visiten….

Denver paz
Publicado: 24/10/2011 3:02 pm

Exelentes aporte Gracias por todo saludos

Anthony
Publicado: 24/10/2011 4:17 pm

Hey ami me dice que Fatal error: Call to undefined function getParam() in C:\AppServ\www\practica\delete.php on line 6 no se que significa ayuda si

unijimpe
Publicado: 24/10/2011 5:01 pm

Anthony, el mensaje te sale por que no tienes la función getParam, esta función se encuentra en el archivo funciones.php, asegúrate que tengas el archivo en la ruta adecuada.

Dante
Publicado: 05/12/2011 12:58 am

Tengo el mismo error que Anthony, y no logro encontrar el archivo funciones.
He seguido la serie de tutoriales que has expuesto,y no encuentro la función getParam declarada en alguno de ellos. A lo mejor me perdí de algo.
Lastima que los ejemplos ya no estén para descarga,con eso me ayudaría.

Dante
Publicado: 05/12/2011 1:15 am

Ya la encontre, en PHP con MySQL: Consultar datos en MySQL, está en uno de tus comentarios.
Por si alguien lo necesita:

function getParam($param, $default) {
$result = $default;
if (isset($param)) {
$result = (get_magic_quotes_gpc()) ? $param : addslashes($param);
}
return $result;
}

unijimpe
Publicado: 05/12/2011 1:17 am

Dante la función getParam esta incluido en el archivo funciones.php en el archivo de descarga incluido en el post.

Esta función se encarga de recibir una variable y limpiarle los apostrofes, además si no existe la variable se devuelve un valor por defecto.


function getParam($param, $default) {
$result = $default;
if (isset($param)) {
$result = (get_magic_quotes_gpc()) ? $param : addslashes($param);
}
return $result;
}

Dante
Publicado: 05/12/2011 1:54 pm

Muchas gracias Jim. He seguido tu pagina hace un año, todos los ejemplos son buenos y funcionales.

juankar
Publicado: 27/01/2012 11:43 am

Hola, me he descargado todos los archivos del enlace, y luego he copiado el texto del primer php, guardandolo como «eliminar_registro.php» en el mismo sitio que los demas archivos.
Pues bien cuando me dirijo a «eliminar_registro.php» me da el error:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/juankar/public_html/bases/eliminar_registro.php on line 29

no tengo ni idea de php, me podeis ayudar?

gracias. :-)

Federico
Publicado: 28/02/2012 11:59 am

Hay algun rar con todos los archivos juntos?.

Patasmaggot
Publicado: 02/04/2012 9:25 pm

amigo descargue el archivo subi la base de datos y todo pero a la hora de editar me salen 2 errores

notice: undefined index: action dice q en on line 6

y

notice: undefined index: status on line 39

cual es la solucion? :C que debo hacer?

Galax │ diseño web
Publicado: 10/04/2012 9:50 am

Justo lo que estaba buscando, Gracias por el tutorial me ha servido muchísimo , felicitaciones por su trabajo

It’s great, Thanks for the tutorial has helped me very much, congratulations on your work

Gerardo
Publicado: 22/05/2012 12:06 am

Fatal error: Call to undefined function get_magic_quotes_gpc() in C:\AppServ\www\eliminar\php-mysql-delete\funciones.php on line 5
que se supone que significa??? no le he modificado nada

pequeña aprendiz
Publicado: 17/10/2012 12:49 pm

hola espeor no molestar lo que pasa que ya habia utilizado tu codigo y me funcionaba perfecto de la manera en que tu lo muestras lo que sucede es que ahora en el

if ($action == «del») {

eliminar($id); //es una funcion que esta en otro php que recibe el id y genera la consulta delete pero no hace nada podrias decirme cual puede ser el problema gracias

}

saryta
Publicado: 08/12/2012 10:48 pm

hola buenas nohces, he bajado tu codigo y funciona a la perfeccion, hice una copia para loque neceisto y lo modifque y me muestra todos los registros quetengo en mi bd pero en los tr eliminar y editar del archivo listado.php en cada uno me apareche lo siguiente:

line34: <a href="editar.php?id=»>Editar –.> para este me aparece un aviso asi : Notice: Undefined index: id in C:\wamp\www\IMJUVENS3\listado.php on line 34

<a href="#" onclick="delEmpresa();»>Eliminar–> para este me aparece un aviso así:
«> Editar Notice: Undefined index: id in C:\wamp\www\IMJUVENS3\listado.php on line 35 Call Stack #TimeMemoryFunctionLocation 10.0010371952{main}( )..\listado.php:0 );»>Eliminar

SE QUE DICE QUE EL INDEX ID ESTA INDEFINIDO LO QUE NO SE ES PORQUE , SI CON TU BASE DE DATOS ESTA TODO BIEN Y SI ME HACE LA ELMINACION, Y YA VI QUE SELECCIONARA LA BD CORRECTA Y TODO EL CODIGO, ASI QUE DE VDD NO ENTIENDO :S ME AYUDARIA MUCHO SI PUDIERAS EXPLICAR PORQUE CON TU CODIGO TAL CUAL SI , PERO SI LO CONECTAS A OTRA BASE DE DATOS APARECE EL LISTADO PERO NO TE DEJA NI ELIMINAR NI EDITAR,NO APARECEN ESOS TR CON SUS NOMBRES SOLO LOS AVISOS EN LOS LUGARES DE LOS NOMBRES DE ESOS TR

elyzabeth
Publicado: 21/01/2013 12:05 pm

descargue el archivo cree la BD y todo pero a la hora de editar me salen 2 errores
notice: undefined index: action dice q en on line 6
notice: undefined index: status on line 39

A que se debe esto? :O.
Te lo agradeceria saludos

Rikochett
Publicado: 08/08/2013 6:33 pm

Amigo, ¿y cómo sería para borrar el registro y una foto asociada a ese registro. Me explico, el id de una noticia y la foto asociada….

jhanios
Publicado: 26/10/2013 3:25 pm

como puedo hacer para borrar campos sin descripcion

lucas
Publicado: 14/11/2013 3:12 pm

Amigo muchas gracias por el aporte me sirvio de mucho, Felicidades…!!!

Ana
Publicado: 21/03/2015 6:16 pm

Buenas tardes quería preguntarles como hacer para recuperar un ítem de un select ( value) cuando esta cargado dinámicamente con valores de la base de datos
Ya que lo que me ocurre es que si en el form lo cargo con valores estáticos y luego hago _post(ítem select) me devuelve el ítem pero si seleccione el ítem cargado por select ce bd el _pOST ME DEVUELVE NULO
Espero haberme explicado Gracias !!

Lizzy
Publicado: 28/04/2015 12:05 pm

chicos! por si alguno le interesa resolví los 2 errores del editar.php
el primero donde marcaba: Notice: Undefined index: action in C:\xampp\htdocs\php-mysql-delete\editar.php…
lo resolví sustituyendo: $action = getParam($_GET[«action»], «»);
por : $action = isset($_GET[‘action’])?$_GET[‘action’]:null;
funciona 100% y edita y guarda la edicion
el otro error solo se le agrega «status» al tercer if :(status==»ok»)
lo corrí y todo bien
saludos!

Lovecraftniana
Publicado: 28/04/2015 5:47 pm

para los errores del «editar.php»

sustituyan la línea 6 por: $action = isset($_GET[‘action’])?$_GET[‘action’]:null;
y ala línea 38 por:

y edita a la perfección

unijimpe
Publicado: 13/05/2015 12:31 pm

Gracias por sus comentarios, con las correcciones que menciona Lovecraftniana se corrigen las alertas de PHP.

Roberto
Publicado: 07/06/2015 3:13 pm

Por que cuando le doy a editar no me hace nada, el caso que el archivo lo tengo igual. Gracias

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)