Comunidad PHPeros

Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: BobEsponja en 19 de Febrero de 2012, 23:51:52 pm

Título: [Problema] PHP - Sistem logueo
Publicado por: BobEsponja en 19 de Febrero de 2012, 23:51:52 pm
Tengo un problema en PHP, Es el siguiente:

Estoy implementando un sistema de usuarios a mi sitio web y ya e logrado crear el registro de usuarios y que la pass en mysql se encrypte a MD5, pero en el logueo me sale que la contraseña es incorrecta, Siendo la pass correcta.

Código:
Código: [Seleccionar]
<?php
session_start
();
include(
"../inc/inc.config.php");
$username mysql_real_escape_string($_POST[&#39;username&#39;]);
$password md5(mysql_real_escape_string($_POST[&#39;password&#39;]));
$pass mysql_fetch_array(mysql_query("SELECT * FROM users WHERE username = &#39;$username&#39;"));
$user_exist mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = &#39;$username&#39;"));
if(
$_POST[&#39;username&#39;] == ""){
echo "No has introducido tu nombre de usuario";
}elseif(
$user_exist == "0"){
echo 
"Este usuario no existe";
}elseif(
$_POST[&#39;password&#39;] == ""){
echo "Debes introducir tu contraseña";
}elseif(
$password != $pass[&#39;password&#39;]){
echo "La contraseña es incorrecta";
}else{
$_SESSION[&#39;username&#39;] = $pass[&#39;username&#39;];
header("location: ./");
}
?>
Cuando intento loguearme me sale que la pass es incorrecta.
Diganme si hay algo mal.
Perdonen es que soy medio-nuevo en PHP
Título: Re:[Problema] PHP - Sistem logueo
Publicado por: Siquillote en 20 de Febrero de 2012, 00:10:56 am

Hola BobEsponja,

Antes que nada, darte la bienvenida al foro ;).
Respecto a tu duda es algo lógico. Si tu guardas la contraseña en la base de datos en MD5 al comparar la contraseña que has puesto con la encriptada pues claro que te dice que es incorrecta por que justamente en ese momento estás comparando, por ejemplo, 123456 con e10adc3949ba59abbe56e057f20f883e

Entonces, para poder comparar tienes que encriptar temporalmente la contraseña introducida en una variable.
Tan solo remplaza la línea:

$password = mysql_real_escape_string($_POST['password']);

por:

$password = md5(mysql_real_escape_string($_POST['password']));


Prueba y cuéntanos.

Un saludo,
Siquillote.
Título: Re:[Problema] PHP - Sistem logueo
Publicado por: BobEsponja en 20 de Febrero de 2012, 00:19:00 am
Hola BobEsponja,

Antes que nada, darte la bienvenida al foro ;).
Respecto a tu duda es algo lógico. Si tu guardas la contraseña en la base de datos en MD5 al comparar la contraseña que has puesto con la encriptada pues claro que te dice que es incorrecta por que justamente en ese momento estás comparando, por ejemplo, 123456 con e10adc3949ba59abbe56e057f20f883e

Entonces, para poder comparar tienes que encriptar temporalmente la contraseña introducida en una variable.
Tan solo remplaza la línea:

$password = mysql_real_escape_string($_POST['password']);

por:

$password = md5(mysql_real_escape_string($_POST['password']));


Prueba y cuéntanos.

Un saludo,
Siquillote.
Si, Ya arregle eso, Pero ahora me sale un error de sintaxis en esta linea:
$pass = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE username = ".$password."");
Título: Re:[Problema] PHP - Sistem logueo
Publicado por: Siquillote en 20 de Febrero de 2012, 00:22:54 am
Si, Ya arregle eso, Pero ahora me sale un error de sintaxis en esta linea:
$pass = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE username = ".$password."");

Claro; te falta agregar un ) al final de la cadena, antes del punto y coma.

Un saludo,
Siquillote
Título: Re:[Problema] PHP - Sistem logueo
Publicado por: BobEsponja en 20 de Febrero de 2012, 00:37:10 am
Me sigue diciendo que la pass es incorrecta ve.

logueo:
Código: [Seleccionar]
<?php
session_start
();
include(
"../inc/inc.config.php");
$username mysql_real_escape_string($_POST[&#39;username&#39;]);
$password md5(mysql_real_escape_string($_POST[&#39;password&#39;]));
$pass mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE password = &#39;".$password."&#39;" ));
$user_exist mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE username = &#39;".$username."&#39;"));
if(
$_POST[&#39;username&#39;] == ""){
echo "No has introducido tu nombre de usuario";
}elseif(
$user_exist == "0"){
echo 
"Este usuario no existe";
}elseif(
$_POST[&#39;password&#39;] == ""){
echo "Debes introducir tu contraseña";
}elseif(
$password != $pass[&#39;password&#39;]){
echo "La contraseña es incorrecta";
}else{
$_SESSION[&#39;username&#39;] = $pass[&#39;username&#39;];
header("location: ./");
}
?>
Registro:
Código: [Seleccionar]
<?php
//Incluimos la conexión a la DB
include("../inc/inc.config.php");
//Comprobamos que ningún campo quede vacío
if(isset($_POST[&#39;registro&#39;])){
//Filtramos los POST con la función mysql_real_escape_string() para evitar inyección
$name mysql_real_escape_string($_POST[&#39;name&#39;]);
$username mysql_real_escape_string($_POST[&#39;username&#39;]);
$password mysql_real_escape_string($_POST[&#39;password&#39;]);
$email mysql_real_escape_string($_POST[&#39;email&#39;]);
$fecha mysql_real_escape_string($_POST[&#39;fecha&#39;]);
$sobre_mi mysql_real_escape_string($_POST[&#39;sobre_mi&#39;]);
//Comprobamos que no exista el usuario
$exist_username mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE username = ".$username." "));
$exist_email mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE email = ".$email." "));
if(
$name == ""){
echo 
"El campo &#39;Nombre&#39; no puede quedar vacío";
}elseif(
$exist_username>0){
echo 
"Este usuario ya existe";
}elseif(
$fecha == ""){
echo 
"Fecha invalida";
}elseif(
$password == ""){
echo 
"El campo &#39;Contraseña&#39; no puede quedar vacío";
}elseif(
$email == ""){
echo 
"El campo &#39;Email&#39; no puede quedar vacío";
}elseif(
$fecha == ""){
echo 
"Fecha invalida";
}elseif(
$sobre_mi ==""){
echo 
"Ingrese algo sobre usted";
}else{
//Si todo es correcto procedemos a insertar el usuario en la DB
//Encriptamos la contraseña
$pass md5($password);
mysql_query("INSERT INTO users (name,username,password,email,fecha,sobre_mi) VALUES (".$name.&#39;,&#39;.$username.&#39;,&#39;.$pass.&#39;,&#39;.$email.&#39;,&#39;.$fecha.&#39;,&#39;.$sobre_mi.")");
echo "Haz sido registrado con exito";
header("Location: ./");
}
}
?>
Título: Re:[Problema] PHP - Sistem logueo
Publicado por: DjAlan en 24 de Marzo de 2012, 23:34:24 pm
Me sigue diciendo que la pass es incorrecta ve.

logueo:
Código: [Seleccionar]
<?php
session_start
();
include(
"../inc/inc.config.php");
$username mysql_real_escape_string($_POST[&#39;username&#39;]);
$password md5(mysql_real_escape_string($_POST[&#39;password&#39;]));
$pass mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE password = &#39;".$password."&#39;" ));
$user_exist mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE username = &#39;".$username."&#39;"));
if(
$_POST[&#39;username&#39;] == ""){
echo "No has introducido tu nombre de usuario";
}elseif(
$user_exist == "0"){
echo 
"Este usuario no existe";
}elseif(
$_POST[&#39;password&#39;] == ""){
echo "Debes introducir tu contraseña";
}elseif(
$password != $pass[&#39;password&#39;]){
echo "La contraseña es incorrecta";
}else{
$_SESSION[&#39;username&#39;] = $pass[&#39;username&#39;];
header("location: ./");
}
?>
Registro:
Código: [Seleccionar]
<?php
//Incluimos la conexión a la DB
include("../inc/inc.config.php");
//Comprobamos que ningún campo quede vacío
if(isset($_POST[&#39;registro&#39;])){
//Filtramos los POST con la función mysql_real_escape_string() para evitar inyección
$name mysql_real_escape_string($_POST[&#39;name&#39;]);
$username mysql_real_escape_string($_POST[&#39;username&#39;]);
$password mysql_real_escape_string($_POST[&#39;password&#39;]);
$email mysql_real_escape_string($_POST[&#39;email&#39;]);
$fecha mysql_real_escape_string($_POST[&#39;fecha&#39;]);
$sobre_mi mysql_real_escape_string($_POST[&#39;sobre_mi&#39;]);
//Comprobamos que no exista el usuario
$exist_username mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE username = ".$username." "));
$exist_email mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE email = ".$email." "));
if(
$name == ""){
echo 
"El campo &#39;Nombre&#39; no puede quedar vacío";
}elseif(
$exist_username>0){
echo 
"Este usuario ya existe";
}elseif(
$fecha == ""){
echo 
"Fecha invalida";
}elseif(
$password == ""){
echo 
"El campo &#39;Contraseña&#39; no puede quedar vacío";
}elseif(
$email == ""){
echo 
"El campo &#39;Email&#39; no puede quedar vacío";
}elseif(
$fecha == ""){
echo 
"Fecha invalida";
}elseif(
$sobre_mi ==""){
echo 
"Ingrese algo sobre usted";
}else{
//Si todo es correcto procedemos a insertar el usuario en la DB
//Encriptamos la contraseña
$pass md5($password);
mysql_query("INSERT INTO users (name,username,password,email,fecha,sobre_mi) VALUES (".$name.&#39;,&#39;.$username.&#39;,&#39;.$pass.&#39;,&#39;.$email.&#39;,&#39;.$fecha.&#39;,&#39;.$sobre_mi.")");
echo "Haz sido registrado con exito";
header("Location: ./");
}
}
?>
Claro, en la query del login estás seleccionando todas las contraseñas de la tabla
En todo caso sería:
Código: [Seleccionar]
mysql_query('SELECT `password` FROM `users` WHERE `nick` = \''.$username.'\'');