2009-07-22 4 views
-1

J'essaye de voir si un utilisateur se connectant a entré le bon mot de passe, qui est stocké comme un hachage md5. quand je fais écho au hash du mot de passe saisi, il correspond exactement au hash de celui de la base de données, mais il pense toujours qu'il est faux. Heres le code:Pourquoi php dirait que deux choses égales sont inégales?

echo md5($_POST['pass']); 

if ($user->match_password($_POST['pass']) == true) { 

    ... 

} else { 

    ... 

} 

il tente d'exécuter le code else ci-dessus^

class user { 

    ... 

    var $password; 

    ... 

    function user($id) { 
     global $DB; 
     $this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']); 

     $this->user_id = $id; 
     $u_result = $this->db->run("select * from users where use_id = " . $this->db->escape($this->user_id)); 

     ... 

     $this->password = $u_reuslt[0]['password']; 

      ... 
    } 

     ... 

    function match_password($password) { 
     return ($this->password == md5($password)); 
    } 
} 
+4

Je suppose que la variable '$ u_reuslt' est juste une faute de frappe ...? – deceze

+0

@deceze: Je suppose que vous avez trouvé le bug. J'espère que l'affiche sait de copier/coller! – derobert

+1

oui je crois qu'ils l'ont fait. Si vous pouviez publier cette réponse, je l'accepterais. –

Répondre

5

Vous typoed vos variables, voir le commentaire ci-dessus.

E_ALL est votre ami. ; o)

1

Vérifiez le champ de mot de passe dans le DB - si le mot de passe MD5 insérer correctement, il peut être coupé parce qu'il ne avoir assez de longueur.

Deuxièmement, quel type de colonne est password? Ce devrait être un tinyblob ou BINARY(32), parce que les résultats d'un hachage MD5 peuvent être mutilés s'ils sont stockés dans un varchar.

Liens:

http://www.experts-exchange.com/Web/Web_Languages/PHP/Q_21578660.html

http://forums.mysql.com/read.php?30,16535,16617#msg-16617

Questions connexes