Formulario de Login con PHP y MySql

Stay hungry, stay foolish

Steve Jobs

En este tutorial crearemos un formulario login utilizando php y mysql. Comenzemos!!!

En un post anterior había explicado algo del manejo de sesiones con PHP, y había prometido una clase que nos facilitara trabajar con sesiones, para este tutorial utilizaremos dicha clase.

Tabla: Usuario

La información del usuario y contraseña la obtendremos de la tabla usuarios.

CREATE TABLE `usuario` (  
`idusuario` INTEGER(11) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,  
`Nombre` VARCHAR(20) NOT NULL DEFAULT '',  
`nick` VARCHAR(20) NOT NULL DEFAULT '',  
`contrasenia` VARCHAR(20) NOT NULL DEFAULT '',  
PRIMARY KEY (`idusuario`),  UNIQUE KEY `idusuario` (`idusuario`)
) ENGINE=InnoDB CHARACTER SET 'latin1';

Archivo: sesion.class.php

<?php
  class sesion {
     function __construct() {
     session_start ();
  }
  public function set($nombre, $valor) {
     $_SESSION [$nombre] = $valor;
  }
  public function get($nombre) {
     if (isset ( $_SESSION [$nombre] )) {
        return $_SESSION [$nombre];
     } else {
         return false;
     }
  }
  public function elimina_variable($nombre) {
      unset ( $_SESSION [$nombre] );
  }
  public function termina_sesion() {
      $_SESSION = array();
      session_destroy ();
  }
}
?>

En todos los archivos que integren nuestra aplicación tenemos que iniciar la sesión y lo haremos con el siguiente código:

   require_once("sesion.class.php");

   $sesion = new sesion();

   if( $usuario == false ) {
      // si no se ha iniciado sesión redirecciona a la pagina login.php
      header("Location: login.php");
   } else {
      // Aquí va el contenido de la pagina qu se mostrara en caso de que se haya iniciado sesion
   }

Archivo: login.php

En el archivo login.php vamos a encontrar el formulario de logeo, en dicho formulario el usuario introducirá su nick y contraseña.

<form name="frmLogin" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <div>
      <label>Usuario: </label> <input name = "usuario"/>
      <label>Contraseña: </label> <input name = "contrasenia" />
      <input name ="btnIniciar" value="Iniciar Sesion"/>
   </div>
</form>

Una vez que el usuario haya introducido sus datos el script se procesara asi mismo. Mediante el siguiente código:

if( isset($_POST["iniciar"]) )	{
   $usuario = $_POST["usuario"];
   $password = $_POST["contrasenia"];
   if(validarUsuario($usuario,$password) == true){
      $sesion->set("usuario",$usuario);
      header("location: principal.php");
   } else {
     echo "Verifica tu nombre de usuario y contraseña";
   }
}

function validarUsuario($usuario, $password)	{
   $conexion = new mysqli("localhost","usuario","password","base");
   $consulta = "select contrasenia from usuario where nick = '$usuario';";
   $result = $conexion->query($consulta);
   if($result->num_rows > 0)	{
      $fila = $result->fetch_assoc();
      if( strcmp($password,$fila["contrasenia"]) == 0 )
         return true;
      else
         return false;
   }  else
       return false;
}

Se recogen los valores del formulario y se envían a la función validar usuario, dicha función hace la consulta a la base de datos y devuelve verdadero cuando el usuario y la contraseña sean correctos, en caso contrario devuelve falso.
Si la función devolvió verdadero se crea la variable de sesión usuario y se redirecciona hacia la página principal.php en caso contrario muestra un mensaje para que verifique la información de usuario y contraseña.

Archivo: principal.php

A esta página solo tendrán acceso los usuarios que se hayan logeado correctamente de lo contrario la pagina los enviara a login.php

<?php
   require_once("sesion.class.php");
   $sesion = new sesion();
   $usuario = $sesion->get("usuario");
   if( $usuario == false )	{
      header("Location: login.php");
   }  else  {
?>
<HTML>
   <head>
      <title></title>
   </head>
   <body>
      <h1>Hola:  <?php echo $sesion->get("usuario"); ?> </h1>
      <a href="cerrarsesion.php"> Cerrar Sesion </a>
      <p> Aqui va el contenido de la pagina </p>
   </body>
</HTML>
<?php
   }
?>

Archivo: cerrarsesion.php

El archivo sesión.php se encarga de finalizar la sesión del usuario.


<?php
   require_once("sesion.class.php");
   $sesion = new sesion();
   $usuario = $sesion->get("usuario");
   if( $usuario == false )	{
      header("Location: login.php");
   }  else  {
      $usuario = $sesion->get("usuario");
      $sesion->termina_sesion();
      header("location: login.php");
   }
?>

Aca les dejo el link de descarga