
La primera página que vas a programar es la de autentificación del usuario (login.php
). Para variar, utilizarás las capacidades de manejo de sesiones de PHP para almacenar la identificación de los usuarios. Además, utilizaremos la información de la tabla "usuarios" en la base de datos "proyecto", accediendo mediante PDO en lugar de MySQLi. Para la conexión nos crearemos el archivo "conexión.php"
al que llamaremos con require_once
en las páginas que necesitemos. Si has copiado el código para añadir la tabla usuarios, habrá en la misma dos usuario que podamos usar, admin con contraseña secreto y gestor con contraseña pass.
Vas a crear en la página un formulario con dos campos, uno de tipo text
para el usuario, y otro de tipo password
para la contraseña. Al pulsar el botón Enviar, el formulario se enviará a esta misma página, donde se compararán las credenciales proporcionadas por el usuario con las almacenadas en la base de datos. Si los datos son correctos, se iniciará una nueva variable de sesión y se almacenará en ella el nombre del usuario que se acaba de conectar.
Empecemos viendo detenidamente cada una de las páginas: :
conexión.php
: Contendrá el código para hacer la conexión a la base de datos "proyecto". Como estamos en desarrollo ponemos los errores en Exception
y los visualizamos. También las funciones cerrar()
y cerrarTodo()
para cerrar las conexiones. Fíjate que pasamos las variables por referencia.
login.php
: Aunque ahora, los estilos no son demasiados importantes y, nos centraremos más en el código PHP, usando Bootstrap
y los iconos de fontawasome
será muy sencillo hacer un formulario profesional. Hay muchos ejemplos en la web, que se pueden usar, de formularios de login
con Bootstrap
. En el apartado anterior se explica como poder usar estos recursos.
Veamos este archivo detenidamente:
-
Incluimos el fichero
"conexion.php"
, después se crea una función de error a la que pasaremos un mensaje de error, inicializamos la variable$_SESSION['error']
con dicho mensaje y volvemos a cargar la página.<?php session_start(); require_once 'conexion.php'; function error($mensaje) { $_SESSION['error'] = $mensaje; header('Location:login.php'); die(); }
-
En el
body,
comprobamos si hemos enviado el formulario, si es así hacemos una breve comprobación de que los campos contienen algún carácter (el atributorequired
del formulario nos permite enviar solo espacios en blanco, lo cual puede ser un problema) que no sea un espacio en blanco, calculamos elhash
(utilizandosha256
que es como almacenamos las contraseñas en la base de datos) a la contraseña y hacemos la consulta como ya sabemos.$nombre = trim($_POST['usuario']); $pass = trim($_POST['pass']); if (strlen($nombre) == 0 || strlen($pass) == 0) { error("Error, El nombre o la contraseña no pueden contener solo espacios en blancos."); } //creamos el sha256 de la contraseña que es como se almacena en mysql $pass1 = hash('sha256', $pass); $consulta = "select * from usuarios where usuario=:u AND pass=:p"; $stmt = $conProyecto->prepare($consulta); try { $stmt->execute([ ':u' => $nombre, ':p' => $pass1 ]); } catch (PDOException $ex) { cerrarTodo($conProyecto, $stmt); error("Error en la consulta a la base de datos."); }
-
Comprobamos el resultado de la consulta.
Si la misma devuelve 0 filas es que las credenciales son invalidas, mostramos un error y volvemos a cargar la página, si no, inicializamos la variable de sesión
$_SESSION['nombre']
con el nombre del usuario y nos vamos a la página 'listado.php
'if ($stmt->rowCount()==0) { cerrarTodo($conProyecto, $stmt); error("Error, Nombre de usuario o password incorrecto"); } cerrarTodo($conProyecto, $stmt); //Nos hemos validado correctamente creamos la sesion de usuario con el nombre de usuario $_SESSION['nombre'] = $nombre; header('Location:listado.php');
Si no hemos enviado el formulario mostramos el mismo y después de él mostramos los errores (si los hay), acuérdate que los estamos guardando en la variable
$_SESSION['error']
. Una vez mostrados si los hay hacemosunset
de dicha variable para no mostrar el error cada vez que carguemos 'login.php
'if (isset($_SESSION['error'])) { echo "<div class='mt-3 text-danger font-weight-bold text-lg'>"; echo $_SESSION['error']; unset($_SESSION['error']); echo "</div>"; }
Debajo tienes el código de ambas páginas