lunes, 24 de junio de 2019

CRUD con PHP y MySQL

Herramientas usadas

  • WAMP - Versión 3.1.7
  • Apache - Versión 2.4.37
  • PHP - Versión 7.3.1
  • MySQL - Versión 5.7.24
  • MariaBD - Versión 10.3.12
Se puede utilizar MySQL o MariaBD, simplemente cambiar el puerto 3306 del MySQL por el 3307 de MariaBD.

Base de datos utilizada

/* TABLA USUARIOS */
CREATE TABLE usuarios ( 
   id INT NOT NULL AUTO_INCREMENT , 
   dni CHAR(8) NOT NULL , 
   nombres VARCHAR(100) NOT NULL , 
   apellidos VARCHAR(150) NOT NULL , 
   fecha_nacimiento DATE NOT NULL , 
   PRIMARY KEY (id), 
   UNIQUE uq_dni (dni)
)ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;

/* DATOS DE PRUEBA */
INSERT INTO usuarios( dni, nombres, apellidos, fecha_nacimiento) VALUES 
('45115544','Lucero','Flores Diaz','2000-06-05'),
('22455544','Flor','Mesa ochoa','1990-01-01'),
('49814422','Mario','Vela Roca','1985-12-15'),
('77115004','Pedro','Ruiz Gamboa','2002-02-24')


Creando el archivo de configuración

Creamos el documento: config.php
<?php
date_default_timezone_set("America/Lima");
define("DB_HOST", "localhost");
define("DB_USER", "root");   # Usuario root
define("DB_PASSWORD", "");   # Sin contraseña
define("DB_NAME", "blog");   # Nombre de la base de datos
define("DB_PORT", "3306");   # Puerto 3306 - MySQL, 3307 - MariaBD


Creando la conexión

Existen dos formas, de crear el archivo de conexión:
  • Mediante un archivo simple de conexión
  • Mediante una clase
Y existen dos formas de realizar la conexión:
  • Usando mysqli
  • Usando PDO
En este caso haremos el más sencillo que es un archivo simple y mysqli
Creamos un archivo llamado: lib_mysql.php

<?php
include_once('config.php');
$cnx = '';

/**
 * Función para Conectarse a la base de datos
 */
function bd_conectar() {
    global $cnx;
    $cnx = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
    mysqli_query($cnx, "set names utf8");
}

/**
 * Función para desconectarse de la base de datos
 */
function bd_desconectar() {
    global $cnx;
    mysqli_close($cnx);
}


Funciones CRUD

  • C - Create - INSERT
  • R - Read - SELECT
  • U - Update - UPDATE
  • D - Delete - DELETE


Leer Registros (SELECT)

Agregamos la función bd_consultar al archivo llamado: lib_mysql.php
/**
 * Función para realizar consultas (SELECT) a la base de datos
 */
function bd_consultar($sql) {
    global $cnx;
    $bolsa = mysqli_query($cnx, $sql);
    $salida = array();
    if ($bolsa != null) {
        while ($row = mysqli_fetch_assoc($bolsa)) {
            $salida[] = $row;
        }
        mysqli_free_result($bolsa);
    } else {
        $salida = false;
    }
    unset($row);
    return $salida;
}


Crear, actualizar y eliminar registros (INSERT, UPDATE, DELETE)

Agregamos la función bd_ejecutar al archivo llamado: lib_mysql.php
/**
 * Función para ejecuciones UPDATE o DELETE a la base de datos
 */
function bd_ejecutar($sql) {
    global $cnx;
    $exito = mysqli_query($cnx, $sql);
    if ($exito) {
        return true;
    } else {
        return false;
    }
}


Creando una interfaz (Tablas y formularios)

Creamos un archivo llamado: index.php
Aquí llamamos al documento PHP que contiene las funciones de conexión y para ejecutar sentencias SQL, recorriendola mediante un FOREACH en una tabla.

<?php
include_once 'lib_mysql.php';

