php-variables de sesion
Para asegurarte de que los datos de la selección se mantengan después de la selección, pero se limpien cuando se recargue la página, puedes utilizar una combinación de almacenamiento de datos en la sesión y lógica para gestionar la limpieza de la sesión en el momento adecuado.
A continuación, te muestro cómo ajustar tu código para lograr esto sin usar AJAX:
PHP y HTML
- Almacenar la selección en la sesión.
- Limpiar la sesión al recargar la página.
<?php
session_start();
// Datos del formulario
$id = isset($_POST["id"]) ? $_POST["id"] : (isset($_SESSION["id"]) ? $_SESSION["id"] : "");
$nombre = isset($_POST["nombre"]) ? $_POST["nombre"] : (isset($_SESSION["nombre"]) ? $_SESSION["nombre"] : "");
$apellidos = isset($_POST["apellidos"]) ? $_POST["apellidos"] : (isset($_SESSION["apellidos"]) ? $_SESSION["apellidos"] : "");
$cursos = isset($_POST["cursos"]) ? $_POST["cursos"] : (isset($_SESSION["cursos"]) ? $_SESSION["cursos"] : array());
$accion = isset($_POST["accion"]) ? $_POST["accion"] : "";
// Función para conectar a la base de datos
function conectar() {
$link = new PDO("mysql:host=localhost;dbname=aplicacion", "root", "");
return $link;
}
$conexionBD = conectar();
$arregloCursos = array();
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"];
}
// Guardar datos en la sesión
$_SESSION["id"] = $id;
$_SESSION["nombre"] = $nombre;
$_SESSION["apellidos"] = $apellidos;
$_SESSION["cursos"] = $arregloCursos;
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;
// Limpiar sesión
session_unset();
// 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();
// Limpiar sesión
session_unset();
// 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;
}
?>
<!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();
}
</script>
</head>
<body>
<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 htmlspecialchars($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 htmlspecialchars($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 htmlspecialchars($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 htmlspecialchars($curso["id"]); ?>"><?php echo htmlspecialchars($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">
Comentarios
Publicar un comentario