El post que buscas se encuentra eliminado, pero este también te puede interesar

[Tutorial]Crear un sistema de Login con PHP y MySQL

Anuncios

Crear un Sistema de Login de usuarios en PHP con MySQL

[Tutorial]Crear un sistema de Login con PHP y MySQL

diseño

Hola a todas y todos en este tutorial desarrollaremos y explicaremos un sistema de autentificacion de usuarios, este tipo de sistemas se utilizan para limitar el acceso a ciertas paginas de nuestro sitio Web.

web

PHP

1. Preparando una tabla en MySQL

Esto se puede hacer desde la consola de MySQL, creamos una base de datos(si es que no la tenemos) con el comando create database miBaseDeDatos; luego la selecciónamos con use miBaseDeDatos; , una vez dentro de la base de datos proseguimos.Vamos a comenzar preparando una tabla en nuestra base de datos, la cual almacenara la información de los usuarios, para crear la tabla simplemente copia y ejecuta la siguiente consulta SQL:


CREATE TABLE `usuarios` (
  `idusuario` INT(11) NOT NULL AUTO_INCREMENT,
  `usuario` VARCHAR(20) NOT NULL,
  `password` VARCHAR(10) NOT NULL,
  PRIMARY KEY  (`idusuario`)
)

español

2. Conectando a MySQL en PHP

Ya una vez que tengamos la estructura de nuestra tabla, creamos un archivo llamado conexion.php.

<?php
// datos para la coneccion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');

$con mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>

La funcion define como su nombre lo dice, se usa para definir una constante nominada, que nos permite almacenar valores escalares(string, integer, float, boolean y nulos) y su estructura es: define(CONSTANTE,VALOR);

La función de mysql_connect('ServidorMySQL','Usuario','Pass') nos servira para abrir una conexión al servidor de MySQL usando los 3 parámetros que declaramos anteriormente. Luego mysql_select_db selecciona la base de datos usando 2 parámetros, el nombre de la base de datos y la conexión a usar.

sistema

3. logout.php

Creamos un archivo que se llame logout.php para que realice el cierre de sesión

<?php
    session_start
();
    
session_destroy();
 
    
header('location: index.php');
?>


La funcion de session_destroy() destruye toda la información registrada de una variable de sesión, luego el header(‘location: index.php’) redireccionara al usuario al index.php
crear

4. index.php

Ahora pasamos el archivo index.php, el cual contendrá el formulario de login y al mismo tiempo el mensaje de bienvenida o de error.


<?php
session_start
(); //session_start() crea una sesión para ser usada mediante una petición GET o POST, o pasado por una cookie 
include_once "conexion.php"//es la sentencia q usaremos para incluir el archivo de conexión a la base de datos que creamos anteriormente.
/*Función verificar_login() --> Vamos a crear una función llamada verificar_login, esta se encargara de hacer una consulta a la base de datos para saber si el usuario ingresado es correcto o no.*/

function verificar_login($user,$password,&$result)
    {
        
$sql “SELECT FROM usuarios WHERE usuario ‘$user’ and ‘$password’ ‘$password’”;
        
$rec mysql_query($sql);
        
$count 0;
        while(
$row mysql_fetch_object($rec))
        {
            
$count++;
            
$result $row;
        }
        if(
$count == 1)
        {
            return 
1;
        }
        else
        {
            return 
0;
        }
    }

/*Luego haremos una serie de condicionales que identificaran el momento en el boton de login es presionado y cuando este sea presionado llamaremos a la función verificar_login() pasandole los parámetros ingresados:*/

