Inicio > php > Hacer login de usuarios con PHP y MySQL

Hacer login de usuarios con PHP y MySQL

Miércoles, 23 de Enero de 2008 webmaster Dejar un comentario Ir a comentarios

Un sistema de registro y reconocimiento de usuarios es utilizado para garantizar el acceso a ciertas áreas de nuestro sitio Web.

Debemos de crear una tabla que vamos a utilizar en la base de datos MySQL.

 

MySQL:
  1. CREATE TABLE `usuarios` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `usuario` VARCHAR(20) NOT NULL,
  4.   `password` VARCHAR(10) NOT NULL,
  5.   `descripcion` TEXT character SET utf8 collate utf8_spanish_ci,
  6.   `email` VARCHAR(45) character SET utf8 collate utf8_spanish_ci DEFAULT NULL,
  7.   `fecha` DATE NOT NULL,
  8.   PRIMARY KEY  (`id`)
  9. )

 

 

Ya tenemos la estructura de nuestra tabla de usuarios.

Ahora una pagina index.php donde colocaremos el siguiente código:

 

 

PHP:
  1. <?php
  2.  
  3. echo 'Bienvenido, ';
  4.  
  5. if (isset($_SESSION['k_username'])) {
  6.     echo '<b>'.$_SESSION['k_username'].'</b>.';
  7.     echo '<p><a href="logout.php">Logout</a></p>';
  8. }else{
  9.     echo '<p><a href="login.php">Login</a></p>
  10.      <p><a href="registrar.php">Registrar</a></p>';
  11. }
  12. ?>

 

 

Ahora el formulario para hacer login.php

 

 

HTML:
  1. <form action="validar_usuario.php" method="post">
  2. Usuario:<input type="text" name="usuario" size="20" maxlength="20" />
  3. <br />
  4. Password:<input type="password" name="password" size="10" maxlength="10" />
  5. <br />
  6. <input type="submit" value="Ingresar" />
  7. </form>

 

 

Seguimos con el archivo validar_usuario.php el cual verificará los datos del archivo login.php

 

 

