En el post de hoy veremos cómo podemos hacer un sistema en PHP para hacer que los usuarios entren solo en determinada hora específica, por ejemplo, desde las 10 de la mañana hasta las 2 de la tarde.
Básicamente vamos a ver cómo guardar la hora de entrada y salida, y dejar que el usuario ingrese solo si está en ese rango.
Te voy a mostrar un ejemplo de cómo guardar los datos en la base de datos y cómo comparar al momento de iniciar sesión. Te aviso desde ahora que el código será como un ejemplo para que tú puedas tomarlo y adaptarlo al tuyo.
Como vamos a comparar únicamente la hora necesitamos guardar a la misma con los dos puntos que separan la hora y los minutos.
Para ello necesitamos un campo de texto que soporte al menos 5 caracteres. En mi caso usaré varchar
de 5.
Por cierto, en la tabla de los horarios también necesitamos tener el id del usuario para el cual estamos definiendo el horario y agregar las relaciones necesarias:
CREATE TABLE horarios(
id_usuario int,
entrada varchar(5),
salida varchar(5)
);
Ahora veamos cómo vamos a guardar los horarios de entrada y salida para nuestro sistema. Aquí vamos a necesitar el id del usuario (que debe venir de la base de datos) y la hora de entrada y salida.
Yo he creado un arreglo con usuarios ficticios para el ejemplo. Las cosas que hay que resaltar son los input
, que son de tipo time
y que funcionan en Chrome y Firefox.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<?php
// Estos usuarios deberían venir de su base de datos. Aquí solo los pongo como ejemplo
$usuarios = [
[
"id" => 1,
"nombre" => "Luis"
],
[
"id" => 2,
"nombre" => "Juan"
]
];
?>
<body>
<form action="guardar_turno.php" method="post">
<select name="id_usuario">
<?php foreach ($usuarios as $usuario) { ?>
<option value="<?php echo $usuario["id"] ?>"><?php echo $usuario["nombre"] ?></option>
<?php } ?>
</select>
<p>Hora de entrada:</p>
<input type="time" name="entrada" required>
<p>Hora de salida:</p>
<input type="time" name="salida" required>
<button type="submit">Ok</button>
</form>
</body>
</html>
Estos input nos darán la hora en formato de 24 horas, por ejemplo, 23:44
. Y así como estén, los vamos a guardar en nuestra base de datos para consultarlos más adelante.
De nuevo te muestro un ejemplo de cómo se van a guardar los datos después de recibirlos del formulario:
<?php
$entrada = $_POST["entrada"];
$salida = $_POST["salida"];
$idUsuario = $_POST["id_usuario"];
/*Aquí guardamos la entrada y salida en la base de datos como varchar de longitud 5
*/$bd = include_once "bd.php";
$sentencia = $bd->prepare("INSERT INTO horarios(id_usuario, entrada, salida) VALUES(?, ?, ?)");
$sentencia->execute([$idUsuario, $entrada, $salida]);
echo "Registrado correctamente";
Simplemente guardamos el id del usuario, la entrada y la salida. Por cierto, recuerda que solo debería existir un horario por cada usuario, así que antes de guardar deberías ver si no existe otro horario, o deberías eliminar antes de guardar.
Cuando el usuario inicie sesión en nuestro sistema vamos a obtener su ID, y esto ya depende de ti. Por ejemplo, puede que obtengas el id a través de su correo o de los datos que ingrese para hacer login.
Una vez que tengas el id vas a consultar su horario de entrada y salida, y luego calcular la hora actual. En PHP podemos obtener la hora en formato de 24 horas con date("H:i")
:
<?php
// Invocado en el login
// Hasta aquí suponemos que ya tenemos el usuario y contraseña o los datos de login, así como el id del usuario
$bd = include_once "bd.php";
$idUsuario = 1; // Debe venir de la base de datos
$consulta = "SELECT entrada, salida FROM horarios WHERE id_usuario = ?";
$sentencia = $bd->prepare($consulta);
$sentencia->execute([$idUsuario]);
$horario = $sentencia->fetch();
if (!$horario) {
echo "No existen registros de horario con ese id";
exit;
}
// Hasta aquí podemos estar seguros de que existe un horario para ese usuario
date_default_timezone_set("America/Mexico_City");
$horaActual = date("H:i");
$entrada = $horario["entrada"];
$salida = $horario["salida"];
if ($horaActual > $entrada && $horaActual < $salida) {
echo "Bienvenido";
} else {
echo "No puedes entrar a esta hora";
}
La magia sucede en la línea 19.
Cuando ya tenemos la hora actual y la entrada y salida del empleado (o los detalles de su turno) simplemente comparamos las cadenas de manera lexicográfica, es decir, las comparamos como si fueran números, pero ordenadas alfabéticamente.
Ya lo único que faltaría es poner una expiración a la sesión para expulsar al usuario a esa hora, pero eso queda en ti.
Por cierto, yo utilicé MySQL y PDO para los ejemplos pero esto puede adaptarse para cualquier otro motor, pues solo utilizo datos de tipo texto.
Te dejo más tutoriales de PHP por aquí.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
y como tendria que ir el codigo si el personal llega con tardaza?
Hola. Muchas gracias por sus comentarios. Si necesita ayuda estoy a su disposición en https://parzibyte.me/#contacto
Hola soy estudiante de informática y me gustaría me ayudaran con mi proyecto , es un control de entrad y salida del personal obrero y administrativo de una escuela
Hola. Gracias por sus comentarios. Si tiene alguna consulta, solicitud de creación de un programa o solicitud de cambio de software estoy para servirle en https://parzibyte.me/#contacto
Saludos!