<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Véro Grué - ProyectoTema4 Ejercicio04</title>
<link rel="stylesheet" href="../webroot/css/styleEjercicios.css">
<style>
*{
margin: 0 auto;
}
main{
display: block;
align-content: center;
margin: auto;
text-align: center;
}
h2{
margin-bottom: 30px;
}
label{
font-size: 20px;
margin-bottom: 10px;
display: inline-block;
}
input {
height : 35px;
margin-bottom: 20px;
display: inline-block;
padding-left: 5px;
border-radius: 5px;
}
button{
font-size: 20px;
background-color: grey;
color: white;
padding: 0 10px;
border-radius: 5px;
position: absolute;
font-family: Times New Roman;
height: 35px;
}
section{
display: inline-block;
position: relative;
height: 150px;
width: 800px;
}
input#DescDpto{
width: 500px;
margin-right: 20px;
}
input#T02_CodDepartamento{
width: 35px;
}
#DescDpto{
font-weight: bold;
}
li{
font-size: 20px;
}
h3{
font-size: 25px;
margin-bottom: 20px;
}
#T02_FechaCreacionDepartamento, #T02_FechaBajaDepartamento{
background-color: gainsboro;
}
table{
border:solid;
width: 80%;
text-align: center;
border-collapse: collapse;
margin-bottom: 20px
}
th{
border: solid;
padding: 5px 10px;
font-size: 20px;
font-weight: 900;
background-color: lightskyblue;
white-space: nowrap;
}
td{
border: solid 1px;
padding: 5px;
font-size: 18px;
border-right: solid ;
}
.titulo{
text-align: center;
}
.registro{
border: solid;
font-size: 20px;
}
.contenedorTabla{
width: 100%;
margin-bottom: 10px;
height: auto;
padding-top: 10px;
}
</style>
</head>
<body>
<header class="header">
<a href="../indexProyectoTema4.php">volver</a>
<h1>Ejercicio 04</h1>
</header>
<main>
<?php
/**
* @author: Véronique Grué
* @since 13/11/2025
*
* * Ejercicio 4
* * Formulario de búsqueda de departamentos por descripción (por una parte del campo DescDepartamento, si el usuario no pone nada deben aparecer todos los departamentos) .
*/
//CON CONSULTA PREPARADA
//enlace para importar las librerías de validación de campos
require_once '../core/libreriaValidacion.php';
//enlace para la configuración de la conexion a la base de datos
require_once '../config/confDBPDO.php';
///inicialización de variables
/** @var array $aErrores Array para almacenar mensajes de error de validación. */
$aErrores = [
'DescDpto' => null
];
/** @var array $aRespuestas Array para almacenar las repuestas. */
$aRespuestas = [
'DescDpto' => ''
];
/** @boollean boolean $entradaOK Indica si los datos de entrada son correctos o no. */
$entradaOK = true;
//Para cada campo del formulario se valida la entrada y se actua en consecuencia
if (isset($_REQUEST['buscar'])) {//se cumple si el boton es buscar
// $aErrores['T02_DescDepartamento'] = validacionFormularios::comprobarAlfaNumerico($_REQUEST['T02_DescDepartamento'], 255, 0, 0);
if (!empty($_REQUEST['DescDpto'])) {
$aErrores['DescDpto'] = validacionFormularios::comprobarAlfaNumerico($_REQUEST['DescDpto'], 255, 0, 0);
}
//recorre el array de errores para detectar si hay alguno
foreach ($aErrores as $valorCampo) {
if (!is_null($valorCampo) && $valorCampo !== '') {
$entradaOK = false;
}
}
} else {
//Si no se ha aceptado el formulario
$entradaOK = false;
}
//Tratamiento del formulario
if ($entradaOK) {
//REllenamos el array de respuesta con los valores que ha introducido el usuario
$aRespuestas['DescDpto'] = ($_REQUEST['DescDpto']);
}
//si hay algún error se vuelve a mostrar el formulario
?>
<section>
<h2>Mantenimiento del Departamento.</h2>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<label for="DescDpto">Descripción:</label>
<a style='color:red'><?php echo $aErrores['DescDpto'] ?></a>
<input name="DescDpto" id="DescDpto" type="text" value="<?php echo(empty($aErrores['DescDpto'])) ? ($_REQUEST['DescDpto'] ?? '') : ''; ?>">
<button type="submit" name="buscar" id="buscar">Buscar</button>
</form>
</section>
<section class="contenedorTabla">
<?php
try {
$miDB = new PDO(DNS, USUARIODB, PSWD);
$miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (empty($aRespuestas['DescDpto'])) {
$sql = "SELECT * FROM T_02Departamento ";
} else {
//Consulta si el usuario introduce parte o la totalidad de la descripción
$RespuestasSql = "%" . $aRespuestas['DescDpto'] . "%";
$sql = "SELECT * FROM T_02Departamento WHERE T02_DescDepartamento LIKE '$RespuestasSql'";
}
//consulta preparada para devolver datos
$consultaPreparada2 = $miDB->prepare($sql);
$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>';
//No fucniona rowcount de PDO así que cuento los resultado con un contador
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>';
}
$total=$consultaPreparada2->rowCount();
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 {
unset($miDB);
}
?>
</section>
</main>
<footer class="footer">
<div class="footerContent">
<div><p class="copyright">
2025-26 IES LOS SAUCES. ©Todos los derechos reservados.</p> <address><a href="../../VGDWESProyectoDWES/indexProyectoDWES.html">Véronique Grué.</a> Fecha de Actualización :
<time datetime="2025-12-06"></time> 06-12-2025 </address>
</div>
</div>
</footer>
</body>
</html>