Probleme beim Auslesen/Vergleichen eines MD5-Hash

Hallo,
ich versuche, im folgenden Script ein Datenbankpasswort, das mit md5 verschlüsselt wurde, mit dem eingegebenen Passwort zu vergleichen. Leider wird immer die else Bedingung ausgeführt. Ich habe aber keine Ahnung warum. md5($prepass) sollte das eingegebene passwort in den md5-Hash umwandeln. Es geht aber aus irgendwelchen Gründen nicht.

Der Code:

$name = $\_POST['name'];
$prepass = $\_POST['pass'];
$dbuser = mysql\_query("SELECT username, passwort, rights FROM users WHERE username LIKE '$name'") or die($query.' Fehlermeldung der DB: '.mysql\_error());
while ($result = mysql\_fetch\_object($dbuser))
{
$dbname = $result-\>username;
$dbpass = $result-\>passwort;
}
$pass = md5($prepass) ;
if (($name == $dbname) AND ($pass == $dbpass))
{

setcookie("name", "$name");
setcookie("pass", "$pass");
header("Location: index.php");

}

else
{
header("Location: login.php?id=2");
}

Hallo Portfavor,

warum benutzt du LIKE ? Macht das nicht erst sinn wenn du platzhalter verwenden möchtest, was bei einem login wohl zutiefst unsinnig wäre?

Hast du dir die abfrage schon einmal umgebaut um zu sehen welchen wert die variablen haben?

so würde ich für die Fehlersuche die AND abfrage aufspalten da du so nicht genau weisst ob es am usernamen oder am passwort liegt. Zudem würde ich mir beides vorher ausgeben lassen damit du weisst was mit was verglichen wird.

Falls bei der ausgabe trotzdem alles gleich ist könnte es evtl. noch am Charset liegen, falls eins vom beiden UTF8 ist und das andere nicht kann das durch aus zu verschiedenen MD5 hashes führen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke, aber das kannst du die sparen. Die Abfrage an sich hat ja spitze funktioniert. Wenn ich das ganze ohne md5-hash mache. Es muss daran liegen. Am Charset? In der DB ist latin_general…problematisch?

Danke, aber das kannst du die sparen.

Was kann ich mir sparen? Dir zu helfen?

In der DB ist latin_general…problematisch?

Wenn die Eingabe in UTF8 verwendet, ja.

Nein nein, sorry, so meinte ich das nicht.
Nur dass du dort nicht weiter ansetzen musst. Ich schätze jede Hilfe:wink:

Woher weiß ich denn, in was die Eingabe passiert? Die Kodierung der Datei?

Es gibt leider viele unterschiedliche stellen an denen was mit dem Charset schief gehen kann.

Aber in dem Fall, sofern es denn der Fehler ist, könnte man von der codierung der seite ausgehen.

in fast allen Browsern kann man unter „ansicht“ -> „zeichenkodierung“ einstellen was zu benutzen ist, unabhängig was die seite einem vorgibt.

Dort könntest du schon einmal schauen was als standard genommen ist, und dann rumprobieren ob es bei anderen charset funktioniert oder der gleiche fehler auftritt.

Also an der Zeichenkodierung im Browser kann es nicht liegen, habe alle ausprobiert. Für die Datei login.php zeigt notepad++ ASCII an, Standard eben.

Ok war mein eigener Fehler. Hatte das Feld in der DB begrenzt. Geht nun!

Danke