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

  1. /* TABLA USUARIOS */
  2. CREATE TABLE usuarios (
  3. id INT NOT NULL AUTO_INCREMENT ,
  4. dni CHAR(8) NOT NULL ,
  5. nombres VARCHAR(100) NOT NULL ,
  6. apellidos VARCHAR(150) NOT NULL ,
  7. fecha_nacimiento DATE NOT NULL ,
  8. PRIMARY KEY (id),
  9. UNIQUE uq_dni (dni)
  10. )ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;
  11. /* DATOS DE PRUEBA */
  12. INSERT INTO usuarios( dni, nombres, apellidos, fecha_nacimiento) VALUES
  13. ('45115544','Lucero','Flores Diaz','2000-06-05'),
  14. ('22455544','Flor','Mesa ochoa','1990-01-01'),
  15. ('49814422','Mario','Vela Roca','1985-12-15'),
  16. ('77115004','Pedro','Ruiz Gamboa','2002-02-24')


Creando el archivo de configuración

Creamos el documento: config.php
  1. <?php
  2. date_default_timezone_set("America/Lima");
  3. define("DB_HOST", "localhost");
  4. define("DB_USER", "root"); # Usuario root
  5. define("DB_PASSWORD", ""); # Sin contraseña
  6. define("DB_NAME", "blog"); # Nombre de la base de datos
  7. 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

  1. <?php
  2. include_once('config.php');
  3. $cnx = '';
  4. /**
  5. * Función para Conectarse a la base de datos
  6. */
  7. function bd_conectar() {
  8. global $cnx;
  9. $cnx = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
  10. mysqli_query($cnx, "set names utf8");
  11. }
  12. /**
  13. * Función para desconectarse de la base de datos
  14. */
  15. function bd_desconectar() {
  16. global $cnx;
  17. mysqli_close($cnx);
  18. }


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
  1. /**
  2. * Función para realizar consultas (SELECT) a la base de datos
  3. */
  4. function bd_consultar($sql) {
  5. global $cnx;
  6. $bolsa = mysqli_query($cnx, $sql);
  7. $salida = array();
  8. if ($bolsa != null) {
  9. while ($row = mysqli_fetch_assoc($bolsa)) {
  10. $salida[] = $row;
  11. }
  12. mysqli_free_result($bolsa);
  13. } else {
  14. $salida = false;
  15. }
  16. unset($row);
  17. return $salida;
  18. }


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

Agregamos la función bd_ejecutar al archivo llamado: lib_mysql.php
  1. /**
  2. * Función para ejecuciones UPDATE o DELETE a la base de datos
  3. */
  4. function bd_ejecutar($sql) {
  5. global $cnx;
  6. $exito = mysqli_query($cnx, $sql);
  7. if ($exito) {
  8. return true;
  9. } else {
  10. return false;
  11. }
  12. }


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.

  1. <?php
  2. include_once 'lib_mysql.php';
  3. try {
  4. bd_conectar();
  5. } catch (Exception $e) {
  6. die($e->getMessage());
  7. }
  8. ?>
  9. <!DOCTYPE html>
  10. <html>
  11. <head>
  12. <meta charset="UTF-8">
  13. <title>CRUD con PHP y MySQL</title>
  14. </head>
  15. <body>
  16. <a href="modificar.php">Nuevo Registro</a>
  17. <table border="1" style="border-collapse: collapse; width: 100%;">
  18. <thead>
  19. <th>DNI</th>
  20. <th>NOMBRES</th>
  21. <th>APELLIDOS</th>
  22. <th>FECHA DE NACIMIENTO</th>
  23. <th colspan="2">ACCIONES</th>
  24. </thead>
  25. <tbody>
  26. <?php
  27. $registros = bd_consultar("SELECT * FROM usuarios");
  28. if (!$registros) {
  29. ?>
  30. <tr>
  31. <td colspan="6"><?= "No hay registros" ?></td>
  32. </tr>
  33. <?php
  34. } else {
  35. foreach ($registros as $persona) {
  36. ?>
  37. <tr>
  38. <td style="text-align: center"><?= $persona['dni'] ?></td>
  39. <td><?= $persona['nombres'] ?></td>
  40. <td><?= $persona['apellidos'] ?></td>
  41. <td style="text-align: center">
  42. <?= $persona['fecha_nacimiento'] ?>
  43. </td>
  44. <td style="text-align: center">
  45. <a href="modificar.php?id=<?= $persona['id'] ?>">
  46. Editar</a>
  47. </td>
  48. <td style="text-align: center">
  49. <a href="eliminar.php?id=<?= $persona['id'] ?>"
  50. onclick="return confirm('¿Seguro que deseas eliminar?');">
  51. Borrar</a>
  52. </td>
  53. </tr>
  54. <?php
  55. }
  56. }
  57. bd_desconectar()
  58. ?>
  59. </tbody>
  60. </table>
  61. </body>
  62. </html>


