<!DOCTYPE html>
<!--
Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
Click nbfs://nbhost/SystemFileSystem/Templates/Scripting/EmptyPHPWebPage.php to edit this template
-->
<html>
<head>
<meta charset="UTF-8">
<title>Ejercicio 03 - Consulta Preparada</title>
<link rel="stylesheet" href="../webroot/css/estilosEjercicio03.css"/>
</head>
<body>
<header>
<h1>TEMA 4 : TÉCNICAS DE ACCESO PHP</h1>
<h2>EJERCICIO 3 - CONSULTA PREPARADA</h2>
</header>
<main>
<?php
/**
* @author Alejandro De la Huerga Fernández
* @version 1.0
* @date 2025-11-05
*
*
* Ejercicio 3 Consulta Preparada
* *Formulario para añadir un departamento a la tabla Departamento con validación de entrada y control de errores.
*/
//enlace para importar las librerías de validación de campos
require_once '../core/231018libreriaValidacion.php';
//enlace a los datos de conexión
require_once '../config/confDBPDO.php';
// Establecimiento de conexion mediante la instancia un objeto PDO
$miDB = new PDO(DNS, USUARIODB, PSWD);
$miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Array que almacena los errores
$aErrores=[
'T02_CodDepartamento' =>'',
'T02_DescDepartamento' =>'',
'T02_VolumenDeNegocio'=>'',
];
// Array que almacena las respuestas , inicializadas a null
$aRespuestas=[
'T02_CodDepartamento' =>null,
'T02_DescDepartamento' =>null,
'T02_VolumenDeNegocio'=>null,
];
define('OBLIGATORIO',1); // Constante booleana que define que un campo es obligatorio.
$entradaOK=true; //Variable booleana que valida que la entrada esta bien , inicializada a true.
if(isset($_REQUEST['enviar'])){ // código que se ejecuta cuando se envia el formulario.
$aErrores['T02_CodDepartamento']= validacionFormularios::comprobarAlfabetico($_REQUEST['T02_CodDepartamento'], 3, 3, OBLIGATORIO);
$aErrores['T02_DescDepartamento']= validacionFormularios::comprobarAlfabetico($_REQUEST['T02_DescDepartamento'], 255, 1, OBLIGATORIO);
$aErrores['T02_VolumenDeNegocio']= validacionFormularios::comprobarFloat($_REQUEST['T02_VolumenDeNegocio'], PHP_FLOAT_MAX, 0, OBLIGATORIO);
// Si en el array de errores encuentra un error la variable entradaOK pasa a un valor false.
foreach ($aErrores as $campo => $valor) {
if($valor!=null){ // Si ha habido algun error $entradaOK es falso.
$entradaOK=false;
}else{
$aRespuestas[$campo]=$_REQUEST[$campo]; // Guardamos el dato correcto en el array de Respuestas.
}
}
}else{
$entradaOK=false; // Si el formulario no se ha rellenado nunca.
}
// Tratamiento del formulario.
if($entradaOK){
$aRespuestas['T02_CodDepartamento']=$_REQUEST['T02_CodDepartamento'];
$aRespuestas['T02_DescDepartamento']=$_REQUEST['T02_DescDepartamento'];
$aRespuestas['T02_VolumenDeNegocio']=$_REQUEST['T02_VolumenDeNegocio'];
try{
// Preparacon de la consulta con query.
$sql=<<<EOT
INSERT INTO T02_Departamento (T02_CodDepartamento,T02_DescDepartamento,
T02_FechaCreacionDepartamento,T02_VolumenDeNegocio)
VALUES (
'{$aRespuestas['T02_CodDepartamento']}',
'{$aRespuestas['T02_DescDepartamento']}',
NOW(),
'{$aRespuestas['T02_VolumenDeNegocio']}'
);
EOT;
//consulta preparada para devolver datos
$consultaPreparada = $miDB->prepare($sql);
$consultaPreparada->execute();
echo "<p style='color:green; font-weight:bold;'>DEPARTAMENTO INSERTADO CORRECTAMENTE</p>";
} catch (PDOException $miExceptionPDO) {
echo 'Error: '.$miExceptionPDO->getMessage();
echo '<br>';
echo 'Código de error: '.$miExceptionPDO->getCode();
} finally{
unset($miDB);
}
//Se recorre el array de las respuestas y se muestran
foreach ($aRespuestas as $campo => $valorCampo) {
echo("$campo del usuario : " . $valorCampo . '</br>');
}
}else{
// Si no se ha ingresado correctamente volvemos a mostrar el formulario.
?>
<section class="formulario">
<h2>Inserta un nuevo departamento</h2>
<form name="formulario" action=<?php echo $_SERVER["PHP_SELF"]; ?> method="post">
<label for="T02_CodDepartamento">T02_CodDepartamento:
<input style="background-color:lightgoldenrodyellow; text-transform: uppercase;" type="text" name="T02_CodDepartamento"
value='<?php echo (empty($aErrores['T02_CodDepartamento'])) ? ($_REQUEST['T02_CodDepartamento'] ?? '') : ''; ?>'/>
<a style=color:red;> <?php echo $aErrores['T02_CodDepartamento'] ?> </a>
</label>
<br/>
<label for="T02_DescDepartamento">T02_DescDepartamento:
<input style="background-color:lightgoldenrodyellow;" type="text" name="T02_DescDepartamento"
value='<?php echo (empty($aErrores['T02_DescDepartamento'])) ? ($_REQUEST['T02_DescDepartamento'] ?? '') : ''; ?>'/>
<a style=color:red;> <?php echo $aErrores['T02_DescDepartamento'] ?> </a>
</label>
<br/>
<label for="T02_FechaCreacionDepartamento">T02_FechaCreacionDepartamento:
<input style="background-color:lightgrey;" name="T02_FechaCreacionDepartamento" id="T02_FechaCreacionDepartamento"
type="date" value="<?php echo date('Y-m-d'); ?>" disabled>
</label>
<br/>
<label for="T02_VolumenDeNegocio">T02_VolumenDeNegocio:
<input style="background-color:lightgoldenrodyellow;" type="text" name="T02_VolumenDeNegocio"
value='<?php echo (empty($aErrores['T02_VolumenDeNegocio'])) ? ($_REQUEST['T02_VolumenDeNegocio'] ?? '') : ''; ?>'/>
<a style=color:red;> <?php echo $aErrores['T02_VolumenDeNegocio'] ?></a>
</label>
<br/>
<div class="botones">
<input type="submit" name="enviar" value="enviar">
<a class="cancelar" href="../indexProyectoTema4.php">Cancelar</a>
</div>
</form>
<?php
}
?>
</section>
<?php
try {
// Establecimiento de conexion mediante la instancia un objeto PDO
$miDB= new PDO(DNS,USUARIODB,PSWD);
$miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//consulta preparada para devolver datos
$consultaPreparada2 = $miDB->prepare('SELECT * FROM T02_Departamento');
$consultaPreparada2->execute();
//Mostrar los registros
//https://www.php.net/manual/es/pdostatement.fetch.php
echo'<table>';
echo '<tr>';
echo'<th> Codigo </th>';
echo '<th> Fecha Creación </th>';
echo '<th> Fecha Baja </th>';
echo '<th> Descripción </th>';
echo '<th> Volumen de Negocio</th>';
echo '</tr>';
while ($oRegistroObject = $consultaPreparada2->fetchObject()) {
echo '<tr>';
echo'<td> ' . $oRegistroObject->T02_CodDepartamento . '</td>';
$oFechaCreacion = new DateTime($oRegistroObject->T02_FechaCreacionDepartamento);
echo'<td> ' . $oFechaCreacion->format("d-m-Y") . '</td>';
if (!is_null($oRegistroObject->T02_FechaBajaDepartamento)) {
//si no se pone la condición la fecha no es null
$oFechaBaja = new DateTime($oRegistroObject->T02_FechaBajaDepartamento);
echo '<td>' . $oFechaBaja->format("d-m-Y") . '</td>';
} else {
echo '<td>Activo</td>';
}
echo'<td> ' . $oRegistroObject->T02_DescDepartamento . '</td>';
echo'<td> ' . number_format($oRegistroObject->T02_VolumenDeNegocio, 2, ',', '.') . '€</td>';
echo '</tr>';
}
$numRegistros = $miDB->prepare('SELECT COUNT(*) FROM T02_Departamento');
$numRegistros->execute();
$total = $numRegistros->fetchColumn();
echo '<tr>';
echo "<td class='registro' colspan=5><strong>Número de registros:</strong> $total</td>";
echo '</table>';
} catch (PDOException $miExceptionPDO) {
echo '<p style="color:purple; font-weight:bold;">Error: ' . $miExceptionPDO->getMessage() . '<br>' . 'Código de error: ' . $miExceptionPDO->getCode();
} finally {
//mejor dentro para que se cierre en todos los casos.
unset($miDB);
}
?>
</main>
</body>
</html>