Mtro. Fernando Arciniega

Apoyame con un clic en los anuncios, me ayudas a seguir generando contenido de calidad. ¡Gracias por tu apoyo!

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Search in posts
Search in pages

Agenda de citas médicas – 5 . Consultar Actualizar y Eliminar pacientes

Agenda de citas médicas – 5 . Consultar Actualizar y Eliminar pacientes
Print Friendly, PDF & Email

Continuando con los ejercicios de la Agenda de citas médicas, aquí tienes un ejemplo de cómo crear un archivo PHP para consultar la base de datos de pacientes y una parte adicional de CSS para dar formato a la página de consulta. Además, asumiremos que tienes un archivo de estilo (estilos.css) en el que puedes agregar las siguientes reglas CSS para formatear la página de consulta:

Archivo consultar_paciente.php para la consulta de pacientes:

<!DOCTYPE html>
<html lang="es">
<head>
    <link rel="stylesheet" type="text/css" href="estilos.css">
    <meta charset="UTF-8">
    <title>Consultar Pacientes</title>
</head>
<body>
    <h1>Consulta de Pacientes</h1>
    <div class="consulta-container">
        <?php
        // Conectar a la base de datos
        $conexion = mysqli_connect("localhost", "arci", "123", "citas_medicas");

        // Consultar la tabla de pacientes
        $consulta = "SELECT id, nombre, apellido, email, telefono FROM pacientes";
        $result = mysqli_query($conexion, $consulta);

        if (mysqli_num_rows($result) > 0) {
            echo "<table class='pacientes-table'>";
            echo "<tr>";
            echo "<th>ID</th>";
            echo "<th>Nombre</th>";
            echo "<th>Apellido</th>";
            echo "<th>Email</th>";
            echo "<th>Teléfono</th>";
            echo "</tr>";

            while ($row = mysqli_fetch_assoc($result)) {
                echo "<tr>";
                echo "<td>{$row['id']}</td>";
                echo "<td>{$row['nombre']}</td>";
                echo "<td>{$row['apellido']}</td>";
                echo "<td>{$row['email']}</td>";
                echo "<td>{$row['telefono']}</td>";
                echo "</tr>";
            }

            echo "</table>";
        } else {
            echo "No hay pacientes registrados en la base de datos.";
        }

        // Cerrar la conexión a la base de datos
        mysqli_close($conexion);
        ?>
    </div>
</body>
</html>

CSS adicional en estilos.css para formatear la tabla de consulta:

/* Estilo para la tabla de consulta de pacientes */
.pacientes-table {
    width: 100%;
    border-collapse: collapse;
    margin: 20px auto;
    box-shadow: 0px 0px 10px #AAAAAA;
    background-color: #FFFFFF;
}

.pacientes-table th, .pacientes-table td {
    border: 1px solid #AAAAAA;
    padding: 10px;
    text-align: left;
}

.pacientes-table th {
    background-color: #0070C0;
    color: #FFFFFF;
}

.pacientes-table tr:nth-child(even) {
    background-color: #F5F5F5;
}

.pacientes-table tr:nth-child(odd) {
    background-color: #FFFFFF;
}

Para agregar una columna a la tabla con funciones para actualizar y borrar pacientes, puedes incluir imágenes de 48px y enlaces a las páginas de actualización y borrado correspondientes. Aquí tienes el código PHP y CSS actualizado:

Archivo consultar_paciente.php con la columna de funciones:

<!DOCTYPE html>
<html lang="es">
<head>
    <link rel="stylesheet" type="text/css" href="estilos.css">
    <meta charset="UTF-8">
    <title>Consultar Pacientes</title>
