2009-07-22 7 views
-1

Ich versuche zu sehen, ob ein Benutzer, der sich anmeldet, das richtige Passwort eingegeben hat, das als md5-Hash gespeichert wird. Wenn ich den Hash des eingegebenen Passworts ausspreche, stimmt es genau mit dem Hash des in der Datenbank eingegebenen Passworts überein, aber es ist immer noch falsch. Heres der Code:Warum würde PHP sagen, dass zwei gleiche Dinge ungleich sind?

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

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

    ... 

} else { 

    ... 

} 

es versucht, den anderen Code auszuführen oben^

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

Ich nehme an, die '$ u_reuslt' Variable ist nur ein Tippfehler ...? – deceze

+0

@deceze: Ich vermute, Sie haben den Fehler gefunden. Ich hoffe, das Poster kennt Copy/Paste! – derobert

+1

Ja, ich glaube, sie haben es getan. Wenn du das als Antwort posten könntest, akzeptiere ich es. –

Antwort

5

Sie typoed Ihre Variablen, siehe oben kommentieren.

E_ALL ist dein Freund. ; o)

1

das Passwort-Feld in der DB prüfen - wenn die MD5-Passwort richtig einsetzen, kann es geschnitten werden, weil es nicht der Fall ist habe genug Länge.

Zweitens, welche Art von Spalte ist password? Es sollte ein tinyblob oder BINARY(32) sein, da die Ergebnisse eines MD5-Hashes verstümmelt werden können, wenn sie in einem Varchar gespeichert werden.

Links:

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

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

Verwandte Themen