Sentencias preparadas en PHP y MySQL con ejemplos, Parte 3

¡Comparte nuestro contenido!

En esta última entrega, vamos a crear las sentencias necesarias para eliminar o actualizar nuestra información. Para quienes son nuevos, recomendamos leer primero la parte 1 y la parte 2. Empecemos por lo más sencillo.

Consulta preparada para eliminar

Eliminar es más fácil que actualizar. Así que empezaremos por ahí. Necesitamos añadir una columna a nuestra tabla para estas acciones. Así que dentro del <thead> vamos a agregar un <th> con la palabra “Acciones”, justo debajo de <th>Estatura</th>.

<th>Acciones</th>

Dentro de nuestro <tbody>, necesitamos un nuevo <td> con los elementos requeridos. Para eliminar haremos que se cargue el mismo archivo, con una variable GET que llamaremos perid (Persona ID), tendrá la variable $pid que contiene el ID de la persona, que ya obtuvimos en la parte 2 de nuestro artículo. Prepararemos también el camino para la edición, apuntando a un archivo que debemos crear más tarde llamado editar, el cual hará uso de la misma variable.

<td><a href="index.php?perid=<?= $pid; ?>">Eliminar</a> | <a href="editar.php?perid=<?= $pid; ?>">Editar</a></td>

El código necesario para eliminar, lo haremos antes de abrir el <table>, de esta manera nos aseguramos que después de eliminar el registro, la consulta que muestra todas las personas refleje nuestra acción. Dado que la variable perid Necesita estar presente, revisaremos si está existe.

if(isset($_GET["perid"])){
}

Dado que dejarlo así, sólo nos conducirá a problemas, vamos a hacer dos verificaciones adicionales: a) Que la variable no se encuentre vacía y b) que la variable contenga un número entero válido, en caso contrario simplemente redireccionamos a nuestro “despistado” usuario hacia el index. Modifiquemos la sentencia anterior.

if(isset($_GET["perid"])){
   if(strlen($_GET["perid"])>0 && filter_var($_GET["perid"], FILTER_VALIDATE_INT)){
      // Aquí ira el resto del código
   }else{
      ob_start();
      header("Location: index.php");
      ob_end_flush();
   }
}

La función ob_start() prepara el buffer de salida, mientras que ob_end_flush() lo termina, de esta manera, prepara un flujo de salida para poder saltar a otra ubicación diferente y lo cierro cuando ya ha sucedido.

Procedamos a la parte de eliminar, primero vamos a revisar que el ID de la persona exista. Revisemos línea por línea.

$sqlRevisa = "select count(id) as existe from personas where id = ?";

Tomamos la variable GET y le hacemos una última revisión con real_escape_string()

$perid = $enlace->real_escape_string($_GET["perid"]);

Creamos el Statement con la sentencia SQL previa.

$stmRevisa = $enlace->prepare($sqlRevisa);

Pasamos nuestra variable ya limpia como parámetro.

$stmRevisa->bind_param("i", $perid);

Ejecutamos la consulta.

$stmRevisa->execute();

Obtenemos el resultado y cerramos el Statement.

$stmRevisa->bind_result($existe);
$stmRevisa->fetch();
$stmRevisa->close();

Si la variable que generamos contiene 0, significa que no existe el usuario que pretendemos eliminar, así que notificamos.

if($existe==0){ ?>
   <p>No haya nada que eliminar</p>
<?php } else{

Si la variable contiene algo, entonces preparamos nuestro SQL para eliminar.

$sqlElimina = "delete from personas where id = ?";

Creamos el nuevo Statement.

$stmElimina = $enlace->prepare($sqlElimina);

Le pasamos el parámetro necesario.

$stmElimina->bind_param("i", $perid);

Ejecutamos la consulta, cerramos el Statement y notificamos que conseguimos eliminar el registro.

$stmElimina->execute();
$stmElimina->close();
?><p>Persona eliminada con éxito</p><?php
}

¡Y con eso ya tenemos lo necesario! Veamos el ejemplo funcionando

Eso es todo por ahora. Nos queda una última parte la cual publicaremos pronto. Cualquier duda o comentario, por favor, háganlo saber en la caja de comentarios aquí abajo.

¡Comparte nuestro contenido!

Israel García

Docente, IT Manager, Blogger & Developer. Escribo por diversión, educo por pasión. | Grandstanding is not my thing.

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

shares