Ayuda con script login

Iniciado por mokoMonster, 4 Agosto 2010, 01:58 AM

0 Miembros y 1 Visitante están viendo este tema.

mokoMonster

Buenas, según yo este script debe funcionar, pero al comparar los password introducidos por el usuario en el campo password con el password de la base de datos aparece el mensaje de error.

NOTA: El password en la base de datos esta en md5, por lo cual siento que este script debe funcionar porque los dos son iguales.


<?php 
session_start
();
include(
"conex.php");

$link=Conectarse();
$noUsuario=$_POST['noUsuario'];
$password=md5($_POST['password']);

$querymysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario='$noUsuario'",$link) or die(mysql_error());
$data mysql_fetch_array($query);

if (
$noUsuario=='') { 
echo 
'
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF"><br/><br/><br/>'
;
	
//Mensaje de campos vacios.
    
echo "<center><strong>Campos Usuario o Contraseña Incorrectos<br/>Por favor llene correctamente los campos. USER<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
	
	
echo 
'</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
	
exit;
}

elseif ((
$password !='')||($data['password']!=$password)) {
echo 
'
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF"><br/><br/><br/>'
;
    echo 
"<center><strong>Campos Usuario o Contraseña Incorrectos<br/>Por favor llene correctamente los campos. PWD<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
	
	
	
echo 
'</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;

    }else{
    
$query mysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario = '$noUsuario' AND password='$password'",$link) or die(mysql_error());
    
$row mysql_fetch_array($query);

    
$_SESSION['noUsuario'] = $row['noUsuario'];  
	
$_SESSION['password'] = $row['password'];
echo 
'<br/><br/><br/>
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF">'
;
	
echo 
"<center><strong>".$row['noUsuario']."<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
	
echo 
'</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;
}
?>


Bueno, Muchas gracias por su ayuda para localizar el error.
Saludos  ;)
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

#1
You say the password in the database is encryptada MD5, but at the time of the query in PHP, the password is not encryptada.

From MySQL query
Código (sql) [Seleccionar]
SELECT noUsuario, password
 FROM Usuarios
WHERE ((noUsuario = 'ALEX') AND (password = MD5('ALEX')));


From PHP
Código (php) [Seleccionar]

$noUsuario = 'ALEX';
$password = 'ALEX';
$password = MD5($password);
$query = mysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario = '".$noUsuario."' AND password='".$password."'",$link) or die(mysql_error());
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mokoMonster

Bueno de hecho la contraseña esta guardada desde el registro en MD5, es decir, cuando el usuario mete el pass este se cifra guardando el valor cifrado en la tabla, por lo que $password=MD5($_POST['password']); deberia ser igual al campo de la tabla.

Hice algunos cambios de acuerdo a tu respuesta, pero sigue dandome el error.

<?php 
session_start
();
include(
"conex.php");

$link=Conectarse();
$noUsuario=$_POST['noUsuario'];
// Cambio
$password=$_POST['password'];
$password=md5($password);
// Cambio
$query mysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario = '".$noUsuario."' AND password='".$password."'",$link) or die(mysql_error());
$data mysql_fetch_array($query);

if (
$noUsuario=='') { 
echo 
'
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF"><br/><br/><br/>'
;
	
//Mensaje de campos vacios.
    
echo "<center><strong>Campos Usuario o Contraseña Incorrectos<br/>Por favor llene correctamente los campos. USER<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
	
	
echo 
'</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
	
exit;
}

elseif ((
$password !='')||($data['password']!=$password)) {
echo 
'
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF"><br/><br/><br/>'
;
    echo 
"<center><strong>Campos Usuario o Contraseña Incorrectos<br/>Por favor llene correctamente los campos. PWD<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
	
	
	
echo 
'</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;

    }else{
// Cambio
    
$query mysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario = '".$noUsuario."' AND password='".$password."'",$link) or die(mysql_error());
    
$row mysql_fetch_array($query);
    
$_SESSION['noUsuario'] = $row['noUsuario'];  
	
$_SESSION['password'] = $row['password'];
echo 
'<br/><br/><br/>
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF">'
;
	
echo 
"<center><strong>".$row['noUsuario']."<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
	
echo 
'</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;
}
?>