</head>
<body>
    <h1>Consulta de Pacientes</h1>
    <div class="consulta-container">
        <?php
        // Conectar a la base de datos
        $conexion = mysqli_connect("localhost", "arci", "123", "citas_medicas");

        // Consultar la tabla de pacientes
        $consulta = "SELECT id, nombre, apellido, email, telefono FROM pacientes";
        $result = mysqli_query($conexion, $consulta);

        if (mysqli_num_rows($result) > 0) {
            echo "<table class='pacientes-table'>";
            echo "<tr>";
            echo "<th>ID</th>";
            echo "<th>Nombre</th>";
            echo "<th>Apellido</th>";
            echo "<th>Email</th>";
            echo "<th>Teléfono</th>";
            echo "<th>Acciones</th>"; // Nueva columna para acciones
            echo "</tr>";

            while ($row = mysqli_fetch_assoc($result)) {
                echo "<tr>";
                echo "<td>{$row['id']}</td>";
                echo "<td>{$row['nombre']}</td>";
                echo "<td>{$row['apellido']}</td>";
                echo "<td>{$row['email']}</td>";
                echo "<td>{$row['telefono']}</td>";
                echo "<td>";
                echo "<a href='actualizar_paciente.php?id={$row['id']}'><img src='imagen_actualizar.png' alt='Actualizar' width='48'></a>";
                echo "<a href='borrar_paciente.php?id={$row['id}'><img src='imagen_borrar.png' alt='Borrar' width='48'></a>";
                echo "</td>";
                echo "</tr>";
            }

            echo "</table>";
        } else {
            echo "No hay pacientes registrados en la base de datos.";
        }

        // Cerrar la conexión a la base de datos
        mysqli_close($conexion);
        ?>
    </div>
</body>
</html>

CSS adicional en estilos.css para formatear la nueva columna de funciones:

/* Estilo para la columna de funciones en la tabla de consulta */
.pacientes-table td a {
    margin: 0 5px;
    text-decoration: none;
    color: #0070C0;
}

.pacientes-table td a img {
    border: 1px solid #AAAAAA;
    border-radius: 5px;
}

.pacientes-table td a:hover img {
    transform: scale(1.1);
}

En el código PHP, hemos agregado una nueva columna «Acciones» que contiene enlaces a las páginas de actualización y borrado correspondientes. Los enlaces incluyen imágenes de 48px y se pasan el ID del paciente a través de la URL.

En el CSS adicional, hemos añadido estilos para formatear la nueva columna de funciones, como margen entre las imágenes y un efecto de escala al pasar el cursor sobre las imágenes. Asegúrate de tener las imágenes actualizadas y correctamente referenciadas en tu proyecto.


A continuación te proporciono el código para un formulario de actualización de pacientes (actualizar_paciente.php) con el mismo diseño y estilos que se han manejado en los formularios anteriores. Asegúrate de tener las imágenes de las acciones de «Actualizar» y «Borrar» en tu proyecto y que las rutas estén definidas correctamente en tu código.

Archivo actualizar_paciente.php:

<!DOCTYPE html>
<html lang="es">
<head>
    <link rel="stylesheet" type="text/css" href="estilos.css">
    <meta charset="UTF-8">
    <title>Actualizar Paciente</title>
</head>
<body>
    <h1>Actualizar Paciente</h1>
    <form action="procesar_actualizar_paciente.php" method="post">
        <label for="nombre">Nombre:</label>
        <input type="text" id="nombre" name="nombre">
        <br>
        <label for="apellido">Apellido:</label>
        <input type="text" id="apellido" name="apellido">
        <br>
        <label for="email">Email</label>
        <input type="text" id="email" name="email">
        <br>
        <label for="telefono">Teléfono:</label>
        <input type="text" id="telefono" name="telefono">
        <br>
        <input type="submit" value="Actualizar">
    </form>
</body>
</html>

En este formulario, hemos mantenido el mismo diseño y estilos aplicados anteriormente. Los campos de entrada de texto y el botón de «Actualizar» siguen el estilo definido en el archivo de hojas de estilo (estilos.css). Este formulario es para actualizar los datos del paciente seleccionado.

Después de que el usuario complete este formulario y haga clic en «Actualizar,» los datos serán enviados a procesar_actualizar_paciente.php, donde se llevará a cabo la lógica de actualización en la base de datos.

Recuerda que debes implementar el archivo procesar_actualizar_paciente.php para manejar la lógica de actualización de datos en la base de datos.