if(!isset($_SESSION['userid'])) //para saber si existe o no ya la variable de sesión que se va a crear cuando el usuario se logee
{
    if(isset(
$_POST['login'])) //Si la primera condición no pasa, haremos otra preguntando si el boton de login fue presionado
    
{
        if(
verificar_login($_POST['user'],$_POST['password'],$result) == 1//Si el boton fue presionado llamamos a la función verificar_login() dentro de otra condición preguntando si resulta verdadero y le pasamos los valores ingresados como parámetros.
        
{
            
/*Si el login fue correcto, registramos la variable de sesión y al mismo tiempo refrescamos la pagina index.php.*/
            
$_SESSION['userid'] = $result->idusuario;
            
header("location:index.php");
        }
        else
        {
            echo 
'<div class="error">Su usuario es incorrecto, intente nuevamente.</div>'//Si la función verificar_login() no pasa, que se muestre un mensaje de error.
        
}
    }
?>
<form action="" method="post" class="login">
    <div><label>Username</label><input name="user" type="text" ></div>
    <div><label>Password</label><input name="password" type="password"></div>
    <div><input name="login" type="submit" value="login"></div>
</form>
<?php
} else {
    
// Si la variable de sesión ‘userid’ ya existe, que muestre el mensaje de saludo.
    
echo 'Su usuario ingreso correctamente.';
    echo 
'<a href="logout.php">Logout</a>';
}
?>

MySQL

Decoración opcional con CSS...

Esta parte es opcional ya que no influye en nada en el funcionamiento del sistema, es unicamente decorativa:

*{
    font-size: 14px;
    font-family: sans-serif;
}
form.login {
    background: none repeat scroll 0 0 #F1F1F1;
    border: 1px solid #DDDDDD;
    margin: 0 auto;
    padding: 20px;
    width: 278px;
}
form.login div {
    margin-bottom: 15px;
    overflow: hidden;
}
form.login div label {
    display: block;
    float: left;
    line-height: 25px;
}
form.login div input[type="text"], form.login div input[type="password"] {
    border: 1px solid #DCDCDC;
    float: right;
    padding: 4px;
}
form.login div input[type="submit"] {
    background: none repeat scroll 0 0 #DEDEDE;
    border: 1px solid #C6C6C6;
    float: right;
    font-weight: bold;
    padding: 4px 20px;
}
.error{
    color: red;
    font-weight: bold;
    margin: 10px;
    text-align: center;
}

taringa.

Así quedaría el archivo index.php

<?php
session_start
();
include_once 
"conexion.php";
 
function 
verificar_login($user,$password,&$result) {
    
$sql "SELECT * FROM usuarios WHERE usuario = '$user' and password = '$password'";
    
$rec mysql_query($sql);
    
$count 0;
 
    while(
$row mysql_fetch_object($rec))
    {
        
$count++;
        
$result $row;
    }
 
    if(
$count == 1)
    {
        return 
1;
    }
 
    else
    {
        return 
0;
    }
}
 
if(!isset(
$_SESSION['userid']))
{
    if(isset(
$_POST['login']))
    {
        if(
verificar_login($_POST['user'],$_POST['password'],$result) == 1)
        {
            
$_SESSION['userid'] = $result->idusuario;
            
header("location:index.php");
        }
        else
        {
            echo 
'<div class="error">Su usuario es incorrecto, intente nuevamente.</div>';
        }
    }
?>
 
<style type="text/css">
*{
    font-size: 14px;
}
body{
background:#aaa;
}
form.login {
    background: none repeat scroll 0 0 #F1F1F1;
    border: 1px solid #DDDDDD;
    font-family: sans-serif;
    margin: 0 auto;
    padding: 20px;
    width: 278px;
    box-shadow:0px 0px 20px black;
    border-radius:10px;
}
form.login div {
    margin-bottom: 15px;
    overflow: hidden;
}
form.login div label {
    display: block;
    float: left;
    line-height: 25px;
}
form.login div input[type="text"], form.login div input[type="password"] {
    border: 1px solid #DCDCDC;
    float: right;
    padding: 4px;
}
form.login div input[type="submit"] {
    background: none repeat scroll 0 0 #DEDEDE;
    border: 1px solid #C6C6C6;
    float: right;
    font-weight: bold;
    padding: 4px 20px;
}
.error{
    color: red;
    font-weight: bold;
    margin: 10px;
    text-align: center;
}
</style>
 
<form action="" method="post" class="login">
    <div><label>Username</label><input name="user" type="text" ></div>
    <div><label>Password</label><input name="password" type="password"></div>
    <div><input name="login" type="submit" value="login"></div>
</form>
<?php
} else {
    echo 
'Su usuario ingreso correctamente.';
    echo 
'<a href="logout.php">Logout</a>';
}
?>


tutorial
Sígueme y entérate de todos mis aportes!

gratis

login



Te gusta el diseño web?... Únete! --> Diseño Web Pro
chucky55

[Tutorial]Crear un sistema de Login con PHP y MySQL
diseño

Anuncios

Comentarios Destacados

@Sanleviathan +11
Y el Formulario de REGISTRO???
@Asgard0423
<style type="text/css">

*{

font-size: 14px;

}

body{

background:#aaa;

}

form.login {

background: none repeat scroll 0 0 #F1F1F1;

border: 1px solid #DDDDDD;

font-family: sans-serif;

margin: 0 auto;

padding: 20px;

width: 278px;

box-shadow:0px 0px 20px black;

border-radius:10px;

}

form.login div {

margin-bottom: 15px;

overflow: hidden;

}

form.login div label {

display: block;

float: left;

line-height: 25px;

}

form.logi
@Shavo2 +5
MUy bueno solamente tengo una duda porque haces esto:


    while($row = mysql_fetch_object($rec)) 
    { 
        $count++; 
        $result = $row; 
    } 




Cuando puedes hacer


if(mysql_num_rows($rec)>0)
    {
         
       $row = mysql_fetch_object($rec)//dado que solamente espera un registro no es necesario un while 
       return true;
    }
else
   {
         return false;
    } 


de esa manera de ahorras el while y puedes devolver un valor booleano así en la condición solamente harías algo así:



    if(verificar_login($_POST['user'],$_POST['password'],$result)) 
        { 
            $_SESSION['userid'] = $result->idusuario; 
            header("location:index.php"); 
        } 
        else 
        { 
            echo '<div class="error">Su usuario es incorrecto, intente nuevamente.</div>'; 
        } 


@jorgeballeza
esta perfecto, solo olvidaste un ; al final de $row = mysql_fetch_object($rec)

46 comentarios - [Tutorial]Crear un sistema de Login con PHP y MySQL

@darkinsane_n6 +5
me parece interesante

es bueno aprender esto recomendado
@AlbeerToo1229 +1
excelente justo lo que andaba buscando gracias...
@Equis_13 +2
Excelente!!!! +5 y te dejo otros 5 en el post de sistema de registro!!! web
@DJ_BR1 +1
Te doy +10 por haberte esforzado en hacerlo y compartirlo !
@eldany76 +2
Esto es "inteligencia colectiva".Gracias esta muy bueno el post!
@matyp
Consulta: ya tengo el login y funciona, ¿que tengo que agregar en la pagina a la que lleva para que no sea puenteada?
@joveman
Pues basicamente el manejo de sesiones si es algo que maneja informacion delicada es mejor manejar tiempo en las sesiones. Espero haberte ayudado Saldudos
@Shavo2 +5
MUy bueno solamente tengo una duda porque haces esto:


    while($row = mysql_fetch_object($rec)) 
    { 
        $count++; 
        $result = $row; 
    } 




Cuando puedes hacer


if(mysql_num_rows($rec)>0)
    {
         
       $row = mysql_fetch_object($rec)//dado que solamente espera un registro no es necesario un while 
       return true;
    }
else
   {
         return false;
    } 


de esa manera de ahorras el while y puedes devolver un valor booleano así en la condición solamente harías algo así:



    if(verificar_login($_POST['user'],$_POST['password'],$result)) 
        { 
            $_SESSION['userid'] = $result->idusuario; 
            header("location:index.php"); 
        } 
        else 
        { 
            echo '<div class="error">Su usuario es incorrecto, intente nuevamente.</div>'; 
        } 


@jorgeballeza
esta perfecto, solo olvidaste un ; al final de $row = mysql_fetch_object($rec)
@Farum08 +4
chido bro solo una pregunta... cuando intento ingresar un usuario y contraseña me marca un error..

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:xampphtdocsusuarioindex.php on line 10

me podrias ayudar!! te lo agradeciera mucho..
GRACIAS
@Sanleviathan +11
Y el Formulario de REGISTRO???
@Asgard0423
<style type="text/css">

*{

font-size: 14px;

}

body{

background:#aaa;

}

form.login {

background: none repeat scroll 0 0 #F1F1F1;

border: 1px solid #DDDDDD;

font-family: sans-serif;

margin: 0 auto;

padding: 20px;

width: 278px;

box-shadow:0px 0px 20px black;

border-radius:10px;

}

form.login div {

margin-bottom: 15px;

overflow: hidden;

}

form.login div label {

display: block;

float: left;

line-height: 25px;

}

form.logi
@byinf
Lo vi muy bueno me lo voy a poner a implementar .

Gracias por enseñarnos !
@CRASHCODE
Excelente me sirvio mucho, una pregunta, como hago para que al iniciar sesion me mande a la pagina que yo diga y no refresque y me diga su usuario ingreso correctamente? Gracias
@jorgeballeza
en donde vienen el echo 'Su usuario ingreso correctamente.'; remplaza esos 2 echos por una redireccion header("location:index.php";
@Dyego22
tengo este error Warning: Cannot modify header information me ayudas es en esta linea $_SESSION['userid'] = $result->idusuario;
header("location:index.php";
@jorgeballeza
si usas wordpress tendras que hacerlo con una funcion de wordpress http://codex.wordpress.org/Function_Reference/wp_redirect
@midd_98
:O
esta genial, funciona perfecto, muchas gracias +10
@blass2442 -1
no valida !!!!!!!! puedo ingresar normal sin poner contraseña y poniendo contraseña
@josemcy +2
tienes errores hermano revisa esta linea como puedes enseñar así, lo que haces es confundir a la gente !!!!!
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and ‘$password’ = ‘$password’”;
@jman86
ademas , si pones una linea que contenga el operardo "or" ,en la pantalla de login y pones algo asi: user xxx or 2+2=4 . igual dejaria entrar al usuario sin poner el password.
@abarcaemiliano
Duda: como le doy permisos al usuario a las distintas tablas que tenga? No seria mejor usar usuarios de mysql en vez de crearlos en una tabla? O estoy en una confusion? Gracias.-
@Ferchuu_la22
Muy buena.. pero tengo una duda... que tengo que hacer para mostrar por ejemplo "Bienvenido Carlos" ponele

porque lo pude hacer una vez que te registras con un $_POST['user']

pero si yo actualizo la pagina lo pierdoo
@capitan_crunch +3
El programa se podría pulir un poco más no quiero pecar de pedante ni sabiondo, pero los programadores tenemos esa compulsión por encontrar errores o reducir el código, por ej, se podría usar la nueva recomendación de mysqli en lugar de mysql, también podría hacerse en un class de poo, también se podria guardar el pass en MD5 y colocar unos filtros adicionales ante xss, etc., a mi me da por las pelotas que me corrijan pero muchas veces estudio los comentarios constructivos para mejorar el código y creeme que sirve para perfeccionarse.
@Horusjavier +1
muchas Gracias me sirvio de mucho toma tus +10 bien merecidos
@genesis_182
me sale a cada rato el mensaje de contraseña incorrecta nose que hago mal :/

Alguien que me pueda ayudar

Saludos
@marckollica
Una pregunta. Que hago para que pueda logearce cualquier usuario que esté en la tabla de usuarios?. Por que en el ejemplo solo se puede logear el primer registro que existe en la tabla usuarios.
@luistp
muy bueno muchas gracias !!
@CulebraMatt +1
Amigo tengo una duda, cuando ingreso usuario incorreco me da el mensaje correspondiente, pero cuando el susuario y contraseñas son correctas me vuelve a dar el cuadro de logueo en vez del mensaje de "Su usuario ingreso correctamente.".. hace unos dias me funcionaba perfecto pero ahora pasa esto.. tienen idea que puede ser?
@mugen441
tengo el mismo problema, avisame si logras solucionarlo, saludos!
@miguelo0N +1
hola tengo una duda me podrias explicar que es lo que hace el operador "->" en esta linea

$_SESSION['userid'] = $result->idusuario;
@juanmatias
miguel... como estas? yo estoy aprendiendo php.. esta muy bueno y super facil al existir tantos blogs sobre este... tengo la misma duda que vos.. para que sirve el operador "-> ", si ya lo sabes, podrias explicarmelo a mi
@juanmatias
creo que ya entendi ... es como hacer en java resultSet.getInteger('idusuario'); y obtienes el idafiliado de la consulta a la base de datos.. puede ser que sea asi??
@ignacio5000
Y la contraseña cifrada?????????????????????? Enviar info sin cifrar es altamente riesgoso!!!!! Es necesario cifrar la contraseña con un algoritmo de cifrado tipo MD5 o SHA1 !!!!!!!!!!!!!!!!!!!!!!
@YISUSVII
Perfecto para implementar en bases de datos ya creadas....... si ya tienen un index.php solo hagan las modificaciones correspondientes de el nombre de su Base de datos, el nombre de la tabla, y los campos de usuario y password con el mismo nombre

MUCHAS GRACIAS!!!
@juanmatias
hola.. muy bueno el post.... me sirvio de mucho, ahora, me explicas para que sirve ->
@miguelo0N +1
Investigue y "->" sirve para acceder a un metodo de una clase.
@byPitBuLL
@miguelo0N | no es asi es un login de cuentas, conecta por php a base de datos mysql, a una base de datos con los datos de la cuenta
@ex_yayi
Esto anda con multi usuario accediendo al mismo tiempo ?
@byPitBuLL
es un sistema de registro viejo no pidas demaciado
@waltsoft
Me salio un error Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource.

al poner $rec = mysql_query($sql) or die('Mi error es: '.mysql_error());

me salio que no tenia basa de datos

cambie el query -SELECT * FROM bdrf.usuarios WHERE- donde bdfr es mi base de datos, funciono de maravilla. gracias..
@Jack_Tomy
MUY BUENO... ACABO DE HACER LA PRUEBA Y LO MEJORE ....
@Ghostt00
Agradesco el aporte, pero me sale un error, parece ser problema de las etiquetas <a></a> que por alguna razon no cierran bien y por mas que me rompo la cabeza tratando de entender no entiendo soy demasiado noob si alquien me puede ayudar a solucionar el problema se lo agradesco, ademas, no se que tan noob puedo llegar a ser pero cual es el usuaruio y la contraseña de esto . xd .adjunto imagen de mi problema
PHP
<a href="http://es.tinypic.com?ref=20faqme" target="_blank"><img src="http://i58.tinypic.com/20faqme.png" border="0" alt="Image and video hosting by TinyPic"></a>
@deaniell
me salvaste la vida compadre solo una consulta si en ves de echo 'Su usuario ingreso correctamente.'; quiero que aparezca por ejemplo print("ingreso correctamente el usuario ".$row['user']);

como lo haria?
@MauMD
Y si la quiero hacer desde el localhost de xampp? Soy novato en php u.u