try {
    bd_conectar();
} catch (Exception $e) {
    die($e->getMessage());
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>CRUD con PHP y MySQL</title>
  </head>
  <body>
    <a href="modificar.php">Nuevo Registro</a>
    <table border="1" style="border-collapse: collapse; width: 100%;">
      <thead>
        <th>DNI</th>
        <th>NOMBRES</th>
        <th>APELLIDOS</th>
        <th>FECHA DE NACIMIENTO</th>
        <th colspan="2">ACCIONES</th>
      </thead>
      <tbody>
        <?php
        $registros = bd_consultar("SELECT * FROM usuarios");
        if (!$registros) {
            ?>
           <tr> 
             <td colspan="6"><?= "No hay registros" ?></td>
           </tr> 
           <?php
           } else {
             foreach ($registros as $persona) {
           ?>
              <tr> 
                <td style="text-align: center"><?= $persona['dni'] ?></td>
                <td><?= $persona['nombres'] ?></td>
                <td><?= $persona['apellidos'] ?></td>
                <td style="text-align: center">
                  <?= $persona['fecha_nacimiento'] ?>
                </td>
                <td style="text-align: center">
                  <a href="modificar.php?id=<?= $persona['id'] ?>">
                    Editar</a>      
                </td>
                <td style="text-align: center">
                  <a href="eliminar.php?id=<?= $persona['id'] ?>"
                  onclick="return confirm('¿Seguro que deseas eliminar?');">
                    Borrar</a> 
                </td>
              </tr>
              <?php
                }
            }
            bd_desconectar()
            ?>
    </tbody>
  </table>
</body>
</html>


Creamos un archivo llamado: modificar.php

<?php
include_once 'lib_mysql.php';
$rotulo = "AGREGAR";
if (isset($_GET['id'])){
 $id = $_GET['id'];
 $sql = "SELECT * FROM usuarios WHERE id = $id";
 $rotulo = "MODIFICAR"; 
 bd_conectar();
 $registros = bd_consultar($sql);
 $persona = $registros[0];
 unset($registros);
 bd_desconectar();
}else {
    $persona = null;
}
?>
<!DOCTYPE html>
<html>
<head>
    <title><?= $rotulo ?> USUARIOS</title>
</head>
<body>
   <h1><?= $rotulo ?> USUARIOS</h1>
   <form name="InsUpd" method="POST" action="editar_grabar.php">
 <input type="text" name="txtId"  value="<?= $persona['id']?>"
        hidden="hidden"/>
 DNI:<br/>
 <input type="text" name="txtDni" value="<?= $persona['dni']?>"
 placeholder="Ingrese su DNI" required="required"/><br/>
 <br/>Apellidos:<br/>
 <input type="text" name="txtApe" value="<?= $persona['apellidos']?>"
 placeholder="Ingrese sus apellidos" required="required"/><br/>
 <br/>Nombres:<br/>
 <input type="text" name="txtNom" value="<?= $persona['nombres']?>"
 placeholder="Ingrese sus nombres" required="required"/><br/>
 <br/>Fecha de nacimiento:<br/>
 <input type="date" name="txtFec" 
        value="<?= $persona['fecha_nacimiento']?>" required="required"/>
        <br/><br/>
 <br/><input type="submit" name="btnGrabar" value="<?= $rotulo ?>">
   </form>
</body>
</html>


Creamos un archivo llamado: editar_grabar.php para enviar la información a la base de datos

<?php
include_once 'lib_mysql.php';
$dni = $_POST['txtDni'];
$apellidos = $_POST['txtApe'];
$nombres = $_POST['txtNom'];
$fecha = $_POST['txtFec'];

if ( $_POST['txtId'] == '' ) {
  $sql = "INSERT INTO usuarios (dni, nombres, apellidos, fecha_nacimiento)";
  $sql .= "values('$dni','$nombres','$apellidos','$fecha')";
} else { 
  $id = $_POST['txtId'];
  $sql = "UPDATE usuarios SET dni = '$dni', nombres = '$nombres',"
  . " apellidos = '$apellidos', fecha_nacimiento = '$fecha' WHERE id = $id";
}
bd_conectar();
if (bd_ejecutar($sql)) {
   bd_desconectar();
   header('location: index.php');
} else {
   echo "Error al procesar el registro:<br/>";    
   echo '<a href="index.php">Regresar</a>';
   bd_desconectar();
}


Creamos un archivo llamado: eliminar.php

<?php
include_once 'lib_mysql.php';
$id = $_GET['id'];
$sql = "DELETE FROM usuarios WHERE id = $id";
bd_conectar();
if (bd_ejecutar($sql)){
    header('location: index.php');
} else{
    echo "Error al eliminar el registro:<br/>";
    echo '<a href="index.php">Regresar</a>';
}

Resultado

Página Index

Estructura de archivos


No hay comentarios:

Publicar un comentario