Moin!
Du bastelst deine SQL-Strings unterschiedlich zusammen!
$sqlin = "INSERT INTO nutzerdaten (nu_login, nu_password) VALUES ('$benutzername', md5('$passwort'))";
$sqlq = "SELECT * FROM nutzerdaten WHERE nu_login = '".$benutzername."' and nu_password = '".md5('$passwort')."'";
Der spannende Teil ist der mit md5.
In $sqlin schreibst du als Feldinhalt
md5('$passwort')
in die Datenbank rein. Es wäre nachzuprüfen, ob das in einem String "md5('daswirklichepasswort')" oder in einem md5-codierten String endet - auch SQL kennt schließlich Funktionen. Ist tendiere zur zweiten Möglichkeit.
In $sqlq aber wird das Passwordfeld tatsächlich aus der md5-Funktion von PHP gespeist. Allerdings wird als Argument immer der String '$passwort') verwendet. Die Ersetzung von $-Variablen in Strings funktioniert nur in doppelten Anführungszeichen! Und außerdem sind Anführungszeichen absolut überflüssig, wenn du eine String-Variable übergeben willst.
Du hast also zwei unterschiedliche Methoden (eine davon sogar grob fehlerhaft), um ein md5-codiertes Passwort herzustellen. Daher ist die simple Lösung des Problems, einfach an beiden Stellen identisch vorzugehen!
Entweder verwendest du die SQL-Funktion md5. Das macht die Sache eigentlich ziemlich einfach zu lesen:
$sqlin = "INSERT ... VALUES ('$benutzername', md5('$passwort'))";
$sqlq = "SELECT ............... nu_password = md5('$password')";
Oder du benutzt die (korrigierte) Variante mit PHPs md5():
$sqlin = "INSERT ... VALUES ('$benutzername', '".md5($passwort)."')";
$sqlq = "SELECT ............... nu_password = '".md5($passwort)."'";
Ich hab, um die Identität bei md5 zu verdeutlichen, die Strings mal passend eingerückt. Es ist grundsätzlich eine gute Idee, bei solchen Dingen Einheitlichkeit zu bewahren. md5 ist zwar ein standardisiertes Verfahren, aber das Ergebnis kann dann doch noch abweichen. Der Apache-Webserver z.B. erlaubt auch md5-codierte Passworte für .htaccess-Schutz. Die sehen aber absolut anders aus als das, was PHP mit md5() ausgibt - vermutlich binär identisch, aber in der Ausgabe anders codiert. Deshalb: md5() ist ein gutes Verfahren, es empfiehlt sich aber nicht, das zu mischen! Ansonsten treten unvorhersehbare Probleme auf.
- Sven Rautenberg
Signatur oder nicht Signatur - das ist hier die Frage!