Si estás accediendo a la página actualizar_paciente.php mediante la URL con el parámetro id (por ejemplo, http://localhost/agenda/actualizar_paciente.php?id=1) y no se está pasando la información al formulario, es importante que recuperes la información del paciente correspondiente a través de PHP y luego la muestres en los campos del formulario. Aquí hay un ejemplo de cómo hacerlo:

<!DOCTYPE html>
<html lang="es">
<head>
    <link rel="stylesheet" type="text/css" href="estilos.css">
    <meta charset="UTF-8">
    <title>Actualizar Paciente</title>
</head>
<body>
    <h1>Actualizar Paciente</h1>
    <?php
    // Verificar si se proporciona un ID en la URL
    if (isset($_GET['id'])) {
        $id = $_GET['id'];

        // Conectar a la base de datos
        $conexion = mysqli_connect("localhost", "arci", "123", "citas_medicas");

        // Consultar la información del paciente con el ID proporcionado
        $consulta = "SELECT nombre, apellido, email, telefono FROM pacientes WHERE id = $id";
        $result = mysqli_query($conexion, $consulta);

        if ($row = mysqli_fetch_assoc($result)) {
            // Mostrar el formulario con los datos del paciente
            echo "<form action='procesar_actualizar_paciente.php' method='post'>";
            echo "<input type='hidden' name='id' value='$id'>"; // Campo oculto para el ID del paciente
            echo "<label for='nombre'>Nombre:</label>";
            echo "<input type='text' id='nombre' name='nombre' value='{$row['nombre']}'>";
            echo "<br>";
            echo "<label for='apellido'>Apellido:</label>";
            echo "<input type='text' id='apellido' name='apellido' value='{$row['apellido']}'>";
            echo "<br>";
            echo "<label for='email'>Email</label>";
            echo "<input type='text' id='email' name='email' value='{$row['email']}'>";
            echo "<br>";
            echo "<label for='telefono'>Teléfono:</label>";
            echo "<input type='text' id='telefono' name='telefono' value='{$row['telefono']}'>";
            echo "<br>";
            echo "<input type='submit' value='Actualizar'>";
            echo "</form>";
        } else {
            echo "Paciente no encontrado.";
        }

        // Cerrar la conexión a la base de datos
        mysqli_close($conexion);
    } else {
        echo "ID de paciente no proporcionado.";
    }
    ?>
</body>
</html>

Este código verifica si se proporciona un ID en la URL y luego consulta la información del paciente correspondiente en la base de datos. Si se encuentra el paciente, se muestra el formulario con los datos del paciente. De lo contrario, se muestra un mensaje indicando que el paciente no se ha encontrado.

Asegúrate de tener una base de datos válida y que los nombres de las columnas en la consulta coincidan con tu base de datos. También, verifica que la conexión a la base de datos esté configurada correctamente.

Puedes agregar una lista desplegable de IDs de pacientes en caso de que no se reciba la información por POST, es decir, que no haya seleccionado el paciente a modificar, si no que el usuario venga del menú principal. Aquí tienes el código actualizado:

<!DOCTYPE html>
<html lang="es">
<head>
    <link rel="stylesheet" type="text/css" href="estilos.css">
    <meta charset="UTF-8">
    <title>Actualizar Paciente</title>
</head>
<body>
    <h1>Actualizar Paciente</h1>
    <?php
    // Conectar a la base de datos
    $conexion = mysqli_connect("localhost", "arci", "123", "citas_medicas");

    // Consultar la lista de IDs de pacientes
    $consulta_ids = "SELECT id FROM pacientes";
    $result_ids = mysqli_query($conexion, $consulta_ids);

    // Verificar si se proporciona un ID en la URL
    if (isset($_GET['id'])) {
        $id = $_GET['id'];

        // Consultar la información del paciente con el ID proporcionado
        $consulta = "SELECT nombre, apellido, email, telefono FROM pacientes WHERE id = $id";
        $result = mysqli_query($conexion, $consulta);

        if ($row = mysqli_fetch_assoc($result)) {
            // Mostrar el formulario con los datos del paciente
            echo "<form action='procesar_actualizar_paciente.php' method='post'>";
            echo "<input type='hidden' name='id' value='$id'>";
            echo "<label for='nombre'>Nombre:</label>";
            echo "<input type='text' id='nombre' name='nombre' value='{$row['nombre']}'>";
            echo "<br>";
            echo "<label for='apellido'>Apellido:</label>";
            echo "<input type='text' id='apellido' name='apellido' value='{$row['apellido']}'>";
            echo "<br>";
            echo "<label for='email'>Email</label>";
            echo "<input type='text' id='email' name='email' value='{$row['email']}'>";
            echo "<br>";
            echo "<label for='telefono'>Teléfono:</label>";
            echo "<input type='text' id='telefono' name='telefono' value='{$row['telefono']}'>";
            echo "<br>";
            echo "<input type='submit' value='Actualizar'>";
            echo "</form>";
        } else {
            echo "Paciente no encontrado.";
        }
    } else {
        echo "<form action='actualizar_paciente.php' method='get'>";
        echo "<label for='id'>Seleccione el ID del paciente:</label>";
        echo "<select id='id' name='id'>";
        while ($row = mysqli_fetch_assoc($result_ids)) {
            // Consultar el nombre y apellido del paciente
            $id_paciente = $row['id'];
            $consulta_nombre_apellido = "SELECT nombre, apellido FROM pacientes WHERE id = $id_paciente";
            $result_nombre_apellido = mysqli_query($conexion, $consulta_nombre_apellido);
            $nombre_apellido = mysqli_fetch_assoc($result_nombre_apellido);
            echo "<option value='$id_paciente'>" . $id_paciente . ' - ' . $nombre_apellido['nombre'] . ' ' . $nombre_apellido['apellido'] . "</option>";
        }
        echo "</select>";
        echo "<input type='submit' value='Seleccionar'>";
        echo "</form>";
    }

    // Cerrar la conexión a la base de datos
    mysqli_close($conexion);
    ?>
</body>
</html>

En este código, hemos agregado una lista desplegable que muestra todos los IDs de pacientes disponibles en la base de datos. El usuario puede seleccionar un ID y hacer clic en «Seleccionar» para acceder al formulario de actualización con los datos del paciente correspondiente.

Si se proporciona un ID en la URL (mediante $_GET), se mostrará el formulario de actualización con los datos del paciente seleccionado. Si no se proporciona un ID en la URL, se mostrará la lista desplegable para que el usuario seleccione un paciente.

Este código consultará el nombre y el apellido de cada paciente en el bucle while que llena la lista desplegable. Luego, se mostrará el ID, el nombre y el apellido del paciente en cada opción de la lista. Esto permite al usuario seleccionar un paciente por ID, nombre y apellido desde la lista desplegable.


Aquí tienes un ejemplo de cómo crear el archivo procesar_actualizar_paciente.php para procesar la actualización de datos de pacientes en la base de datos:

<?php
// Verificar si se ha enviado el formulario
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $id = $_POST["id"];
    $nombre = $_POST["nombre"];
    $apellido = $_POST["apellido"];
    $email = $_POST["email"];
    $telefono = $_POST["telefono"];

    // Conectar a la base de datos
    $conexion = mysqli_connect("localhost", "arci", "123", "citas_medicas");

    // Actualizar los datos del paciente en la tabla pacientes
    $sql = "UPDATE pacientes SET nombre = '$nombre', apellido = '$apellido', email = '$email', telefono = '$telefono' WHERE id = $id";
    
    if (mysqli_query($conexion, $sql)) {
        echo "Los datos del paciente se han actualizado correctamente.";
    } else {
        echo "Error al actualizar los datos del paciente: " . mysqli_error($conexion);
    }

    // Cerrar la conexión a la base de datos
    mysqli_close($conexion);
} else {
    // Si se accede directamente a este archivo sin enviar el formulario, redirigir a la página de selección de pacientes
    header("Location: actualizar_paciente.php");
}
?>

