Lecciones de PHP - Lección 3.4 - Trabajo con bases de datos MySQL. Consultas de eliminación con DELETE.
En la lección anterior aprendimos cómo añadir nuevos métodos a nuestra clase de control simpleCMS. Ahora vamos a añadir otro método para eliminar registros: delete().
Vamos a agregar el método como de costumbre:
public function delete($mid){ }
Como puedes ver, pasamos el parámetro $mid – el ID del registro. Si recuerdas la lección anterior, decidimos usar otra forma de pasar parámetros directamente desde la solicitud GET, pero ahora probaremos otra manera de hacerlo.
Entonces, hemos definido el método, ahora agreguemos el manejo de la ruta en el archivo index.php:
switch ($_GET['admin']){ case 'add': print $obj->display_admin(); // si la variable es igual a add, mostramos el formulario de adición break; case 'update': print $obj->display_update(); // si la variable es igual a update, mostramos el formulario de edición break; case 'delete': if($_GET['mid']){ // si la variable es igual a delete, verificamos si mid está presente $obj->delete($_GET['mid']); // llamamos al método de eliminación print $obj->display_public(); // si no hay variable, mostramos los mensajes }else{ print '<p>¡No se seleccionó ningún mid!</p>'; print $obj->display_public(); // mostramos la lista de mensajes } break; default: print $obj->display_public(); // si no hay variable, mostramos los mensajes }
Para que todo funcione correctamente y el mensaje se elimine, la URL debe tener esta forma:
http://test/index.php?admin=delete&mid=7
En este caso, se eliminará el mensaje con mid=7. Ahora escribamos la implementación del método delete():
public function delete($mid){ mysql_query('DELETE FROM Messages WHERE mid='.$mid) or die(mysql_error()); }
Veamos de qué se compone la consulta DELETE de MySQL para eliminar un registro. Primero va la palabra DELETE, seguida del operador FROM. Después indicamos la tabla de la que queremos eliminar registros (¡CUIDADO! si no se especifica una condición, se eliminarán todos los registros de la tabla) y luego la condición de eliminación. Nos interesa el registro con mid que pasamos como parámetro al método. Al final verificamos si la consulta se ejecutó correctamente.
Como mencioné antes, nuestro método se ejecutará cuando en la URL haya dos parámetros: admin=delete&mid=7. Para ello, añadiremos enlaces bajo cada mensaje, editando el método display_public():
public function display_public() { // método para mostrar mensajes $content = ''; $sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // consulta de selección $result = mysql_query($sql) or die(mysql_error()); // guardamos el resultado de la consulta en una variable while($row = mysql_fetch_array($result)){ // procesamos el resultado con mysql_fetch_array() $content .= '<div class="post" id="mid-' . $row['mid'] . '">'; // div envolvente del mensaje $content .= '<span class="time">#' . $row['mid'] . ' de ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; // mostramos fecha y título $content .= '<p>' . $row['bodytext'] . '</p>'; // mostramos el texto del mensaje $content .= '<p>'; $content .= '<a href="/index.php?admin=update&mid=' . $row['mid'] . '">Editar mensaje</a>'; // enlace para editar mensaje $content .= '<a href="/index.php?admin=delete&mid=' . $row['mid'] . '">Eliminar mensaje</a>'; // enlace para eliminar mensaje $content .= '</p>'; $content .= '</div>'; // fin del div envolvente } $content .= '<p><a href="/index.php?admin=add">Agregar mensaje</a></p>'; return $content; }
Ahora, cuando hacemos clic en el enlace para eliminar un mensaje, este se eliminará como se esperaba. Esto permite eliminar rápidamente mensajes no deseados desde el sitio, sin necesidad de usar PhpMyAdmin.
Solo falta hacer un pequeño espacio entre los enlaces de editar y eliminar mensaje:
.post a{ padding-right: 5px; }
Creo que esta lección está terminada. En la siguiente veremos el importante operador JOIN, que nos permitirá hacer consultas entre varias tablas.