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.
1. Preparando una tabla en MySQL
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`)
)
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');
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).
$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>
La función de mysql_connect 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.
Código completo
<?php
// datos para la conexion 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);
?>
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
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();
include_once "conexion.php";
session_start() crea una sesión para ser usada mediante una petición GET o POST, o pasado por una cookie y la sentencia include_once es la 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']))
{
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>';
}
}
?>
<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>';
}
?>
- Linea 1: La primera condición es para saber si existe o no ya la variable de sesión que se va a crear cuando el usuario se logee
- Linea 3: Si la primera condición no pasa, haremos otra preguntando si el boton de login fue presionado
- Linea 5: 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.
- Linea 7 y 8: Si el login fue correcto, registramos la variable de sesión y al mismo tiempo refrescamos la pagina index.php.
- Linea 12: Si la función verificar_login() no pasa, que se muestre un mensaje de error.
- Linea 22: Si la variable de sesión ‘userid’ ya existe, que muestre el mensaje de saludo.
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;
}
Código completo
<?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;
}
form.login {
background: none repeat scroll 0 0 #F1F1F1;
border: 1px solid #DDDDDD;
font-family: sans-serif;
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;
}
</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>';
}
?>
Y con esto terminamos el nuestro sistema de login en PHP.
Esta muy bueno el tutorial, saludos!
Bueno mira e creado un login con este codigo.
if(!session_is_registered(username) && !empty($_POST[‘mf-username’]) && !empty($_POST[‘mf-password’]))
{
$login_username = MFText($_POST[‘mf-username’]);
$login_password = Core::MFHash(MFText($_POST[‘mf-password’]), $login_username);
$checking = mysql_query(«SELECT * FROM users WHERE username = ‘».$login_username.»‘ AND password = ‘».$login_password.»‘ LIMIT 1″) or die(mysql_error());
/*Desactive el Error del login por unos momentos.
$errorLogin =’¡Nombre de usuario o contarseña incorrectos! Asegurate de que esten bienX
‘;
*/
$user_exist = mysql_num_rows($checking);
if($user_exist > 0)
{
$_SESSION[‘username’] = $login_username;
$_SESSION[‘password’] = $login_password;
$cotinue_login = true;
}
}
if(!empty($_SESSION[‘username’]) || $continue_login == true)
{
$login_username = MFText($_SESSION[‘username’]);
$login_password = MFText($_SESSION[‘password’]);
$checking = mysql_query(«SELECT * FROM users WHERE username = ‘».$login_username.»‘ AND password = ‘».$login_password.»‘ LIMIT 1″) or die(mysql_error());
$user_exist = mysql_num_rows($checking);
if($user_exist > 0)
{
$My = mysql_fetch_assoc($checking);
define(«My_ID», $My[‘id’]);
define(«My_Name», $My[‘username’]);
define(«My_Credits», $My[‘credits’]);
define(«My_Motto», $My[‘motto’]);
define(«My_Rank», $My[‘rank’]);
define(«My_Habbo», $My[‘habbo_name’]);
define(«My_Email», $My[‘email’]);
mysql_query(«UPDATE users SET online = ‘».time().»‘ WHERE id = ‘».$My[‘id’].»‘ LIMIT 1″) or die(mysql_error());
define(«MF_USER_ON», TRUE);
}
else
{
define(«My_ID», 0);
define(«My_Username», «Visitante»);
define(«My_Rank», 0);
define(«MF_USER_ON», FALSE);
}
}
else
{
define(«My_ID», 0);
define(«My_Name», «Visitante»);
define(«My_Rank», 0);
define(«MF_USER_ON», FALSE);
}
Y quisiera saber como le pongo un sistema de baneo.
Si me pudieran ayudar .
Agregenme lmcd@hotmail.es
Me he descargado el código y arroja éste error.
Falla en la límea 12: while($row = mysql_fetch_object($rec))
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /homepages/23/d363077467/htdocs/MIDOMINIO/index.php on line 12
Su usuario es incorrecto, intente nuevamente.
Un saludo
OJO HAY UN ERROR YA LO IDENTIFIQUE Y YA SIRVE ¡¡¡¡
Resulta que en la linea 8 del archivo index php el programador coloco
$sql = “SELECT * FROM usuario WHERE usuario = ‘$user’ and clave = ‘$password’”;
el error esta aqui en la palabra CLAVE , por que en el formulario el nombre del campo password es ese mismo paswsword y no clave entonces la linea de codigo correcta que reemplazaria esta es
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and ‘$password’ = ‘$password’”;
Por eso es que arroja algunos errores.
Muy bueno el tutorial me fue de gran ayuda … mucha gracias..
y donde esta el registro?
Ese solo es un formulario de logeo, en un futuro muy cercano vamos a hacer un tutorial de registro y logeo 🙂
Llegó el Registro?…. Ya estamos en 22 de Diciembre ya fue 3 Días.o 4 o una Semana 😀
Una consulta para conectarse un bd de sqlserver se puede lo intentado con la clase de pdo pero no me aparece el driver hay un manera de solucioncarlo con el driver mssql del pdo
Intenta escribir mejor
Saludos Camarada:
Estoy tratando de correr este Tutorial, sinembargo me da este error:
Fatal error: Call to undefined function import_request_variables() in C:\Archivos de programa\EasyPHP-5.4.0beta2\www\pruebas1\logeo\index.php on line 5
El contenido de la linea 5 es el siguiente:
import_request_variables(«GP», «»);
Si puede hacer algo por este humilde aspirante a programador, seguramente la humanidad se lo agradecerá y si no lo hace [la humanidad] puede jurarlo que yo si se lo agradeceré
http:rrrrregimenchavista.blogspot.com
Tienes la versión de PHP muy antigua, actualizate a la versión 6 de PHP 😛
¡ Cúmplase ¡ Voy a eso.
Gracias.-
rrrrregimenchavista.blogspot.com
Gracias por el aporte, muy bien… a probar!
una duda pero esto es solamente para un admin es decir si varias personas quieren entrar con su login y su pass se podra hacer? porque al ver el ejemplo hecho solo admite admin bueno eso seria mi pregunta espero que la puenda nrespinder a brevedad gracias
OJO HAY UN ERROR YA LO IDENTIFIQUE Y YA SIRVE ¡¡¡¡
Resulta que en la linea 8 del archivo index php el programador coloco
$sql = «SELECT * FROM usuario WHERE usuario = ‘$user’ and clave = ‘$password'»;
el error esta aqui en la palabra CLAVE , por que en el formulario el nombre del campo password es ese mismo paswsword y no clave entonces la linea de codigo correcta que reemplazaria esta es
$sql = «SELECT * FROM usuarios WHERE usuario = ‘$user’ and ‘$password’ = ‘$password'»;
Por eso es que arroja algunos errores.
Gracias, ya esta corregido.
Hola diego.
En la segunda consulta comparas la variable $password con la misma cuando haces usuario = ‘$user’ and ‘$password’ = ‘$password’… Supongamos que te logueas como pepito y la contraseña 1234, la consulta sera
$sql = “SELECT * FROM usuarios WHERE usuario = ‘pepito’ and ‘1234’ = ‘1234’”;
De esa forma estas comprobando solamente el usuario independientemente de la contraseña que pongamos.
La consulta correcta según la estructura de la tabla planteada arriba seria:
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and password = ‘$password’”;
Saludos.
OTRO ERROR QUE SE ME OLVIDO COLOCAR ESTA EN LA MISMA LINEA EL COLOCO $sql = «SELECT * FROM usuario WHERE usuario = ‘$user’ and clave = ‘$password'»;
Y RESULTA QUE DESPUES DE LA CONSULTA DE FROM VA ES LA PALABRA USUARIOS POR QUE LA TABLA SE LLAMA USUARIOS Y NO USUARIO COMO EL COLOCO, RECORDEMOS QUE DESPUES DE LA EXPRESION FROM VA EL NOMBRE DE LA TABLA Y SI VEMOS EL COMIENZO DEL TUTORIAL LA TABLA SE LLAMA ES USUARIOS Y NO USUARIO COMO ESTA EN EL CODIGO
AHORA EL ERROR A CORREGIR ES QUE CUANDO INGRESO UN USUARIO REGISTRADO EN LA BD ME ENTRE CON CUALQUIER CLAVE…AYY DIOS…
Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘TU_USUARIO’@’localhost’ (using password: YES) in W:\var\www\conexion.php on line 7
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in W:\var\www\conexion.php on line 8
me pueden ayudar.. porque me sale este error?
NO estas seleccionando bien la base de datos, has puesto mal el nombre o la clave.
saludos
Cuante gente ansiosa…deberían repasar el código o releer antes de patalear…
Muy buen tutorial, gracias como siempre.
gracias Nicolas
hola tu codigo me vota un error coloco el usuario y contraseña y me sale usuario no registrado que pasa
Gran trabajo muy buen tutorial, pero tengo un problemilla al loguearme tengo que darle dos veces al boton login para que me aparezca el mensaje de bienvenida.
gran tutorial pero mi pregunta com puedes despues de logearce conservar los datos del tipo que se logio onda como face que tras y sales del perfil de jente pero siempre es tu cuenta ?
pd:felizidades exelente aporte
Como lo hago en caso que desee redireccionar a distintos «portales» a los usuarios ingresados en la tabla.. por ejemplo tengo un usuario con permiso nivel 1 que vendría siendo el admin, lógicamente el admin tiene permiso de acceso a toda la aplicación web que el php seria algo como «sesionadmin.php» y tengo otro usuario de nivel 3 que serian los operadores de ingres , etc ,etc pero no tienen permiso a toda la información el php seria como «sesionoperaria.php» (por dar ejemplos burdos)
Como podría yo aplicar esta condición a que la query me retorne el numero de permiso y en base a eso autentificar y redireccionar? llevo un par de horas tratando de resolver este problema y no encuentro solución, me imagino que seria fácil pero no soy experto en el lenguaje
ah mi tabla en phpMyAdmin esta de la siguiente manera
CREATE TABLE `usuarios` (
`idusuario` INT(11) NOT NULL AUTO_INCREMENT,
`usuario` VARCHAR(20) NOT NULL,
`password` VARCHAR(10) NOT NULL,
`permiso` INT (2) NOT NULL,
PRIMARY KEY (`idusuario`)
)
Como le hago para que las paginas que siguen después del índex sigan protegidas… ya que si escribes directamente la direccion si te deja entrar a las paginas…
no se si me explico
saludos.. muchas gracias por la ayuda
Usando un if y isset para ver si existe la variable de sesión que creaste para el el usuario
Y como sería? Gracias.
if(isset($_SESSION[‘userid’]))
{
// muestra contenido cuando existe la variable de sesion
}
Amigo buenos dias estoy creando un programa o una base de datos para registros, mi problema es, que los datos aparecen en la base de datos, pero quisiera que se reflejaran tambien, visualizarlos en una tabla como hago.te agradeceria si tienes un modelo que me puedas facilitar por lo meno que refleje las tablas con la informacion,
Cuando logeo el usuario y la pass correcta, en index.php me repite de nuevo el formulario.
La pregunta es. ¿como hago para que el contendido de una pagina llamada gratis.html solo sea accesible a quien se logee correctamente’
Gracias por el esfuerzo y enhorabuena por lo didactico
La pagina gratis tendria que ser PHP no HTML e incluirle una condicional alli.
hola que tal.. mira tengo una pequeña duda,, la verdad soy nuevo en php y no logro entender que hace el contador.. ahh y otra duda…..quisiera que cuando inicie la sesion.. pueda mantener la sesion en varias paginas… con mi mismo usuario… 🙂 .. gracias..
A partir del PHP 5.4 el «import_request_variables» quedó obsoleto, por lo tanto tira error, alguna solución?
hola amigo un favor me podrías ayudar con este error «Parse error: syntax error, unexpected $end in C:\xampp\xampp\htdocs\logeo\index.php on line 57»
que hay en la linea 57 de tu archivo?
edwin, me puedes explicar porque cuando agrego un usuario y entro, entro correctamente, pero cuando agrego otro me dice qu el usuario no esta registrado porque ayudame plis
Hola en el Error“Parse error: syntax error, unexpected $end in C:\xampp\xampp\htdocs\logeo\index.php on line 57″, desde la linea 50 a la 57 que esta escrito asi:
<?
}
else
{
echo 'Su usuario ingreso correctamente.';
echo 'Logout‘;
}
?>
deberia estar escrito asi:
<?php
}
else
{
echo 'Su usuario ingreso correctamente.';
echo 'Logout‘;
}
?>
A mi me salio ese error y lo repare asi…
Saludos
Hola Amigo Quisiera Q Me Ayudaras Con Este Error Lo Descrague De Aqui Pero No Se Q Pasa Con Este Erroor
Notice: Use of undefined constant usuarios – assumed ‘usuarios’ in C:\wamp\www\logeo\conexion.php on line 10
Muchas Gracias Brooo
Ya Arregle el Error de Arriba Ahora Me Pasa Es Esto
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Login2\index.php on line 12
Un Error con El Vector Q Pasara???? Amigo Ayudame Necesito Esto Urgente
Algo tenés mal en el archivo index.php on line 12, publica es linea para poder ver el error, pero seguramente la consulta mysql no te esta dando un valor correcto.
Amigo Esta Es La Linea 12 La Q Me Genera El Error
while($row = mysql_fetch_object($rec))
Aqui Te Envio Con La Parte Dond Esta La Consulta Gracias Saludos
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;
}
En La Parte de La Consulta Me Falto La Comilla Simple Despues Del WHERE Usuario = ‘$user’
Listo Por Fin Me Dio Gracias Por El Codigo Muy bueno
Buenos Post Felicitaciones Gracias Saludos
Me da este Error
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP-12.1\www\prueba\index.php on line 11
ESTA ES LA PARTE DEL CODIGO DONDE ME TIRA EL ERROR:
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)) // ESTA ES LA LINEA 11
{
$count++;
$result = $row;
}
if($count == 1)
{
return 1;
}
else
{
return 0;
}
}
Muchas Gracias Por el Tutorial ! Me ha sido de mucha utilidad! 😀
gracias 🙂
y si quiero comprobar una contraseña que este en md5?
http://php.net/manual/es/function.md5.php
cuidado: Dada la velocidad de este algoritmo de hash, se recomienda no utilizar esta función para proteger las contraeñas
Y tambien es conveniente encriptarlas antes de enviarlas al servidor para protegerlas de terceros.
http://www.manualdephp.com/codigos-php/encriptar-contrasenas-md5-php.html
Su usuario es incorrecto, intente nuevamente. no entiendo porque me sale eso si estoy registarddo ayuadme porfa
A mi me aparece error en la linea 10
y no se como resolverlo
En la linea 10 de que archivo? podés publicar el error que tenés?
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\cajeros\2\logeo\index.php on line 11
como kito el error
estoy tabajando con oracle
Hola, no comprendo donde y como hay que poner eso, si es con algún programa o simplemente poniéndolo en el bloc de notas y guardándolo en archivo .php pero, lo que mas me interesa saber es, ¿donde y como tengo que poner eso?
Ayuda por favor =D
Tienes que aprender lo basico de PHP primero 🙂
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\cajeros\2\logeo\index.php on line 11
NADIE RESPONDE PORQ SALE ESTE ·@%& ERROR????
Hola, para ver el error pegá la linea 11 del archivo index.php
Y evitemos las mayúsculas.
Saludos.
NICOLAS
<?php
session_start();
include_once "conexion.php";
function verificar_login($user,$password,&$result)
{
$sql = "SELECT * FROM usuarios WHERE usuarios = `$user` and password = `$password`";
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
Es simple, es un error con tu base de datos, revisa las tablas, los campos, fíjate que este todo correctamente definido.
Hola me podrías pasar el código del index ya estructurado?? esque lo ejecuto y me aparece en el navegador en vez de el formulario todo el texto del código… Porfavor
Que tal muy bueno este tutorial fue de mucha ayuda, a mi no me da ningun error ni nada ya he revisado todo el codigo y el unico incoveniente que tengo es que no me da el mensaje de bienvenida, si no que regresa a la pantalla de logueo, cuando ingreso mal el usuario me da el resultado correcto de usuario incorrecto. Solo tengo ese inconveniente.
Esta bien el sistema, pero deberias de filtar los datos que recibes con $_post{‘password’] ya que tienes una inyeccion sql y ademas tienes xss en la generacion de la cookie, esto se evita de varias formas:
htmlentities($_POST[‘password’]), esto hace que la ‘ se codifique con su caracter en html de tal forma que no se pueda jugar con » para hacer una injeccion SQL y el cross scripting lo evitas poniendo la cookie con la opcion httponly, de tal manera que no acepte cookies desde fuera del servidor.
function verificar_login($user,$password,&$result) {
$password = mysql_real_escape_string($password);
Esta modificacion haria que fuera mas complicado de inyectar sql, si utilizas htmlentities, el problema es que no puedes usar simbolos en la contraseña, de esta manera se evita.
aqui podeis ver como evitar el cross scripting y poder añadir una cookie de sesion para poder controlar el acceso de login :https://www.owasp.org/index.php/HttpOnly
En IIS no funciona había una versión anterior a la actual esa si funcionaba la que implementaba una función que quedo en des uso.
«En IIS no funciona había una versión anterior a la actual esa si funcionaba la que implementaba una función que quedo en des uso.»
Para ser exacto el demo que esta linkeado abajo no funciona en IIS y si en Apache mientras que el link de arriba si funciona en IIS y Apache.
hola, donde pongo este codigo?:
CREATE TABLE `usuarios` (
`idusuario` INT(11) NOT NULL AUTO_INCREMENT,
`usuario` VARCHAR(20) NOT NULL,
`password` VARCHAR(10) NOT NULL,
PRIMARY KEY (`idusuario`)
)
lo pongo en un archivo para que se cree automaticamente en php? o me voy al phpmyadmin y lo creo yo manualmente? gracias
gg
Ese código corresponde a la creación de la base de Datos en SQL debes ponerlo en servidor donde alojes la base de datos.
donde estarías creando una tabla que se llama : usuarios
campo : idusuario
campo : usuario
campo : password
Angello debes poner ese código en la pestalla SQL de phpMyADmin y ejectutarlo para crear la tabla pero antes de crear la tabla debes crear la BD hay mismo revisa un tuto básico de BD MySQL con phpMyADmin te ayudara mucho 😉
Att @PeterConchaR
Microsoft Student Partner Lead Latam
Miembro Avanet Colombia
Excelente Tutorial. Funciona a la perfeccción con la corrección.
Saludos
Hola,
no creo que se conveniente usar el driver mysql de php para conectarse a una base de datos. Es recomendable usar PDO y el driver mysqli.
Tampoco se «sanitiza» el texto que mete el usuario en el formulario, lo que puede provocar un ataque de inyección SQL y más si se emplea el driver mysql.
Un saludo
Gracias por tu critica, el asunto es que este no es un tutorial avanzado y se busca usar las funciones mas básicas para el facil entendimiento, sin embargo vere que se puede hacer con el Autor para mejorar la seguridad.
Hola
muy bueno , todo funciona de maravilla… mis felicitaciones
pero Como oculto una pagina detras del login… osea, tengo una pagina que no quiero que se vea, sin logearse..
,como hago eso ??????
Me podrias pasar tus archivos corregidos pedro,Esque ami me sigue generando errores
Hola pedro es muy facil simple la pagia o elementos que no quieras que se vean si no estas logeado haces simpemente esto:
Aqui le pones cosas para gente no ha inisiado sessión
Aqui van cosas para la gente que ha iniciado sessión
Espero haberte ayudado 🙂
No puedo poner la contraseña con MD5/SHA, en el registro.php tengo puesto esto:
$sql = «INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,SHA(‘$password’))»;
Que pongo en el index.php ??? para que me valide la password encriptada?
no lo hagas dentro de la consulta de sql y haslo con md5
La linea 9 me da el siguiente error: Parse error: syntax error, unexpected ‘usuarios’ (T_STRING) in D:\wamp\www\app\admin.php on line 9
import_request_variables(«GP», «»);
function verificar_login($user,$password,&$result)
{
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and password = ‘$contra’”; //Linea 9
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
if($count == 1)
{
return 1;
}
else
{
return 0;
}
}
fijate si tu tabla se llama «usuarios», seguro le has puesto otro nombre
Hola buen día, me sirvio mucho el codigo pero tengo una duda, al ingresar mi username y mi pass entra pero al ingresar de nuevo otra contraseña de todas formas me deja entrar y nde igual forma lo hace en tu demo que puedo hacer gracias
Tengo tres dudas: ¿como hago un formulario de registro?, ¿como hago una página privada para cada usuario? y ¿como hago una página de perfil del usuario?
GRACIAS POR EL TUTORIAL, PARA AQUELLOS QUE ESTAMOS COMENZANDO ES DE GRAN AYUDA. LO IMPORTANTE DE ESTO ES EL GRAN APOYO QUE REPRESENTA EL DESARROLLO PASO A PASO COMO EL QUE REFLEJAS EN TU TRABAJO. EN ESTA MISMA LINEA RECOJO DOS POST A LOS QUE ME SUMO:
(1) pedro: «como oculto una pagina detras del login…(sic)
(2)Cristobal de Leon: » ¿Como le hago para que las paginas que siguen después del índex sigan protegidas»…(SIC)
tu respuesta fue:
if(isset($_SESSION[‘userid’]))
{
// muestra contenido cuando existe la variable de sesion
}
me imagino que esto va en la pag que quiero proteger con la sesion loggeada. y lo que va entre {} seria lo que quiero «ocultar de lo no loggeado»
nos sería muy util una parte 2 del tutorial con las especificaciones del que hacer una vez loggeado.
Nuevamente gracias
Alguien me peude ayudar no se porque sale este error:
mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/u702527324/public_html/index.html/logeo/index.php on line 12
Es un problema de MySQL, revisa que tus conexiones y tu base de dates este correctamente estructurada.
gracias todo funciono de maravilla pero quisiera saber si hay una forma de que me muestre en todo el resto de mi pagina web el usuario registrado obviamente depues de haber iniciado sesion
Disculpen pero yo tengo todo en la pagina en orden, mi problema es que registra bien, pero al ingresar ( login ) me da error ( Contraseña incorrecta ) ya que no es la misma la pongo directamente de la base de datos la contraseña hexadecimal (7110eda4d09e062aa5e4 )y si entra que puede ser eso?
Hola ! muy buena la explicacion, pero me tira este error:
Warning: mysql_connect(): Access denied for user ‘u846516986_data’@’localhost’ (using password: YES) in /home/u846516986/public_html/conexion.php on line 7 Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in /home/u846516986/public_html/conexion.php on line 8 Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u846516986/public_html/log.php on line 7 Warning: mysql_query(): A link to the server could not be established in /home/u846516986/public_html/log.php on line 7 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/u846516986/public_html/log.php on line 10
Su usuario es incorrecto, intente nuevamente.
y cuando registro un usuario:
Warning: mysql_connect(): Access denied for user ‘u846516986_data’@’localhost’ (using password: YES) in /home/u846516986/public_html/conexion.php on line 7 Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in /home/u846516986/public_html/conexion.php on line 8 Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u846516986/public_html/reg.php on line 13 Warning: mysql_query(): A link to the server could not be established in /home/u846516986/public_html/reg.php on line 13 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/u846516986/public_html/reg.php on line 16 Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u846516986/public_html/reg.php on line 31 Warning: mysql_query(): A link to the server could not be established in /home/u846516986/public_html/reg.php on line 31 Usted se ha registrado correctamente.
Acá te dejo colgados en mi pendrive virtual los archivos que usé:
http://penweb.tuars.com/files/ARCHIVOS.rar
en realidad, ninguna de las dos funciones me sirvieron, espero que me puedas ayudar.
Gaston, el error que te esta saliendo te lo dice explicitamente «Warning: mysql_connect(): Access denied for user», los datos de conexión a tu base de datos son incorrectos.
entonces me conviene hacer la base de datos de nuevo?
Buenas me podrias ayudar a darle acceso a los usuarios por ejemplo que los que sean administradores vean todos los modulos los de menos de nivel vean ciertos modulos y asi pss.???
deje un comentario arriba, donde puede servirte de guia
Oie mira lo que pasa es lo siguiente, cree un login en mi servidor, pero al poner este login en la carpeta login2, me conecta con la tabla de el primer login, ¿como espesifico el nombre de la tabla a la que me conectare?, la tabla de este login le puse usuarios2
hola, cuando edito en vista previa del explorador con front page me sale esto:
«idusuario; header(«location:index.php»); } else { echo ‘
Su usuario es incorrecto, intente nuevamente.»
Por favor ayuda
barrientos.stc@gmail.com
hola pregunta como hago para que algunas paginas se muestren solo a los usuarios registrados con este codigo y si no estan registrados los envie a la pagian de logeo
Encontraste la solucion luis?
Buenos dias Luis y Rhulk, aqui despues de varias pruebas, logre encontrar una solucion:
function verificar_login($user,$password,&$result) {
$sql = «SELECT * FROM usuario_sistema WHERE dniUsuario = ‘$user’ and clave = ‘$password'»;
$rec = mysql_query($sql);
$perfil=0;
while($row=mysql_fetch_array($rec)){
$user = $row[0]; //dniUsuario
$password = $row[4];//clave
$perfil = $row[8]; //perfil
}
if($perfil == 1) //perfil de admin
{
return 1;
}
else if($perfil == 2) //perfil Operador
{
return 2;
}
else if($perfil == 3) //perfil Tecnico
{
return 3;
}
else
{
return 0;
}
}
if(!isset($_SESSION[‘userid’]))
{
if(isset($_POST[‘login’]))
{
$dniTecnico= $_POST[‘user’];
////////////////////SI ES ADMIN/////////////////////////////
if(verificar_login($_POST[‘user’],$_POST[‘password’],$result) == 1)
{
$_SESSION[‘userid’] = $result->idusuario;
header(«location:paginadelAdmin.php»);
}
////////////////////SI ES OPERADOR/////////////////////////////
else if(verificar_login($_POST[‘user’],$_POST[‘password’],$result) == 2)
{
$_SESSION[‘userid’] = $result->idusuario;
header(«location:PaginadelOperador.php»);
}
////////////////////SI ES TECNICO/////////////////////////////
////////////este es un plus con el cual puedes enviar una variable atravez del /////////////enlace hacia esa pagina 🙂 //////////////
else if(verificar_login($_POST[‘user’],$_POST[‘password’],$result) == 3)
{
$_SESSION[‘userid’] = $result->idusuario;
header(«location:PaginadelTecnico.php?mensaje=$VARIABLE»);
}
////////////////////SI NO TIENE PERFIL/////////////////////////////
else{
echo ‘Su usuario o contraseña son incorrectos, intente nuevamente.’;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// eso es todo, espero esto pueda ayudarlos y si tienen alguna forma de aportar alguna mejora (de seguro que las hay), serán bien recibidas
hola, es muy interesante esta solución para restringir accesos, pero perdón por la pregunta quizá no sea del todo muy inteligente, pero aun así la hago, jajaja, donde va este código. es que no he podido hacer que funcione bien. Les agradezco sus respuestas, mi correo es juan-g81@hotmail.com
excelente mil felicitaciones
Hola. Ha salido todo muy bien, sin embargo, quisiera saber si me pueden decir qué debo escribir para que aparezca el nombre del usuario en el index y en el resto de las subpáginas. Sé que es mucho pedir, pero en diferentes partes se dan diferentes soluciones. Pareciera como si los códigos php son como huellas digitales, porque todos son diferentes explicando la misma función.
Gracias por el tutorial… la pena es que falte, como entrar en alguna pagina restringida mediante login y mantener la sesion de dicho login en toda la web.
Un saludo.
¿hay solucion para esto?: Parse error: syntax error, unexpected ‘<' in /home/u849876195/public_html/secure_account/register/index.php on line 5
El error te lo dice, revisa la linea 5 de index.php.
Hola tengo un problema con un Codigo:
include(‘FoxCorp.php’);
$_SESSION[‘user’] = @mysql_fetch_assoc($b_user);
$b_user = mysql_query(«SELECT * FROM usuarios WHERE user = $_POST[user]»); echo $_SESSION[‘user’]
luego en la pagina de perfil me arroja este resultado:
Hola Notice: Undefined index: user in C:xampphtdocsperfil.php on line 113 Este es Tu Perfil
al logear me sale esto =(
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/edotropi/public_html/vina/admin/index.php on line 12
y ese while es el que esta ahi
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
El problema no es el while, el problema es tu query a MySQL, revisa esa parte.
Es buena idea usar un Framework para todas éstas tareas, por ejemplo http://ellislab.com/codeigniter .
Tu sistema de login es muy bueno, pero como puedo hacer para que en vez de enviarme a la misma pagina index.php me envie a admin u usuario.php, si ya se que cambiando el header location, el problema es que cuando agrego la cookie de sesion, me sigue apareciendo lo de Su usuario ingreso correctamente. y no me envia a la pagina, gracias
Hola amigo, el código funciona muy bien me sirvió mucho, además quería preguntarte si sabes como hago para que al iniciar sesión, consulte los datos propios de ese usuario ejemplo:
me logueo con Juan15
campo INFORMACION: esta es la información asociada al usuario Juan15
Cierro sesión ..
me logueo con Andres20
campo INFORMACION: esta es la información asociada al usuario Andres20
Te agradecería si me dijeras como ! 🙂
Estoy usando una BD de SQL server, tengo que cambiar mucho el codigo?? estoy usando mssql_connect() en lugar de mysql, pero me manda este error.
Call to undefined function mssql_connect()
Alguien sabe como lo compongo??
Si, tendrías que utilizar un driver que haga la conexión entre PHP y SQL Server, revisa esto:
http://sqlsrvphp.codeplex.com/
Hola
Mi ignorancia es grande ya que soy nuevo en el tema, hace rato que estoy dando vueltas con este tema.
Hice todo tal cual, pero me faltaria el html para que esto funcione verdad? Me faltaria las cajas y un link que me lleve a registro. como seria eso? alguien me podria ayudar con este tema.
Perdon por lo basico de mi pregunta pero estoy en ese nivel.
Gracias.
necesito crear un login para permitir acceso a una pagina pero no me ha funcionado ,algunos de ustedes me puede colaborar
Hola, tengo que crear sesiones de usuarios por tipo de usuario y llevar a cada uno a su página, pero no estoy segura de como hacerlo,
Este es el código
function login($usuario, $password)
{
global $mysqli;
$stmt = $mysqli->prepare(«SELECT id, id_tipo, password FROM usuarios WHERE usuario = ? || correo = ? LIMIT 1»);
$stmt->bind_param(«ss», $usuario, $usuario);
$stmt->execute();
$stmt->store_result();
$rows = $stmt->num_rows;
if($rows > 0) {
if(isActivo($usuario)){
$stmt->bind_result($id, $id_tipo, $passwd);
$stmt->fetch();
$validaPassw = password_verify($password, $passwd);
if($validaPassw){
lastSession($id);
$_SESSION[‘id_usuario’] = $id;
$_SESSION[‘tipo_usuario’] = $id_tipo;
header(«location: entrada.php»);
} else {
$errors = «La contraseña es incorrecta»;
}
} else {
$errors = ‘El usuario no esta activo’;
}
} else {
$errors = «El nombre de usuario o correo electrónico no existe»;
}
return $errors;
}
Yo creo que el tipo de usuario para redirigir sería aquí
if($validaPassw){
lastSession($id);
$_SESSION[‘id_usuario’] = $id;
$_SESSION[‘tipo_usuario’] = $id_tipo;
header(«location: entrada.php»);
} else {
Pero no se muy bien com hacerlo. Me puedes por favor ayudar?