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 8

<!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 8</b></h2>
        
        <?php
        
                /*
         * Autor: Alberto Méndez Núñez
         * Fecha de ultima modificación: 09/12/2025
         * Página web que toma datos (código y descripción) de la tabla Departamento y guarda en un fichero departamento.xml.
         * (COPIA DE SEGURIDAD / EXPORTAR). El fichero exportado se encuentra en el directorio .../tmp/ del servidor. 
         */
        
        // Incluir la configuración de la base de datos (constantes RUTA, USUARIO, PASS)
require_once '../config/confDBPDO.php'; 

try {
    // ==================== CONEXIÓN A LA BASE DE DATOS ====================
    // Crear un objeto PDO usando las constantes de configuración
    $miDB = new PDO(RUTA, USUARIO, PASS);

    // Configurar PDO para que lance excepciones ante errores en lugar de warnings
    $miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // ==================== CONSULTA DE DEPARTAMENTOS ====================
    // Seleccionamos código, descripción y volumen de todos los departamentos
    $query = 'SELECT T02_CodDepartamento, T02_DescDepartamento, T02_VolumenNegocio FROM T02_Departamento';

    // Preparar la consulta para ejecutarla de manera segura
    $consPreparada = $miDB->prepare($query);

    // Ejecutar la consulta
    $consPreparada->execute();

    // Obtener todos los resultados como objetos (PDO::FETCH_OBJ)
    $aObjResultados = $consPreparada->fetchAll(PDO::FETCH_OBJ);

    // ==================== VERIFICACIÓN ====================
    // Comprobar si se han encontrado departamentos
    if (empty($aObjResultados)) {
        echo "<h3>No hay departamentos para exportar.</h3>";
    } else {
        // ==================== EXPORTACIÓN A JSON ====================
        // Convertir los resultados obtenidos a formato JSON con sangría para mejor lectura
        $stringJson = json_encode($aObjResultados, JSON_PRETTY_PRINT);

        // Guardar el JSON en un fichero dentro de la carpeta tmp
        file_put_contents("../tmp/departamentosJson.json", $stringJson);

        // Mensaje de éxito
        echo "<h2>Los departamentos han sido exportados correctamente.</h2>";
        echo "<p>Compruebe la carpeta tmp para el archivo departamentosJson.json</p>";

        // ==================== MOSTRAR TABLA HTML ====================
        // Crear una tabla HTML para mostrar los departamentos exportados
        echo "<h3>Departamentos exportados:</h3>";
        echo "<table border='1' cellpadding='6' cellspacing='0'>
                <tr style='background-color: lightsteelblue; font-weight:bold;'>
                    <th>Código</th>
                    <th>Descripción</th>
                    <th>Volumen</th>
                </tr>";

        // Recorrer cada departamento y mostrar sus datos en la tabla
        foreach ($aObjResultados as $dep) {
            echo "<tr>
                    <td>{$dep->T02_CodDepartamento}</td>
                    <td>{$dep->T02_DescDepartamento}</td>
                    <td>{$dep->T02_VolumenNegocio}</td>
                  </tr>";
        }

        // Cerrar la tabla HTML
        echo "</table>";
    }

} catch (PDOException $ex) {
    // ==================== MANEJO DE ERRORES ====================
    // Si ocurre un error con PDO (conexión o consulta), se captura aquí
    echo "<h3>Error en la exportación:</h3>";
    echo "<p><strong>Mensaje:</strong> {$ex->getMessage()}</p>"; // Mensaje del error
    echo "<p><strong>Código PDO:</strong> {$ex->getCode()}</p>";  // Código del error

} finally {
    // ==================== CIERRE DE CONEXIÓN ====================
    // Liberar la conexión a la base de datos
    unset($miDB);
}
?>
    </main>
</body>
</html>