Foros del Web » Programando para Internet » PHP »

Validando contraseña, no funciona

Estas en el tema de Validando contraseña, no funciona en el foro de PHP en Foros del Web. Hola amigos tengo este código que valída una contraseña en mi base de datos pero cuando las comparo me da siempre como invalida. Código PHP: ...
  #1 (permalink)  
Antiguo 23/06/2004, 09:43
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Validando contraseña, no funciona

Hola amigos tengo este código que valída una contraseña en mi base de datos
pero cuando las comparo me da siempre como invalida.
Código PHP:
$sql ="SELECT pass FROM dr_anuncio WHERE id='".mysql_escape_string($_POST['id'])."'";
    
$res mysql_query($sql) or die (mysql_error());
        
    if (! (
md5 ($password) == $row['pass'])){
        die (
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
            <tr>
                <td class=\"perfil_rotulo\">Contraseña invalida puesta: $password guardada: $row['pass']</td>
            </tr>
            <tr>
                <td class=\"perfil_texto\"><A class=\"negro\" HREF=\"#back\" OnClick=\"volver()\">[Volver atras]</a></td>
            </tr>
        </table>"
);
    } 
Gracias
__________________
Seguro que ahora me sale mejor!

Última edición por benti; 23/06/2004 a las 09:45 Razón: Ortografia
  #2 (permalink)  
Antiguo 23/06/2004, 09:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si usas MD5() .. se supone que tu contraseña la guardas en tu BD en formato encriptado MD5().. no?

Haz una pequeña comprobación .. haz un echo a tu $password y a tu $row['pass'] ahí mismo (antes de tu if()) y observa si son iguales.

por cierto .. si ya usas los arrays superglobales para tu $_POST['id'] .. usalos también para el $password: $_POST['password'] (no sé si será ese el método que usas en tu formulario/link para hacer llegar esa variable a ese scritp PHP).

Un saludo,

Última edición por Cluster; 23/06/2004 a las 09:51
  #3 (permalink)  
