CRUD en PHP. Gestión de una base de datos

CRUD básico en PHP y SQL

 

Crear un sistema CRUD de gestión de base de datos es una tarea muy común en el desarrollo web.

Si eres un desarrollador web Senior, ya debes haber creado muchas cuadrículas CRUD. Es muy posible que existan en un sistema de administración de contenido, un sistema de administración de inventario o un software de contabilidad. Si eres nuevo en el desarrollo web, seguro que esta entrada te será de utilidad ya que tendrás que consultarla muy a menudo si trabajas con bases de datos.

CRUD significa

  • Crear (CREATE, insertar datos en la base de datos utilizando la instrucción SQL INSERT)

  • Leer (READ, leer datos de la base de datos utilizando instrucción SQL SELECT)

  • Actualizar (UPDATE, actualizar registros usando instrucción SQL UPDATE)

  • Eliminar (DELETE, borrar registros usando instrucción SQL DELETE)

 

El propósito principal de una cuadrícula CRUD es que permite a los usuarios crear / leer / actualizar / eliminar datos.

PHP será el lenguaje del lado del servidor que manipula las tablas de la base de datos MySQL para que los usuarios de front-end puedan realizar acciones de CRUD.

En esta serie de tutoriales, realizaremos los pasos para crear una cuadrícula CRUD de PHP.

Queremos demostrar cómo PHP como lenguaje del lado del servidor, se comunica con MySQL backend y, al mismo tiempo, procesa HTML de front-end.

Empecemos!

 

1. Base de datos y conexión

Utilizaremos nuestra base de datos de usuarios.

En esta entrada ya te mostré cómo conectarnos a nuestra base de datos a través de la funcion conectar().

2. Archivo inicial ‘index.php’.

Este archivo nos permitirá conectar con la base deatos y nos mostrará todos los registros.

Junto a cada nombre, mostrará los botones de EDITAR y BORRAR.

Además, en la parte superior, dispondremos de un formulario el cual nos permitirá AÑADIR datos a nuestra tabla.

De esta manera, y en una sóla página, ya tendremos el CRUD completo.

Hay gente que prefiere crear un archivo para cada acción sobre la base de datos. Nosotros lo haremos todo desde un solo archivo. Si deseas usar varios, sólo has de cambiar el destino hacia donde envías los datos desde los formularios.