PHP:
  1. <?php
  2.  
  3. //datos para establecer la conexion con la base de mysql.
  4. mysql_connect('localhost','usuario','password')or die ('Ha fallado la conexi&oacute;n: '.mysql_error());
  5. mysql_select_db('mi_base')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
  6.  
  7. function quitar($mensaje)
  8. {
  9.     $nopermitidos = array("'",'\\','<','>',"\"");
  10.     $mensaje = str_replace($nopermitidos, "", $mensaje);
  11.     return $mensaje;
  12. }     
  13.  
  14. if(trim($HTTP_POST_VARS["usuario"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
  15. {
  16.     // Puedes utilizar la funcion para eliminar algun caracter en especifico
  17.     //$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
  18.     //$password = $HTTP_POST_VARS["password"];
  19.    
  20.     // o puedes convertir los a su entidad HTML aplicable con htmlentities
  21.     $usuario = strtolower(htmlentities($HTTP_POST_VARS["usuario"], ENT_QUOTES));   
  22.     $password = $HTTP_POST_VARS["password"];
  23.      
  24.  
  25.     $result = mysql_query('SELECT password, usuario FROM usuarios WHERE usuario=\''.$usuario.'\'');
  26.     if($row = mysql_fetch_array($result)){
  27.         if($row["password"] == $password){
  28.  
  29.             $_SESSION["k_username"] = $row['usuario'];
  30.            
  31.             echo 'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
  32.             echo '<a href="index.php">Index</a></p>';
  33.            
  34.             //Elimina el siguiente comentario si quieres que re-dirigir autom&aacute;ticamente a index.php
  35.            
  36.             /*Ingreso exitoso, ahora sera dirigido a la pagina principal.
  37.             <SCRIPT LANGUAGE="javascript">
  38.             location.href = "index.php";
  39.             </SCRIPT>*/
  40.  
  41.         }else{
  42.             echo 'Password incorrecto';
  43.         }
  44.     }else{
  45.         echo 'Usuario no existente en la base de datos';
  46.     }
  47.     mysql_free_result($result);
  48. }else{
  49.     echo 'Debe especificar un usuario y password';
  50. }
  51. ?>

 

 

El archivo registrar.php, ahí crearemos un usuario nuevo.

 

 

PHP:
  1. <?php
  2.  
  3. //datos para establecer la conexion con la base de mysql.
  4. mysql_connect('localhost','usuario','password')or die ('Ha fallado la conexi&oacute;n: '.mysql_error());
  5. mysql_select_db('mi_base')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
  6.  
  7. function formRegistro(){
  8. ?>
  9. <form action="registrar.php" method="post">
  10. Usuario (max 20):
  11.   <input type="text" name="username" size="20" maxlength="20" /><br />
  12. Password (max 10):
  13. <input type="password" name="password" size="10" maxlength="10" />
  14. Confirma: <input type="password" name="password2" size="10" maxlength="10" /><br />
  15. Email (max 40):
  16. <input type="text" name="email" size="20" maxlength="40" /><br />
  17. <input type="submit" value="Registrar" />
  18. </form>
  19. <?php
  20. }
  21.  
  22. // verificamos si se han enviado ya las variables necesarias.
  23. if (isset($_POST["username"])) {
  24.     $username = $_POST["username"];
  25.     $password = $_POST["password"];
  26.     $password2 = $_POST["password2"];
  27.     $email = $_POST["email"];
  28.     // Hay campos en blanco
  29.     if($username==NULL|$password==NULL|$password2==NULL|$email==NULL) {
  30.         echo "un campo est&aacute; vacio.";
  31.         formRegistro();
  32.     }else{
  33.         // ¿Coinciden las contrase&ntilde;as?
  34.         if($password!=$password2) {
  35.             echo "Las contrase&ntilde;as no coinciden";
  36.             formRegistro();
  37.         }else{
  38.             // Comprobamos si el nombre de usuario o la cuenta de correo ya exist&iacute;an
  39.             $checkuser = mysql_query("SELECT usuario FROM usuarios WHERE usuario='$username'");
  40.             $username_exist = mysql_num_rows($checkuser);
  41.            
  42.             $checkemail = mysql_query("SELECT email FROM usuarios WHERE email='$email'");
  43.             $email_exist = mysql_num_rows($checkemail);
  44.    
  45.             if ($email_exist>0|$username_exist>0) {
  46.                 echo "El nombre de usuario o la cuenta de correo estan ya en uso";
  47.                 formRegistro();
  48.             }else{
  49.                 $query = 'INSERT INTO usuarios (usuario, password, email, fecha)
  50.                 VALUES (\''.$username.'\',\''.$password.'\',\''.$email.'\',\''.date("Y-m-d").'\')';
  51.                
  52.                 mysql_query($query) or die(mysql_error());
  53.                 echo 'El usuario '.$username.' ha sido registrado de manera satisfactoria.<br />';
  54.                 echo 'Ahora puede entrar ingresando su usuario y su password <br />';
  55.                 ?>
  56.                 <FORM ACTION="validar_usuario.php" METHOD="post">
  57.                   Usuario : <INPUT TYPE="text" NAME="usuario" SIZE=20 MAXLENGTH=20><br />
  58.                   Password: <INPUT TYPE="password" NAME="password" SIZE=10 MAXLENGTH=20><br />
  59.                   <INPUT TYPE="submit" VALUE="Ingresar">
  60.                 </FORM>
  61.                 <?php
  62.                
  63.             }
  64.         }
  65.     }
  66. }else{
  67.     formRegistro();
  68. }
  69. ?>

 

Finalmente el archivo logout.php, ahí cerraremos la sesión.

 

PHP:
  1. <?php
  2. // Borramos toda la sesion
  3. echo 'Ha terminado la session <p><a href="index.php">index</a></p>';
  4. ?>
  5. <SCRIPT LANGUAGE="javascript">
  6. location.href = "index.php";
  7. </SCRIPT>

 

El sistema creado es sencillo para que sea fácil de entender, Y no olvides dejar tus comentarios.

floppy.jpg
Clic para descargar el archivo

Actualización: debido a los problemas que hay al momento de hacer copy/paste se anexan los archivos del ejemplo. Recuerda que es solo el principio, falta:

Encriptar las claves antes de enviarlas, hacer la conexión como función y todo lo que se te ocurra o puedas aportar.

 

Categories: php Tags:
  1. jesus
    Jueves, 9 de Abril de 2009 a las 22:39 | #1

    ola esta padre esto pero tengo un problema en validar usuario ya registra y todo pero cuando
    inicio sesion me dice debe especificar usuario y contraseña
    y no se que pueda ser si me pueden ayudar este es mi email manueldejesus_663@hotmail.com
    lo agradeceria va

  2. Martes, 14 de Abril de 2009 a las 07:34 | #2

    Hola Jesus, puedes bajarte el ejemplo en formato ZIP y compararlo con tu código para detectar donde esta el error.

    Un saludo

  3. Dario
    Jueves, 23 de Abril de 2009 a las 15:47 | #3

    Saludos amigos, por favor si pueden decir especificamente que tengo que hacer para corregir el error que me presenta al intentar loguiarme, ya que me dice que: Debe especificar un usuario y password.

    Yo puedo registrarme y ya observe la base de datos y todo esta correcto,
    Muchas gracias de antemano.

  4. Sábado, 25 de Abril de 2009 a las 07:10 | #4

    Hola Dario, puedes bajarte el ejemplo en formato ZIP y compararlo con tu código para detectar donde esta el error.

  5. Sábado, 16 de Mayo de 2009 a las 13:00 | #5

    Compañeros para que funcione el ejemplo aportado deben cambiar $HTTP_POST_VARS por solo $_POST

    Un cordial saludo

  6. Jorge
    Jueves, 21 de Mayo de 2009 a las 16:31 | #6

    Hola, me parece muy bueno el tutorial, y muy facil de seguir..
    tengo una consulta…
    me gustaria que cuando los usuarios se registren se envie un email con un link de activacion de cuenta. es eso posible?
    como seria?

    si no se puede, saben de algun tutorial o algun otro login que sea de esa manera??
    muchas gracias a todos!!! espero que vean este mensaje!
    saludos!
    Jorge

  7. Jorge
    Viernes, 22 de Mayo de 2009 a las 07:24 | #7

    hola, buenisimo el aporte.
    pregunta, para que cuando el usuario se registre se le mande un email con un link de activacion.
    que tengo que hacer?
    de que tengo que agregar un valor en la bd en 0 etc, hasta ahi bien… lo que no se es como modifico el php que ya tenemos para que mande el link.
    alguna idea?? realmente busque mucho sobre esto y no encuentro nada ni a nadie… si me pueden dar una mano seria genial. recien comienzo como programador por lo cual me cuestan mucho estas cosas. Saludos!!!!
    y gracias nuevamente!

  8. Viernes, 22 de Mayo de 2009 a las 12:55 | #8

    Hola Jorge, que bueno que te sirvió la entrada.

    Lo que pides es sencillo:

    Puedes utilizar un campo de estatus y otro de activación en tu tabla, envías el email con el código de activación a la cuenta de email del registrado y cuando el de clic lo referencias a una pagina que leerá ese código y cambiará el estatus.

    Para hacerlo puedes apoyarte en estas entradas.

    http://ayuda.fotopex.com/programacion/php/%C2%BFcomo-enviar-un-e-mail-con-formulario-en-php/

    y

    y http://ayuda.fotopex.com/programacion/php/%C2%BFcomo-enviar-un-e-mail-con-php/

    estos procesos los tienes que hacer cuando registras al visitante y le dejas un estatus de inactivo puedes apoyarte en lo básico.
    0= inactivo
    1=activo

    y el campo para el código de validación puedes enviarlo en md5 de esa forma puedes verificar si es correcto cuando lo leas en tu sitio.

    Espero que te ayude mi sugerencia y si deseas aportar tu trabajo será bien recibido y podrás ayudar a otras personas como tu.

  9. elita
    Lunes, 25 de Mayo de 2009 a las 11:36 | #9

    Hola a todos, el error que dice Dario quiero creer que se refiere a la base de datos, ya que a mi tambien me aparecia y lo corregi cambiando en la linea 5 en los archivos validar_usuario y registrar lo siguiente:

    mysql_connect(’localhost’,'root’,”)or die (’Ha fallado la conexión: ‘.mysql_error());

    y ya te queda, espero.

    Bye

  10. format
    Martes, 9 de Junio de 2009 a las 01:46 | #10

    QUE ONDA SALUDOS MUCHAS GRACIAS POR TU CODIGO ERES UN MASTER EN ESTO FUE DE MUCHA AYUDA GRACIAS

  11. Miércoles, 17 de Junio de 2009 a las 13:47 | #11

    Muchisimas gracias, me sirvio de mucho, seria mejor que les saquen los numeros de lineas de los costados, porque hay que sacarselos manualmente y es una perdida de tiempo para el proximo que encuentre el sistema. Muchas gracias nuevamente.. Saludos!

  12. Jueves, 18 de Junio de 2009 a las 15:06 | #12

    Hola Ratita, que bueno que te ayudo. Respecto a los numero de linea:
    Puedes dar clic donde dice PLAIN TEXT y te dejará el código en limpio.

    Un saludo y gracias por tu comentario.

  13. Miércoles, 24 de Junio de 2009 a las 19:34 | #13

    Gracias funciono perfecto

Comment pages
1 2 71
  1. Sin trackbacks aún.