php-limpiando formularios
Para que los datos de $_POST
se eliminen después de actualizar la página, se necesita realizar una redirección después de procesar la solicitud. Esto se puede lograr utilizando la función header()
para redirigir la página a sí misma, lo que efectivamente limpia los datos $_POST
.
El problema en tu código actual es que la redirección no se realiza después de procesar la acción. A continuación, te muestro cómo se puede hacer correctamente:
Procesa el formulario y realiza la redirección: Después de cada caso en el
switch
, realiza la redirección usandoheader()
yexit()
.Eliminar los datos
$_POST
utilizando redirección: La redirección a la misma página limpiará los datos$_POST
.
Aquí está el código corregido:
<!DOCTYPE html>
<html lang="en">
<head>
<title>CRUD de Alumnos</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<!-- SweetAlert for alerts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/2.1.2/sweetalert.min.js" integrity="sha512-AA1Bzp5Q0K1KanKKmvN/4d3IRKVlv9PYgwFPvm32nPO6QS8yH1HO7LbgB1pgiOxPtfeg5zEn2ba64MUcqJx6CA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<!-- SweetAlert2 for enhanced alerts -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
// Función para restablecer el formulario cuando se carga la página
window.onload = function() {
document.getElementById("alumnoForm").reset();
}
// Función para restablecer el formulario principal antes de seleccionar un registro
function resetForm() {
document.getElementById("alumnoForm").reset();
}
</script>
</head>
<body>
<?php
// Datos del formulario
$id = isset($_POST["id"]) ? $_POST["id"] : "";
$nombre = isset($_POST["nombre"]) ? $_POST["nombre"] : "";
$apellidos = isset($_POST["apellidos"]) ? $_POST["apellidos"] : "";
$cursos = isset($_POST["cursos"]) ? $_POST["cursos"] : array();
$accion = isset($_POST["accion"]) ? $_POST["accion"] : "";
// Función para conectar a la base de datos
function conectar() {
// Crear una nueva conexión PDO a la base de datos MySQL
$link = new PDO("mysql:host=localhost;dbname=aplicacion", "root", "");
return $link;
}
$conexionBD = conectar();
$arregloCursos = array(); // Inicializar la variable
if (isset($_POST['accion'])) {
switch($accion) {
case "seleccionar":
$sql = "SELECT * FROM alumnos WHERE id=:id";
$consulta = $conexionBD->prepare($sql);
$consulta->bindParam(":id", $id);
$consulta->execute();
$alumno = $consulta->fetch(PDO::FETCH_ASSOC);
$nombre = $alumno["nombre"];
$apellidos = $alumno["apellidos"];
$sql = "SELECT cursos.id FROM alumnos_cursos ";
$sql .= "INNER JOIN cursos ON cursos.id=alumnos_cursos.idcurso ";
$sql .= "WHERE alumnos_cursos.idalumno=:id";
$consulta = $conexionBD->prepare($sql);
$consulta->bindParam(":id", $id);
$consulta->execute();
$cursosAlumno = $consulta->fetchAll(PDO::FETCH_ASSOC);
foreach($cursosAlumno as $curso){
$arregloCursos[] = $curso["id"];
}
// Redirigir para limpiar $_POST
header("Location: " . $_SERVER['PHP_SELF']);
exit();
break;
case "agregar":
if (!empty($nombre) && !empty($apellidos)) {
$sql = "INSERT INTO alumnos (id, nombre, apellidos) VALUES (null, :nombre, :apellidos)";
$consulta = $conexionBD->prepare($sql);
$consulta->bindParam(":nombre", $nombre);
$consulta->bindParam(":apellidos", $apellidos);
$consulta->execute();
$id = $conexionBD->lastInsertId();
$cursos = $_POST["cursos"];
foreach($cursos as $curso){
$sql = "INSERT INTO alumnos_cursos (id, idalumno, idcurso) VALUES (null, :id_alumno, :id_curso)";
$consulta = $conexionBD->prepare($sql);
$consulta->bindParam(":id_alumno", $id);
$consulta->bindParam(":id_curso", $curso);
$consulta->execute();
}
$arregloCursos = $cursos;
// Redirigir para limpiar $_POST
header("Location: " . $_SERVER['PHP_SELF']);
exit();
}
break;
case "borrar":
$sql = "DELETE FROM alumnos WHERE id=:id";
$consulta = $conexionBD->prepare($sql);
$consulta->bindParam(":id", $id);
$consulta->execute();
// Redirigir para limpiar $_POST
header("Location: " . $_SERVER['PHP_SELF']);
exit();
break;
}
}
// Obtener todos los cursos
$sql = "SELECT * FROM cursos";
$listaCursos = $conexionBD->query($sql);
$listaCursos = $listaCursos->fetchAll(PDO::FETCH_ASSOC);
// Consultar todos los alumnos de la base de datos
$sql = "SELECT * FROM alumnos";
$conexionBD = conectar();
$listaAlumnos = $conexionBD->query($sql);
$alumnos = $listaAlumnos->fetchAll(PDO::FETCH_ASSOC);
// Por cada alumno, consultar los cursos asociados
foreach ($alumnos as $clave => $alumno) {
$sql = "SELECT * FROM cursos WHERE id IN (SELECT idcurso FROM alumnos_cursos WHERE idalumno = :idalumno)";
$consulta = $conexionBD->prepare($sql);
$consulta->bindParam(':idalumno', $alumno['id']);
$consulta->execute();
$cursosAlumno = $consulta->fetchAll(PDO::FETCH_ASSOC);
$alumnos[$clave]['cursos'] = $cursosAlumno;
}
?>
<div class="container">
<div class="row">
<div class="col-md-5">
<br/><br/>
<!-- Formulario para agregar, editar y borrar alumnos -->
<form action="" method="post" id="alumnoForm">
<div class="card">
<div class="card-header">
Alumnos
</div>
<div class="card-body">
<div class="mb-3">
<label for="id" class="form-label">ID</label>
<input type="text" class="form-control" name="id" value="<?php echo $id;?>" id="id" aria-describedby="helpId" placeholder="ID">
</div>
<div class="mb-3">
<label for="nombre" class="form-label">Nombre:</label>
<input type="text" class="form-control" value="<?php echo $nombre;?>" name="nombre" id="nombre" aria-describedby="helpId" placeholder="nombre">
</div>
<div class="mb-3">
<label for="apellidos" class="form-label">Apellidos</label>
<input type="text" class="form-control" value="<?php echo $apellidos;?>" name="apellidos" id="apellidos" aria-describedby="helpId" placeholder="Apellidos">
</div>
<div class="mb-3">
<label for="" class="form-label">Curso del alumno:</label>
<select multiple class="form-control" name="cursos[]" id="ListaCursos">
<?php foreach($listaCursos as $curso):?>
<option
<?php if(!empty($arregloCursos) && in_array($curso["id"], $arregloCursos)): ?>
selected
<?php endif; ?>
value="<?php echo $curso["id"];?>"><?php echo $curso["nombre_curso"];?></option>
<?php endforeach;?>
</select>
</div>
<div class="btn-group" role="group" aria-label="">
<button value="agregar" name="accion" type="submit" class="btn btn-success">Agregar</button>
<button value="editar" name="accion" type="submit" class="btn btn-warning">Editar</button>
<button value="borrar" name="accion" type="submit" class="btn btn-danger">Borrar</button>
</div>
</div>
</div>
</form>
</div>
<div class="col-md-7">
<br/><br/>
<!-- Tabla para mostrar la lista de alumnos -->
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
<!-- Iterar sobre cada alumno para mostrar sus datos -->
<?php foreach ($alumnos as $alumno): ?>
<tr>
<td><?php echo htmlspecialchars($alumno["id"]); ?></td>
<td>
<?php echo htmlspecialchars($alumno["nombre"]); ?>
<br/>
<!-- Iterar sobre cada curso del alumno para mostrar el nombre del curso -->
<?php foreach ($alumno['cursos'] as $curso): ?>
<a href="#"><?php echo htmlspecialchars($curso['nombre_curso']); ?></a><br/>
<?php endforeach; ?>
</td>
<td><?php echo htmlspecialchars($alumno["apellidos"]); ?></td>
<td>
<form action="" method="post" id="formuseleccionar" onsubmit="resetForm()">
<input type="hidden" name="id" id="id" value="<?php echo $alumno["id"];?>">
<input type="submit" value="seleccionar" name="accion"/>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
Comentarios
Publicar un comentario