Antiguo 23/06/2004, 10:10
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Gracias, perdona por no haber puesto el codigo completo esta todo enviado por POST y la contraseña en la base de datos esta codficada, lo he cambiado asi:
Código PHP:
echo "mi contraseña ".$_POST['password']." y la de la base de datos: ".$row['$pass'].""
pero la de la base de datos no aparece :(
__________________
Seguro que ahora me sale mejor!

Última edición por benti; 23/06/2004 a las 10:18
  #4 (permalink)  
Antiguo 23/06/2004, 10:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te faltó un gran detallazo!:

Código PHP:
$sql ="SELECT pass FROM dr_anuncio WHERE id='".mysql_escape_string($_POST['id'])."'"
    
$res mysql_query($sql) or die (mysql_error()); 

    
// te faltó obtener tu "resultado" en un array (como pretendes usarlo)
    
$row=mysql_fetch_array($res);         
    if (! (
md5 ($password) == $row['pass'])){ 
Pero .. si ese "ID" es único (sólo va arrojar o uno o 0 registros ..) puedes usar en lugar del mysql_fetch_array() ... mysql_result():

Código PHP:
$pass_db=mysql_result($res,0);
if (
md5 ($password) != $pass_db){ 
Y .. la negación que usas en ! (....=....) puedes hacerla com el ejemplo que ves ..

Un saludo,
  #5 (permalink)  
Antiguo 23/06/2004, 10:39
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Lo tenia puesto
Código PHP:
    $sql ="SELECT pass FROM dr_anuncio WHERE id='".mysql_escape_string($_POST['id'])."'";
    
$res mysql_query($sql) or die (mysql_error());
    
    if (
$row =mysql_fetch_array ($res)){
    
        echo 
"El ID enviado es: ".$_POST['id']." mi contraseña ".$_POST['password']." y la de la base de datos: ".$row['$pass'].""
me explico esto es un fomulario que se envia a si mismo, el ID unico y la contraseña, entoces toda la validacion funciona excepto cuando las compara. te pongo el codigo de la validacion .
Código PHP:
//Verificamos si se ha enviado el $id

if (isset($_POST['Submit'])){
// verificamos el si hay ID
if (empty ($id)){
die (
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td class=\"perfil_rotulo\">Has de indicar el nº de anuncio</td>
</tr>
<tr>
<td class=\"perfil_texto\"><A class=\"negro\" HREF=\"#back\" OnClick=\"volver()\">[Volver atras]</a></td>
</tr>
</table>"
);

// Si no hay contraseña
if (empty ($password)){
die (
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td class=\"perfil_rotulo\">Has de insertar tu contraseña</td>
</tr>
<tr>
<td class=\"perfil_texto\"><A class=\"negro\" HREF=\"#back\" OnClick=\"volver()\">[Volver atras]</a></td>
</tr>
</table>"
);
}

//vemos que la contraseña sea de 5 ó mayor de 5 caracteres
if (strlen ($password) < 5){
die (
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td class=\"perfil_rotulo\">Contraseña no valida</td>
</tr>
<tr>
<td class=\"perfil_texto\"><A class=\"negro\" HREF=\"#back\" OnClick=\"volver()\">[Volver atras]</a></td>
</tr>
</table>"
);
}
// Como todo esto parece estar bien comprovamso la contraseña
//Conexiones y funciones 
include ("includes/config.php"); 

// sacamos la contraseña guardada
$sql ="SELECT pass FROM dr_anuncio WHERE id='".mysql_escape_string($_POST['id'])."'";
$res mysql_query($sql) or die (mysql_error());

if (
$row =mysql_fetch_array ($res)){

echo 
"El ID enviado es: ".$_POST['id']." mi contraseña ".$_POST['password']." y la de la base de datos: ".$row['$pass']."";
if (! (
md5 ($_POST['password']) == $row['pass'])){
die (
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td class=\"perfil_rotulo\">Contraseña invalida</td>
</tr>
<tr>
<td class=\"perfil_texto\"><A class=\"negro\" HREF=\"#back\" OnClick=\"volver()\">[Volver atras]</a></td>
</tr>
</table>"
);
}
}else{
die (
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td class=\"perfil_rotulo\">Nº de anuncio o contraseña invalidos</td>
</tr>
<tr>
<td class=\"perfil_texto\"><A class=\"negro\" HREF=\"#back\" OnClick=\"volver()\">[Volver atras]</a></td>
</tr>
</table>"
);
}
/* Si llegamos a ki todo esta ok
Iniciamos la sesion */

session_name();
session_start();
session_register("id");
session_encode();
$url="users.php?PHPSESSID=".$PHPSESSID;
header ($url);

__________________
Seguro que ahora me sale mejor!
  #6 (permalink)  
Antiguo 23/06/2004, 11:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El $ de 'pass' en $row['$pass'] no corresponde:

Código PHP:
echo "El ID enviado es: ".$_POST['id']." mi contraseña ".$_POST['password']." y la de la base de datos: ".$row['pass'].""
Por algunos sitios de tu código usas $_POST['id'] (lo cual es correcto) .. en otros usas el acceso "global": $id (o $password) ..

Decidete por un método o por otro . .por qué en general estás mezclando dos técnicas que dependiendo del estado por ejemplo de (php.ini) register_globals se puede comportar de una formo u otra tus aplicacioens.

El uso de sesiones que haces tampoco es del todo ideal (si usas PHP 4.1.0 en adelante). Y tiene sus fallos:

Código PHP:
// session_name(); // no corresponde si no defines un nombre!!
session_start(); 
session_register("id");  // si usas PHP 4.1.0 usa los arrays: $_SESSION['id'] para darle el valor cuando lo obtengas ..
session_encode(); // ¿Para que lo usas?
// $url="users.php?PHPSESSID=".$PHPSESSID; 
// SID es la constante que te devuelve el nombre de tu sesión activa y el ID de sesión . .PHPSESSID es el nombre que dá PHP por defecto a una sesión (pero puede no ser ese). Si es que quieres propagar el SID a mano por el URL.
$url="users.php?".SID;
header ($url); 


Un saludo,
  #7 (permalink)  
Antiguo 23/06/2004, 14:21
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Seguire tus consejos, ya esta solucionado, cuando metia la contraseña estaba mal :$pass_md5 = md5 (".$_POST ['pass']."); y lo he dejado asi $pass_md5 = md5 ($_POST ['pass']); y ahora funciona, pero tengo errores con las sesiones voy a repasar ys i fallan otra vez pues lo consulto, gracias ;)
__________________
Seguro que ahora me sale mejor!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:19.