Saludos
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

Ok, ok, sorry did not see it. Attempts to display the query and verify it within the MySQL console. For example:
Código (php) [Seleccionar]
echo "SELECT noUsuario, password FROM Usuarios WHERE noUsuario = '".$noUsuario."' AND password='".$password."'";
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mokoMonster

Ok, mira hice un echo como lo pusiste en el script php (porque no entiendo por que debo ejecutar el script php en la consola MySQL) y me devolvio esto:

SELECT noUsuario, password FROM Usuarios WHERE noUsuario = 'mokomonster' AND password='e274672404ejemplo70b40651792'

Y como no estaba seguro de lo que querias con el echo, tambien hice un echo $query; y me devolvio esto:

Resource id #7...
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

mokoMonster

#5
SELECT *
FROM  `Usuarios`
WHERE noUsuario =  'mokomonster'
AND PASSWORD =  'e274672404eejemplo97d70b40651792'
LIMIT 0 , 30


Ejecute esta sentencia en la consola MySql y si me devolvio la fila del registro.

De verdad no entiendo que es lo que esta mal, saludos.


Tambien hice esta

SELECT *
FROM  `Usuarios`
WHERE (

PASSWORD = MD5(  'palabrasecreta' )
)
LIMIT 0 , 30
y me devolvio la fila :) entonces aun peor, no ntiendo que eesta mal
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

MinusFour

#6
Y donde es que te atoras?

Código (php) [Seleccionar]

<?php 
session_start
();
include(
"conex.php");

$link=Conectarse();
$noUsuario=$_POST['noUsuario'];
$password=md5($_POST['password']);
$query mysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario = '".$noUsuario."' AND password='".$password."'",$link) or die(mysql_error());

$data mysql_fetch_array($query);

if (empty(
$noUsuario)) { 
echo 
'
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF"><br/><br/><br/>'
;
//Mensaje de campos vacios.
    
echo "<center><strong>Campos Usuario o Contrase&#241;a Incorrectos<br/>Por favor llene correctamente los campos. USER<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
echo '</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;
}

elseif (empty(
$password) || ($data['password']!=$password)) {
echo 
'
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF"><br/><br/><br/>'
;
    echo 
"<center><strong>Campos Usuario o Contrase&#241;a Incorrectos<br/>Por favor llene correctamente los campos. PWD<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
echo '</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;

    }else{
// Cambio
    
$query mysql_query("SELECT noUsuario,password FROM Usuarios WHERE noUsuario = '".$noUsuario."' AND password='".$password."'",$link) or die(mysql_error());

    
$row mysql_fetch_array($query);
    
$_SESSION['noUsuario'] = $row['noUsuario'];  
$_SESSION['password'] = $row['password'];
echo 
'<br/><br/><br/>
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#FFF">'
;
echo "<center><strong>".$row['noUsuario']."<br/><a href='javascript:history.go(-1)'> Atras</a></strong></center>";
echo '</td>
  </tr>
</table><br/><br/><br/>'
;
mysql_close($query);
exit;
}
?>


Hice solo un par de cambios... pero sería buena idea de que mostrarás hacia donde se mueve el código a la hora de ejecutarse para ver en que condición cae.

Edit: Tengo la ligera sospecha de que cae en el elseif... lo cual significa que o la password esta vacía o que no concuerdan las passwords.

Imprime las dos variables para ver si son las mismas

Código (php) [Seleccionar]

echo "<h1>".$data['password']." != ".$password."</h1>";

mokoMonster

Perfecto, ahora funciona, en realidad no se que estaba mal, supongo que el $value='';, pero bueno ahora funciona, me da error al cerrar la conexion con mysql_close($query); , pero eso ya lo resovlere. Muchas garcias.
Saludos.
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Dznp

Es obvio que eso te va a dar error, ya que no podes cerrar la conexión de una consulta :B

Proba mysql_close($link);    ;)