Comunidad PHPeros
Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado 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:
<?php
session_start();
include("../inc/inc.config.php");
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
$pass = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE username = '$username'"));
$user_exist = mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '$username'"));
if($_POST['username'] == ""){
echo "No has introducido tu nombre de usuario";
}elseif($user_exist == "0"){
echo "Este usuario no existe";
}elseif($_POST['password'] == ""){
echo "Debes introducir tu contraseña";
}elseif($password != $pass['password']){
echo "La contraseña es incorrecta";
}else{
$_SESSION['username'] = $pass['username'];
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
-
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.
-
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."");
-
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
-
Me sigue diciendo que la pass es incorrecta ve.
logueo:
<?php
session_start();
include("../inc/inc.config.php");
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
$pass = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE password = '".$password."'" ));
$user_exist = mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE username = '".$username."'"));
if($_POST['username'] == ""){
echo "No has introducido tu nombre de usuario";
}elseif($user_exist == "0"){
echo "Este usuario no existe";
}elseif($_POST['password'] == ""){
echo "Debes introducir tu contraseña";
}elseif($password != $pass['password']){
echo "La contraseña es incorrecta";
}else{
$_SESSION['username'] = $pass['username'];
header("location: ./");
}
?>
Registro:
<?php
//Incluimos la conexión a la DB
include("../inc/inc.config.php");
//Comprobamos que ningún campo quede vacío
if(isset($_POST['registro'])){
//Filtramos los POST con la función mysql_real_escape_string() para evitar inyección
$name = mysql_real_escape_string($_POST['name']);
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$fecha = mysql_real_escape_string($_POST['fecha']);
$sobre_mi = mysql_real_escape_string($_POST['sobre_mi']);
//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 'Nombre' no puede quedar vacío";
}elseif($exist_username>0){
echo "Este usuario ya existe";
}elseif($fecha == ""){
echo "Fecha invalida";
}elseif($password == ""){
echo "El campo 'Contraseña' no puede quedar vacío";
}elseif($email == ""){
echo "El campo 'Email' 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.','.$username.','.$pass.','.$email.','.$fecha.','.$sobre_mi.")");
echo "Haz sido registrado con exito";
header("Location: ./");
}
}
?>
-
Me sigue diciendo que la pass es incorrecta ve.
logueo:
<?php
session_start();
include("../inc/inc.config.php");
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
$pass = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE password = '".$password."'" ));
$user_exist = mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE username = '".$username."'"));
if($_POST['username'] == ""){
echo "No has introducido tu nombre de usuario";
}elseif($user_exist == "0"){
echo "Este usuario no existe";
}elseif($_POST['password'] == ""){
echo "Debes introducir tu contraseña";
}elseif($password != $pass['password']){
echo "La contraseña es incorrecta";
}else{
$_SESSION['username'] = $pass['username'];
header("location: ./");
}
?>
Registro:
<?php
//Incluimos la conexión a la DB
include("../inc/inc.config.php");
//Comprobamos que ningún campo quede vacío
if(isset($_POST['registro'])){
//Filtramos los POST con la función mysql_real_escape_string() para evitar inyección
$name = mysql_real_escape_string($_POST['name']);
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$fecha = mysql_real_escape_string($_POST['fecha']);
$sobre_mi = mysql_real_escape_string($_POST['sobre_mi']);
//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 'Nombre' no puede quedar vacío";
}elseif($exist_username>0){
echo "Este usuario ya existe";
}elseif($fecha == ""){
echo "Fecha invalida";
}elseif($password == ""){
echo "El campo 'Contraseña' no puede quedar vacío";
}elseif($email == ""){
echo "El campo 'Email' 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.','.$username.','.$pass.','.$email.','.$fecha.','.$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:
mysql_query('SELECT `password` FROM `users` WHERE `nick` = \''.$username.'\'');