Login con Sesiones en PHP

¿Cómo programar un login con PHP y MYSQL para el Lector QR?

Video: Login con Sesiones en PHP

Diseño de un Login para la autenticación del usuario administrador usando sesiones en PHP, crearemos un formulario y lo lógica del Login para acceder

LLegamos al punto en el cual nuestro sistema debe tener seguridad, por alguna manera de decirlo, la forma de implementarlo es con un sistema de autenticación para gestionar el CRUD de los datos en las tablas productos y promociones.

Clase PHP para conectarnos a la base de datos MYSQL

Para ello anteriormente hemos creado una tabla login la cual contiene  4 campos: el id, nombre, email y password.

Entonces necesitamos una conexión a nuestra base de datos llamada qr, para ello nos valemos de una clase que gestiona la conexión y las consultas a la base de datos:

El archivo conexion.php es una clase que conecta y gestiona las consultas

Debe estar ubicado dentro de una carpeta llamada class, la cual contendrá todas las clases a usarse en nuestro proyecto.

<?php 
class ApptivaDB{    
    private $host   ="localhost";
    private $usuario="root";
    private $clave  ="";
    private $db     ="qr";
    public $conexion;
    public function __construct(){
        $this->conexion = new mysqli($this->host, $this->usuario, $this->clave,$this->db)
        or die(mysql_error());
        $this->conexion->set_charset("utf8");
    }
    //INSERTAR
    public function insertar($tabla, $datos){
        $resultado =    $this->conexion->query("INSERT INTO $tabla VALUES (null,$datos)") or die($this->conexion->error);
        if($resultado)
            return true;
        return false;
    } 
    //BORRAR
    public function borrar($tabla, $condicion){    
        $resultado  =   $this->conexion->query("DELETE FROM $tabla WHERE $condicion") or die($this->conexion->error);
        if($resultado)
            return true;
        return false;
    }
    //ACTUALIZAR
    public function actualizar($tabla, $campos, $condicion){    
        $resultado  =   $this->conexion->query("UPDATE $tabla SET $campos WHERE $condicion") or die($this->conexion->error);
        if($resultado)
            return true;
        return false;        
    } 
    //BUSCAR
    public function buscar($tabla, $condicion){
        $resultado = $this->conexion->query("SELECT * FROM $tabla WHERE $condicion") or die($this->conexion->error);
        if($resultado)
            return $resultado->fetch_all(MYSQLI_ASSOC);
        return false;
    } 
}
?>

 

Ahora creamos el formulario login

Lo ubicamos dentro de la carpeta paginas/login.php, el cual tiene el siguiente código:

<form action="procesos/login.php" method="post">
<input type="email" name="txtemail" required placeholder="Correo" >
<input type="password" name="txtpassword" required placeholder="Password" >
<input type="submit" name="btnlogin" value="ACCEDER">
</form>

Como vemos :

  • Llama en action a otro archivo llamado login.php ubicado en una carpeta llaamda procesos, el cual contenerá lo lógica de la autenticación.
  • Formulario definido con el método post
  • Input email y password son obligatorio y deben ser validos
  • El botón submit al ser presionado ejecuta el envio de  los valores al action.

Ahora creamos la lógica del login 

El el directorio procesos agregamos el archivo login.php, es otro por si acaso, este autenticará al usuario administrador, el código es el siguiente:

<?php
session_start();
require "../config.php";
$msg="No se pudo acceder";
if(isset($_POST['btnlogin'])):
    require "../class/conexion.php";
    $user= new ApptivaDB();

    $email      =   $_POST['txtemail'];
    $password   =   md5($_POST['txtpassword']);

    $data       =   "email='".$email."' AND password='".$password."'";
    $u=$user->buscar("login",$data);
    if($u):
        foreach($u as $data):
            $_SESSION['administrador'] = $data['id'];
            $msg=$data['nombre'];                        
        endforeach;
    endif;
endif;
header("location:".urlsite."?mensaje=".$msg);

Bien...

Cómo es el logout para cerrar sesión en PHP.

Veamos, el código destruye sesiones existentes y retorna o mejor dicho redirige a la url base o principal del usuario, al igual que login.php este archivo logout.php debe estar ubicado en la carpeta procesos; y el código es:

<?php
require "../config.php";
session_start();
session_destroy();
header("location:".urlsite);

 

Y por efecto de uso debemos realizar algunos cambios en el index para establecer la validación del usuario autenticado

Modificando el index principal

<?php
session_start();
include "config.php";
require "class/conexion.php";
$user= new ApptivaDB();
include "inc/header.php";
if(isset($_SESSION['administrador']))
    $pagina=(isset($_GET['pagina'])) ? $_GET['pagina'] : "index";
else
    $pagina="login";    
include "paginas/".$pagina.".php";
$user=null;
include "inc/footer.php";

 

Modificando  el menu  de navegación 

Y por último debemos también modificar el menu de navegación con lo que corresponde a mostrar datos del usuario logueado o no. 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>CODEA.APP QR | ADMINISTRACIÓN</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
</head>
<body>
<?php if(isset($_SESSION['administrador'])): ?>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
  <a class="navbar-brand" href="<?php echo urlsite ?>">CODEA QR </a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarNav">  	
	    <ul class="navbar-nav">
	      <li class="nav-item active">
	        <a class="nav-link" href="?pagina=index">HOME <span class="sr-only">(current)</span></a>
	      </li>
	      <li class="nav-item">
	        <a class="nav-link" href="?pagina=productos">PRODUCTOS</a>
	      </li>
	      <li class="nav-item">
	        <a class="nav-link" href="?pagina=promociones">PROMOCIONES</a>
	      </li>	      
	    </ul>
		<ul class="navbar-nav ml-auto">	      
	      <li class="nav-item">
	        <a class="nav-link" href="<?php echo urlsite ?>procesos/logout.php">CERRAR SESIÓN</a>
	      </li>
	    </ul>
	</div>
</div>
</nav>
<?php endif;?>

 


Login con Sesiones en PHP

¿Quieres tener acceso al código fuente completo del proyecto final?

Contenido premium

COMPRAR AHORA

© Todos los derechos reservados | codea.app | Comunidad de programación web y desarrollo de aplicaciones móviles | Perú 2019