Muestra del código PHP ejercicio 3
<!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 3</b></h2>
<?php
/*
* Autor: Alberto Méndez Núñez
* Fecha de ultima modificación: 30/10/2025
* Formulario para añadir un departamento a la tabla Departamento con validación de entrada y control de errores.
*/
// Incluimos la librería de validación personalizada
require_once 'libreriaValidacionFormulario.php';
// Incluimos el archivo con las constantes de conexión (RUTA, USUARIO, PASS)
require_once '../config/confDBPDO.php';
/* ================= CONEXIÓN A LA BASE DE DATOS =================== */
try {
$miDB = new PDO(RUTA, USUARIO, PASS);
$miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $ex) {
die("Error de conexión: " . $ex->getMessage());
}
/* =============== ARRAYS PARA ERRORES Y RESPUESTAS ================ */
// Array donde se almacenarán los mensajes de error para cada campo
$aErrores = [
"T02_CodDepartamento" => "",
"T02_DescDepartamento" => "",
"T02_VolumenNegocio" => ""
];
// Array donde se almacenarán los valores válidos introducidos por el usuario
$aRespuestas = [
"T02_CodDepartamento" => "",
"T02_DescDepartamento" => "",
"T02_VolumenNegocio" => ""
];
// Variable para comprobar si el formulario es correcto
$entradaOK = true;
/* =============== PROCESAMIENTO DEL FORMULARIO (SI SE PULSA SUBMIT) ================ */
if (isset($_REQUEST['submit'])) {
// Recogemos los valores enviados por el usuario (si no existen → "")
$T02_CodDepartamento = $_REQUEST['T02_CodDepartamento'] ?? "";
$T02_DescDepartamento = $_REQUEST['T02_DescDepartamento'] ?? "";
$T02_VolumenNegocio = $_REQUEST['T02_VolumenNegocio'] ?? "";
/* ==================== VALIDACIONES ==================== */
// Validación código del departamento (alfabético, máximo 3 caracteres, obligatorio)
$aErrores['T02_CodDepartamento'] =
validacionFormularios::comprobarAlfabetico($T02_CodDepartamento, 3, 0, 1);
// Si el códgio no esta en mayusculas se muestra un error.
if($T02_CodDepartamento!== strtoupper($T02_CodDepartamento)){
$aErrores['T02_CodDepartamento']='El codigo de departamento debe estar en mayusculas';
}
// Validación descripción del departamento (alfabético, obligatorio)
$aErrores['T02_DescDepartamento'] =
validacionFormularios::comprobarAlfabetico($T02_DescDepartamento, 255, 0, 1);
// Convertimos coma en punto para validar decimales correctamente
$volumen = str_replace(",", ".", $T02_VolumenNegocio);
// Validación de número decimal
$aErrores['T02_VolumenNegocio'] =
validacionFormularios::comprobarFloat($volumen);
/* ==================== COMPROBACIÓN GENERAL DE ERRORES ==================== */
foreach ($aErrores as $error) {
if (!empty($error)) {
$entradaOK = false;
}
}
/* ================== COMPROBAR SI EL CÓDIGO DEPARTAMENTO EXISTE EN LA BD ===================== */
if ($entradaOK && empty($aErrores['T02_CodDepartamento'])) {
try {
// Consulta preparada para evitar inyecciones SQL
$sql = "SELECT * FROM T02_Departamento WHERE T02_CodDepartamento = ?";
$consulta = $miDB->prepare($sql);
$consulta->bindParam(1, $T02_CodDepartamento);
$consulta->execute();
// Si existe un registro da error
if ($consulta->fetch(PDO::FETCH_ASSOC)) {
$aErrores['T02_CodDepartamento'] =
"El departamento que intenta introducir ya existe en la base de datos.";
$entradaOK = false;
}
} catch (PDOException $ex) {
echo "Error al comprobar duplicados: " . $ex->getMessage();
$entradaOK = false;
}
}
}
/* ============== SI LOS DATOS SON CORRECTOS INSERTAR EN LA BD ================== */
if ($entradaOK && isset($_REQUEST['submit'])) {
$aRespuestas['T02_CodDepartamento'] = $T02_CodDepartamento;
$aRespuestas['T02_DescDepartamento'] = $T02_DescDepartamento;
$aRespuestas['T02_VolumenNegocio'] = ($volumen === "") ? 0 : $volumen;
try {
// Consulta preparada para insertar un nuevo registro
$sql = <<<EOT
INSERT INTO T02_Departamento (
T02_CodDepartamento,
T02_DescDepartamento,
T02_FechaCreacionDepartamento,
T02_VolumenNegocio,
T02_FechaBajaDepartamento
) VALUES (
:cod,
:desc,
NOW(),
:volumen,
NULL
)
EOT;
$stmt = $miDB->prepare($sql);
$stmt->execute([
":cod" => $aRespuestas['T02_CodDepartamento'],
":desc" => $aRespuestas['T02_DescDepartamento'],
":volumen" => $aRespuestas['T02_VolumenNegocio']
]);
echo "<h3 style='color:green;'>Departamento insertado correctamente.</h3>";
} catch (PDOException $ex) {
echo "Error al insertar: " . $ex->getMessage();
}
} else {
// MOSTRAR FORMULARIO
?>
<h1 style="text-align:center;">Inserción de nuevo departamento</h1>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<table>
<!-- Código -->
<tr>
<td><label for="T02_CodDepartamento">Código del Departamento:</label></td>
<td>
<input type="text" name="T02_CodDepartamento" id="T02_CodDepartamento"
style="background-color: lightgoldenrodyellow"
value="<?= empty($aErrores['T02_CodDepartamento']) ?
($_REQUEST['T02_CodDepartamento'] ?? '') : '' ?>">
</td>
<td><span style="color:red;"><?= $aErrores["T02_CodDepartamento"] ?></span></td>
</tr>
<!-- Descripción -->
<tr>
<td><label for="T02_DescDepartamento">Descripción:</label></td>
<td>
<input type="text" name="T02_DescDepartamento" id="T02_DescDepartamento"
style="background-color: lightgoldenrodyellow"
value="<?= empty($aErrores['T02_DescDepartamento']) ?
($_REQUEST['T02_DescDepartamento'] ?? '') : '' ?>">
</td>
<td><span style="color:red;"><?= $aErrores["T02_DescDepartamento"] ?></span></td>
</tr>
<!-- Volumen -->
<tr>
<td><label for="T02_VolumenNegocio">Volumen de Negocio:</label></td>
<td>
<input type="number" step="0.01" name="T02_VolumenNegocio" id="T02_VolumenNegocio"
style="background-color: lightgoldenrodyellow"
value="<?= empty($aErrores['T02_VolumenNegocio']) ?
($_REQUEST['T02_VolumenNegocio'] ?? '') : '' ?>">
</td>
<td><span style="color:red;"><?= $aErrores["T02_VolumenNegocio"] ?></span></td>
</tr>
<tr>
<td colspan="3" style="text-align:center;">
<input type="submit" name="submit" value="Insertar">
</td>
</tr>
</table>
</form>
<?php
}
/* ============== MOSTRAR TABLA COMPLETA DE DEPARTAMENTOS ============= */
try {
$consulta = $miDB->query("SELECT * FROM T02_Departamento");
if ($consulta->rowCount() > 0) {
echo "<table border='2' style='border-collapse: collapse; margin-top:20px;'>";
echo "<tr style='background-color: lightsteelblue; font-weight: bold;'>";
for ($i = 0; $i < $consulta->columnCount(); $i++) {
$col = $consulta->getColumnMeta($i)['name'];
echo "<th>$col</th>";
}
echo "</tr>";
while ($reg = $consulta->fetch(PDO::FETCH_OBJ)) {
echo "<tr>";
foreach ($reg as $valor) {
echo "<td style='padding:5px;'>$valor</td>";
}
echo "</tr>";
}
echo "</table>";
echo "<h3 style='text-align:center;'>Hay {$consulta->rowCount()} registros.</h3>";
} else {
echo "<p>No hay departamentos en la base de datos.</p>";
}
} catch (PDOException $ex) {
echo "Error al mostrar departamentos: " . $ex->getMessage();
} finally {
unset($miDB);
}
?>
</main>
</body>
</html>