Mostrando entradas con la etiqueta mysqli. Mostrar todas las entradas
Mostrando entradas con la etiqueta mysqli. Mostrar todas las entradas

jueves, 16 de julio de 2020

Cargar datos en una lista desplegable con PHP

Supongamos que queremos agregar un registro a una tabla que se relaciona mediante una clave foránea con otra, solo requiere que se le ingrese el código o id, pero colocar ello en una caja de texto es incómodo, lo ideal sería desplegar en una lista desplegable vertical los registros de la tabla cuyo identificador o código queremos mostrar. Ilustremos ello con un ejemplo:


Sin lista desplegable Con lista desplegable

Agregar datos







Agregar datos








Trabajaremos con las siguientes tablas:




Ahora vamos a crear ese formulario donde se puedan cargar los datos de "inquilinos" y enviar el "id" a través de un formulario web. Este ejemplo no emplea programación orientada a objetos y nos limitamos a enviar la información.

Creamos el formulario en el archivo"pagoIns.php"
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form class="jpcss" method="post" action="agregar_pago.php">    
            <fieldset>
                <legend>INGRESAR ABONO</legend><br> 
                Ingrese al aportante: <select name="personas">
                    <!--Aquí ira el código PHP-->
                </select><br><br>
                Ingrese el importe: S/ 
                <input type="number" name="importe" min="0.01" step="0.01" value="0.01"><br>  
                <br><br>
                <button onclick="return confirm('¿Seguro que deseas ingresar el pago?')">
                    INGRESAR
                </button>  
            </fieldset>
        </form>
    </body>
</html>

Ahora vamos a realizar tanto la conexión como la consulta SQL en código PHP
<?php
#Parámetros de la BD
$cfg['h'] = 'localhost';  #hostname
$cfg['u'] = 'root';       #usuario
$cfg['p'] = '';           #contraseña (password)
$cfg['b'] = 'blog';       #base de datos
$cfg['r'] = '3306';       #puerto 
#Conexión
$cnx = mysqli_connect($cfg['h'], $cfg['u'], $cfg['p'], $cfg['b'], $cfg['r']);
mysqli_query($cnx, "set names utf8");

#Consulta SQL
$sql = "SELECT idinquilinos id, "
        . "CONCAT_WS (' ',nombres,paterno,materno) "
        . "datos FROM inquilinos;";

#Capturando los datos
$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);
?>

Ese código lo colocaremos al inicio de la siguiente forma. Agregando el código que muestra los datos en la lista desplegable.
<?php
#Parámetros de la BD
$cfg['h'] = 'localhost';  #hostname
$cfg['u'] = 'root';       #usuario
$cfg['p'] = '';           #contraseña (password)
$cfg['b'] = 'blog';       #base de datos
$cfg['r'] = '3306';       #puerto 
#Conexión
$cnx = mysqli_connect($cfg['h'], $cfg['u'], $cfg['p'], $cfg['b'], $cfg['r']);
mysqli_query($cnx, "set names utf8");

#Consulta SQL
$sql = "SELECT idinquilinos id, "
        . "CONCAT_WS (' ',nombres,paterno,materno) "
        . "datos FROM inquilinos;";

#Capturando los datos
$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);
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form class="jpcss" method="post" action="agregar_pago.php">    
            <fieldset>
                <legend>INGRESAR ABONO</legend><br> 
                Ingrese al aportante: <select name="personas">
                    <!--Código PHP-->                    
                    <?php
                    if ($salida) {
                        foreach ($salida as $persona) {
                            ?>
                            <option value="<?= $persona['id'] ?>">
                                    <?= $persona['datos'] ?>
                            </option>
                        <?php }
                    }
                    ?>                
                </select><br><br>
                Ingrese el importe: S/ 
                <input type="number" name="importe" min="0.01" step="0.01" value="0.01"><br>  
                <br><br>
                <button onclick="return confirm('¿Seguro que deseas ingresar el pago?')">
                    INGRESAR
                </button>  
            </fieldset>
        </form>
    </body>
</html>

Entre las líneas 42 y 51 se aprecia el código que despliega los datos en la lista desplegable pudiendo obtener el efecto deseado. Se emplea antes del foreach un condicional, en caso la tabla se encuentre vacía u ocurra un error.

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