Este archivo PHP primero verifica si el formulario se ha enviado correctamente utilizando $_SERVER["REQUEST_METHOD"]. Luego, recupera los datos enviados por el formulario (POST) y realiza la actualización en la base de datos utilizando una consulta UPDATE.

Si la actualización es exitosa, se mostrará un mensaje de éxito. Si ocurre un error, se mostrará un mensaje de error junto con detalles del error.

Además, si alguien intenta acceder a este archivo directamente sin enviar el formulario, será redirigido a la página de selección de pacientes para garantizar que el proceso de actualización se realice de manera adecuada.

Puedes agregar las reglas CSS class='success-message' y class='error-message' de la siguiente manera en tu archivo CSS (estilos.css`):

.success-message {
    background-color: #4CAF50; /* Color de fondo verde para mensajes de éxito */
    color: #ffffff; /* Texto blanco */
    padding: 10px; /* Relleno interno */
    text-align: center; /* Texto centrado */
    font-weight: bold; /* Texto en negrita */
}

.error-message {
    background-color: #FF5733; /* Color de fondo rojo para mensajes de error */
    color: #ffffff; /* Texto blanco */
    padding: 10px; /* Relleno interno */
    text-align: center; /* Texto centrado */
    font-weight: bold; /* Texto en negrita */
}

Para crear el formulario borrar_paciente.php, que permita borrar un paciente ya sea proporcionando un ID o seleccionándolo desde una lista desplegable, puedes seguir una estructura similar a la que utilizaste en el formulario actualizar_paciente.php. Aquí tienes el código para borrar_paciente.php:

<!DOCTYPE html>
<html lang="es">
<head>
    <link rel="stylesheet" type="text/css" href="estilos.css">
    <meta charset="UTF-8">
    <title>Borrar Paciente</title>
</head>
<body>
    <h1>Borrar Paciente</h1>
    <?php
    // Conectar a la base de datos
    $conexion = mysqli_connect("localhost", "arci", "123", "citas_medicas");

    // Consultar la lista de IDs de pacientes
    $consulta_ids = "SELECT id FROM pacientes";
    $result_ids = mysqli_query($conexion, $consulta_ids);

    // Verificar si se proporciona un ID en la URL o se ha seleccionado uno desde la lista desplegable
    if (isset($_GET['id']) || isset($_POST['id'])) {
        // Verificar si se ha enviado el formulario para borrar al paciente
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $id = isset($_POST['id']) ? $_POST['id'] : $_GET['id'];

            // Realizar la eliminación del paciente
            $sql = "DELETE FROM pacientes WHERE id = $id";

            if (mysqli_query($conexion, $sql)) {
                echo "<div class='success-message'>El paciente ha sido eliminado correctamente.</div>";
            } else {
                echo "<div class='error-message'>Error al eliminar al paciente: " . mysqli_error($conexion) . "</div>";
            }
        } else {
            $id = isset($_POST['id']) ? $_POST['id'] : $_GET['id'];

            // Consultar la información del paciente con el ID proporcionado
            $consulta = "SELECT nombre, apellido FROM pacientes WHERE id = $id";
            $result = mysqli_query($conexion, $consulta);

            if ($row = mysqli_fetch_assoc($result)) {
                // Mostrar el formulario de confirmación
                echo "<p style='text-align: center;'>¿Seguro que desea borrar a {$row['nombre']} {$row['apellido']}?</p>";
                echo "<form action='borrar_paciente.php' method='post'>";
                echo "<input type='hidden' name='id' value='$id'>";
                echo "<div style='text-align: center;'><input type='submit' value='Confirmar Borrar'></div>";
                echo "</form>";
            } else {
                echo "Paciente no encontrado.";
            }
        }
    } else {
        // Mostrar la lista desplegable para seleccionar al paciente a borrar
        echo "<form action='borrar_paciente.php' method='get'>";
        echo "<label for='id'>Seleccione el ID del paciente a borrar:</label>";
        echo "<select id='id' name='id'>";
        while ($row = mysqli_fetch_assoc($result_ids)) {
            // Consultar el nombre y apellido del paciente
            $id_paciente = $row['id'];
            $consulta_nombre_apellido = "SELECT nombre, apellido FROM pacientes WHERE id = $id_paciente";
            $result_nombre_apellido = mysqli_query($conexion, $consulta_nombre_apellido);
            $nombre_apellido = mysqli_fetch_assoc($result_nombre_apellido);
            echo "<option value='$id_paciente'>" . $id_paciente . ' - ' . $nombre_apellido['nombre'] . ' ' . $nombre_apellido['apellido'] . "</option>";
        }
        echo "</select>";
        echo "<input type='submit' value='Seleccionar'>";
        echo "</form>";
    }

    // Cerrar la conexión a la base de datos
    mysqli_close($conexion);
    ?>
</body>
</html>

Hasta este punto se ha terminado la programación del Menú de gestión para «Pacientes»


Opcional

Para que el menú de navegación este siempre visible, vamos a agregar el menú, en una versión más pequeña arriba de la mayoría de los PHP:

Vamos a agregar el siguiente código (regularmente en la línea 9, después de donde inicia el body:

<div class="menu-container">
        <div class="menu-category">
            <h2>Menú para Pacientes</h2>
            <a href="registrar-paciente.html">
                <img src="imagen_registrar.png" alt="Registrar Paciente" width="40">
                </br><span>Registrar</span>
            </a>
            <a href="consultar_paciente.php">
                <img src="imagen_consultar.png" alt="Consultar Paciente" width="40">
                </br><span>Consultar</span>
            </a>
            <a href="actualizar_paciente.php">
                <img src="imagen_actualizar.png" alt="Actualizar Paciente" width="40">
                </br><span>Actualizar</span>
            </a>
            <a href="borrar_paciente.php">
                <img src="imagen_borrar.png" alt="Borrar Paciente" width="40">
                </br><span>Borrar</span>
            </a>
        </div>
</div>

En los archivos:

  • registrar-paciente.html (Quita el h1 de Bienvenida también)
  • confirmacion.php
  • consultar_paciente.php
  • actualizar_paciente.php
  • procesar_actualizar_paciente.php
  • borrar_paciente.php

Con esto todas las secciones tendrán el menú visible:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.