<?php
function conectar() {
    $server = "localhost";
    $user = "root";
    $password = "";
    $db = "crud";
    try {
        $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password,[PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $conn;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}
?>

En este archivo ‘index.php’, tenemos:

  1. Entre  <head>  y  </head> añadimos Bootstrap o archivos .css.
  2. Un formulario en el que podremos escribir un nombre y un apellido para ser añadido a la base de datos.
  3. Todas las sentencias de acciones sobre la base de datos.
  4. La tabla que nos estará mostrando los datos continuamente.

 

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
</head>

<div class="container">
    <h2>Mantenimiento Usuarios</h2>
<form class="form">
    <input type="hidden" name="action" value="insert">
    Nombre:<input type="text" name="name" class="form-control">
    eMail:<input type="text" name="email" class="form-control"><br/>
    <input type="submit" class="btn btn-info" value="Insertar Actor">
</form>
</div>

<?php
$action = filter_input(INPUT_GET, 'action');
$email = filter_input(INPUT_GET, 'email', FILTER_SANITIZE_STRING);
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
try {
    $conn = conectar();
    //$conn = new PDO("mysql:host=$server;dbname=$db", $user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Acciones sobre la base de datos
    if ($action == 'insert' && !empty($name) && !empty($email)) {
        $sql = "insert into crud (name, email) values ('$name','$email')";
        $conn->exec($sql);
    }
    if ($action == "delete" && !empty($id)) {
        $sql = "delete from crud where id=$id";
        $conn->exec($sql);
    }
    if ($action == 'update' && !empty($name) && !empty($name) && !empty($id)) {
        $sql = "update crud set name='$name', email='$email' where id=$id";
        $conn->exec($sql);
    }
    ?>


    
<div class="container">
<table class="table">
        <tr><td>Id</td><td>Nombre</td><td>Email</td><td>Acciones</td></tr>
    <?php
    $sql = "select * from crud";
    $resul = $conn->query($sql);
    while ($fila = $resul->fetch(PDO::FETCH_ASSOC)) {
        ?>
            <tr><td><?= $fila['id'] ?></td>
                <td><?= $fila['name'] ?></td>
                <td><?= $fila['email'] ?></td>
                <td><a href="?action=delete&id=<?= $fila['id'] ?>" class="btn btn-danger">Borrar</a>
                    <a href="update.php?id=<?= $fila['id'] ?>" class="btn btn-success">Editar</a></td></tr>

        <?php
    }
} catch (Exception $ex) {
    echo "Ha ocurrido un error<br/>" . $ex->getMessage();
}
?>
</table>
</div>

 

Como puedes observar, desde el formulario inicial, recogemos lo escrito en los <input> name y email y, junto con el action value=»insert» lo mandamos via GET a la misma página ‘index.php’ que lo recibe:

 

$action = filter_input(INPUT_GET, 'action');
$email = filter_input(INPUT_GET, 'email', FILTER_SANITIZE_STRING);
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

( En esta entrada te explico un poco cómo funcionan las Supervariables $_GET y $_POST por si prefieres usarlas)

 

A través de la primera accion sobre la base de datos, inserta el contenido de esos campos en nuestra base de datos.

De esta manera tan simple, ya tenemos un nuevo actor en nuestra lista que encontraremos al final de la tabla.

 

Lo mismo ocurre si pulsamos el boton BORRAR.

<a href="?action=delete&id=<?= $fila['id'] ?>" class="btn btn-danger">Borrar</a>

Pulsando el botón, mandamos al mismo archivo ‘index.php’ el action y el ID del usuario.  Al recibir esos datos, se ejecuta la siguiente acción sobre la base de datos:

if ($action == "delete" && !empty($id)) {
        $sql = "delete from crudwhere id=$id";
        $conn->exec($sql);
    }

Y ahora vamos a EDITAR.

Cuando pulsamos ese botón, se envía al archivo ‘update.php’  el ID del actor que queremos actualizar.  Al recibirlo, nos muestra un formulario con los campos rellenados con los datos del actor recibidos.

formulario para editar campos

Simplemente deberemos modificar el nombre o el apellido y pulsar el botón para recibir esos nuevos datos en ‘index.php’ y ejecutar la acción sobre la base de datos.

/*
<?php
function conectar() {
    $server = "localhost";
    $user = "root";
    $password = "";
    $db = "crud";
    try {
        $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $conn;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}
?>
*/

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
</head>


<?php
$server = "localhost";
$user = "root";
$password = "";
$db = "sakila";
$actor_id = filter_input(INPUT_GET, 'actor_id', FILTER_VALIDATE_INT);

if (!empty($actor_id)) {
    try {
        //$conn = conectar();
        $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "select * from crud where id=$id";
        $resul = $conn->query($sql);
        $fila = $resul->fetch();
    } catch (Exception $ex) {
        echo "Ha ocurrido un error<br/>" . $ex->getMessage();
    }
}
?>
<div class="container">
<h1>Editar usuario</h1>
    <form class="form" action="index.php">
           <input type="hidden" name="action" value="update">
           <input type="hidden" name="id" value="<?=$id?>">
          Nombre:<input class="form-control" type="text" name="name" value="<?=$fila['name']?>">
          eMail:<input class="form-control" type="text" name="email" value="<?=$fila['email']?>"><br/>
          <input type="submit" class="btn btn-info" value="Actualizar Datos">
      </form>
</div>

( Como podrás observar, en este caso he utilizado otra forma de conectarnos a la base de datos sin utilizar la funcion conectar().  Cualquiera de las 2 es correcta.)

Para finalizar, BUSCAR.

He añadido al CRUD, un archivo para poder hacer consultas. En este caso , puedes buscar por nombre o por apellido sólo escribiendo una parte de la palabra. El buscador te mostrará el resultado. Aquí te dejo el código del archivo ‘consultas.php’.

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
</head>
<div class="container">
<h1>Consulta usuarios</h1>
<form class="form">
    Nombre:<input class="form-control" type="text" name="name">
    Apellidos:<input class="form-control" type="text" name="email"><br/>
           <input type="submit" class="btn btn-info" value="Buscar">
       </form>
       <table class="table">
           <tr><td>Id</td><td>Nombre</td><td>Apellidos</td></tr>
           <?php
           $server = "localhost";
           $user = "root";
           $password = "";
           $db = "crud";
            $email = filter_input(INPUT_GET, 'email', FILTER_SANITIZE_STRING);
           $name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);
           try {
               $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password);
               $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
 
               $sql = "select * from crud where 1";
               if (!empty($name)){
                   $sql.=" and name like '%$name%'";
               }
               if (!empty($email)){
                   $sql.=" and email like '%$email%'";
               }
               $resul = $conn->query($sql);
               while ($fila = $resul->fetch(PDO::FETCH_ASSOC)) {
                   ?>
                   <tr><td><?= $fila['id'] ?></td>
                       <td><?= $fila['name'] ?></td>
                       <td><?= $fila['email'] ?></td>
                   </tr>
 
                   <?php
               }
           } catch (Exception $ex) {
               echo "Ha ocurrido un error<br/>" . $ex->getMessage();
           }
           ?></table>

</div>

Como siempre te digo, puedes modificar los estilos de las tablas o formularios a tu gusto usando Bootstrap o código CSS.

Con esto llegamos al final de esta entrada. Hemos visto como hacer un CRUD sobre la tabla ACTORES de base datos SAKILA.  Entendiendo el funcionamiento, puedes hacerlo sobre cualquier otra base de datos sin complicaciones. Simplemente añade tu base de datos y modifica los campos de los formularios y las recogidas de datos para adaptarlo a tus necesidades.

 


Puedes ver el sistema en funcionamiento AQUI 


Puedes descargar el sistema completo desde  este enlace.


 

 

PERO RECUERDA ESTE CONSEJO CUANDO TRABAJES SOBRE BASES DE DATOS:

Espero que te haya sido de utilidad esta entrada y el consejo final.

No dudes en dejar tus comentarios.

Hasta pronto!

 

Compartir esta entrada.

One thought on “CRUD en PHP. Gestión de una base de datos

Deja una respuesta

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

CAPTCHA ImageChange Image