Creamos un archivo llamado: modificar.php

  1. <?php
  2. include_once 'lib_mysql.php';
  3. $rotulo = "AGREGAR";
  4. if (isset($_GET['id'])){
  5. $id = $_GET['id'];
  6. $sql = "SELECT * FROM usuarios WHERE id = $id";
  7. $rotulo = "MODIFICAR";
  8. bd_conectar();
  9. $registros = bd_consultar($sql);
  10. $persona = $registros[0];
  11. unset($registros);
  12. bd_desconectar();
  13. }else {
  14. $persona = null;
  15. }
  16. ?>
  17. <!DOCTYPE html>
  18. <html>
  19. <head>
  20. <title><?= $rotulo ?> USUARIOS</title>
  21. </head>
  22. <body>
  23. <h1><?= $rotulo ?> USUARIOS</h1>
  24. <form name="InsUpd" method="POST" action="editar_grabar.php">
  25. <input type="text" name="txtId" value="<?= $persona['id']?>"
  26. hidden="hidden"/>
  27. DNI:<br/>
  28. <input type="text" name="txtDni" value="<?= $persona['dni']?>"
  29. placeholder="Ingrese su DNI" required="required"/><br/>
  30. <br/>Apellidos:<br/>
  31. <input type="text" name="txtApe" value="<?= $persona['apellidos']?>"
  32. placeholder="Ingrese sus apellidos" required="required"/><br/>
  33. <br/>Nombres:<br/>
  34. <input type="text" name="txtNom" value="<?= $persona['nombres']?>"
  35. placeholder="Ingrese sus nombres" required="required"/><br/>
  36. <br/>Fecha de nacimiento:<br/>
  37. <input type="date" name="txtFec"
  38. value="<?= $persona['fecha_nacimiento']?>" required="required"/>
  39. <br/><br/>
  40. <br/><input type="submit" name="btnGrabar" value="<?= $rotulo ?>">
  41. </form>
  42. </body>
  43. </html>


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

  1. <?php
  2. include_once 'lib_mysql.php';
  3. $dni = $_POST['txtDni'];
  4. $apellidos = $_POST['txtApe'];
  5. $nombres = $_POST['txtNom'];
  6. $fecha = $_POST['txtFec'];
  7. if ( $_POST['txtId'] == '' ) {
  8. $sql = "INSERT INTO usuarios (dni, nombres, apellidos, fecha_nacimiento)";
  9. $sql .= "values('$dni','$nombres','$apellidos','$fecha')";
  10. } else {
  11. $id = $_POST['txtId'];
  12. $sql = "UPDATE usuarios SET dni = '$dni', nombres = '$nombres',"
  13. . " apellidos = '$apellidos', fecha_nacimiento = '$fecha' WHERE id = $id";
  14. }
  15. bd_conectar();
  16. if (bd_ejecutar($sql)) {
  17. bd_desconectar();
  18. header('location: index.php');
  19. } else {
  20. echo "Error al procesar el registro:<br/>";
  21. echo '<a href="index.php">Regresar</a>';
  22. bd_desconectar();
  23. }


Creamos un archivo llamado: eliminar.php

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

Resultado

Página Index

Estructura de archivos


No hay comentarios:

Publicar un comentario