UT4: TÉCNICAS DE ACCESO A DATOS EN PHP

Alberto Méndez Núñez | 03/10/2025

Curso 2025/2026 - Grupo DAW2

Muestra del código PHP ejercicio 6

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>CFGS - Desarrollo de Aplicaciones Web</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background: #f4f6f9;
            margin: 0;
            padding: 0;
        }
        header {
            background: #F59C27;
            color: white;
            padding: 15px;
            text-align: center;
        }
        h1 {
            margin: 0;
        }
        main {
            max-width: 1200px;
            margin: 30px auto;
            padding: 20px;
            background: white;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0,0,0,0.1);
        }
        ul {
            list-style: none;
            padding: 0;
        }
        footer{
            margin: auto;
            background-color: #F59C27;
            text-align: center;
            height: 150px;
        color: white;
            position: fixed;
            bottom: 0;
            left: 0;
            width: 100%;
        }
        a{
            text-decoration: none;
            color:purple;
        }
        
        table{
            border: 0;
        }
        
        td{
            padding: 10px;
            border-width: 4px;
        }
        
        #encabezado{
            background-color: lightsteelblue;
            font-weight: bold;
        }
        
        .codigos{
            background-color: lightblue;
        }
        
        .mostrar{
            background-color: lightsalmon;
        }
        
        tr{
            height: 80px;
        }
        
        input{
            border-radius: 5px;
        }
        
        #boton{
            border-radius: 5px;
            width: 150px;
            background-color: lightgreen;
        }
        
        label{
            font-weight: bold;
        }
        
        h3{
            text-decoration: underline;
        }
        
        #formulario table{
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
        }
        

    </style>
</head>
<body>
    <header>
        <h1><b>UT4: TÉCNICAS DE ACCESO A DATOS EN PHP</b></h1>
        <h4><a href="../../AMNDWESProyectoDWES/indexProyectoDWES.php">Alberto Méndez Núñez | 03/10/2025</a></h4>
        <p>Curso 2025/2026 - Grupo DAW2</p>
    </header>
    <main>
        <h2><b>Ejercicio 6</b></h2>
        
        <?php
        
                /*
         * Autor: Alberto Méndez Núñez
         * Fecha de ultima modificación: 13/11/2025
         * Pagina web que cargue registros en la tabla Departamento desde un array departamentosnuevos utilizando una consulta preparada.
         *  (Después de programar y entender este ejercicio,
         *  modificar los ejercicios anteriores para que utilicen consultas preparadas). 
         * Probar consultas preparadas sin bind, pasando los parámetros en un array a execute.
         */
        
        require_once '../config/confDBPDO.php'; // Importa configuración de conexión a la base de datos

        /* ==================== Definición de los nuevos departamentos ==================== */
        $aDepartamentos = [
            [
                'T02_CodDepartamento' => 'EDU',
                'T02_DescDepartamento' => 'Departamento de Educación Física',
                'T02_VolumenDepartamento' => 324.7
            ],
            [
                'T02_CodDepartamento' => 'LIT',
                'T02_DescDepartamento' => 'Departamento de literatura',
                'T02_VolumenDepartamento' => 6434.7
            ],
            [
                'T02_CodDepartamento' => 'ADE',
                'T02_DescDepartamento' => 'Departamento de administración de empresas',
                'T02_VolumenDepartamento' => 3523.7
            ]
        ];

        try {
            /* ==================== Conexión a la base de datos ==================== */
            $miDB = new PDO(RUTA, USUARIO, PASS); // Creamos objeto PDO
            $miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Excepciones ante errores

            /* ==================== Iniciamos la transacción ==================== */
            $miDB->beginTransaction(); // Si algo falla, podemos revertir todos los inserts

            /* ==================== Preparación de la consulta ==================== */
            $query = <<<SQL
                INSERT INTO T02_Departamento(
                    T02_CodDepartamento,
                    T02_DescDepartamento,
                    T02_FechaCreacionDepartamento,
                    T02_VolumenNegocio,
                    T02_FechaBajaDepartamento
                )
                VALUES (:cod, :desc, NOW(), :vol, NULL)
            SQL;

            $consPreparada = $miDB->prepare($query); // Creamos la consulta preparada

            /* ==================== Inserción de cada departamento ==================== */
            foreach ($aDepartamentos as $departamento) {
                // Asignamos los valores del array a los parámetros de la consulta
                $consPreparada->bindParam(':cod', $departamento['T02_CodDepartamento']);
                $consPreparada->bindParam(':desc', $departamento['T02_DescDepartamento']);
                $consPreparada->bindParam(':vol', $departamento['T02_VolumenDepartamento']);

                $consPreparada->execute(); // Ejecutamos la consulta para cada departamento
            }

            $miDB->commit(); // Confirmamos la transacción: todos los registros se insertan de forma atómica

        } catch (PDOException $ex) {
            // En caso de error, se muestra mensaje y código, y se detiene la ejecución
            echo "Error de conexión a la base de datos o inserción: " . $ex->getMessage() . "<br>";
            echo "Código de error: " . $ex->getCode();
            exit;
        }

        /* ==================== Mostrar todos los registros de la tabla ==================== */
        try {
            $query = $miDB->query("SELECT * FROM T02_Departamento"); // Consulta de todos los registros

            if ($query->rowCount() > 0) { // Si hay registros
                echo "<table border='2' style='border-collapse: collapse;'>";
                echo "<tr style='background-color: lightsteelblue; font-weight: bold;'>";

                // Cabeceras de la tabla según las columnas
                for ($i = 0; $i < $query->columnCount(); $i++) {
                    $nomColumna = $query->getColumnMeta($i)["name"];
                    echo "<th>{$nomColumna}</th>";
                }
                echo "</tr>";

                // Recorremos todos los registros y mostramos cada uno en fila de la tabla
                while ($registro = $query->fetch(PDO::FETCH_OBJ)) {
                    echo "<tr>";
                    foreach ($registro as $valor) {
                        echo "<td style='padding:5px;'>$valor</td>";
                    }
                    echo "</tr>";
                }

                echo "</table>";
                echo "<h3 style='text-align:center;'>Hay {$query->rowCount()} registros.</h3>";
            } else {
                echo "<p>No hay departamentos en la base de datos.</p>";
            }

        } catch (PDOException $ex) {
            // Manejo de errores en la consulta de lectura
            echo "Error al mostrar departamentos: " . $ex->getMessage();
        } finally {
            unset($miDB); // Cerramos la conexión
        }
        ?>
    </main>
</body>
</html>