gelöst Verändert ein SQL Befehl einen MD5 Wert bzw. kuriosum im MD5 Vergleich!
FunkerVogt (Level 1) - Jetzt verbinden
21.10.2011, aktualisiert 22.10.2011, 4074 Aufrufe, 3 Kommentare
Hallo Ihr PHP-Gurus!
Seit 3 Tagen sitz ich jetzt an einem, ich denke mal später
dann sehr trivialen, Problem.
Situation:
Ich hab eine HTML mit Login Nutzer und Passwort, deren Inhalte ich per Post an eine
.php übergebe.
HTML:
Im php Script, wird das Passwort in einen MD5 Wert verändert.
Dann sollte dieser MD5-Wert mit einem vorhandenen MD5-Wert aus der
MySQL DB verglichen werden! Macht er auch
aber:
Der Vergleich sagt immer: <> (ungleich) Bis auf in einem
Fall! Wenn ich ein bestimmtes Kennwort in alle User in der DB eintrage,
dann geht es kurioser Weise! Ich bin irgendwie ratlos!
Das .php Script:
Kann doch eigentlich nicht an der DB liegen, wenn es mit einem bestimmten Passwort geht! Oder?
[Edit Biber] Code formatiert. [/Edit]
Ich hab eine HTML mit Login Nutzer und Passwort, deren Inhalte ich per Post an eine
.php übergebe.
HTML:
01.
<div style="position:absolute; bottom:5px; left:90px; font-size: 100%; color:#FFFFFF; font-family: AmericanText BT, Comic, cursive, Arial">
02.
<form action="HSRV2.php" method="POST" >
03.
<p>N i c k n a m e:<br /><input name="Name" type="text" size="30" maxlength="30" style="font-family: AmericanText BT" />
04.
<p>P a s s w o r t:<br /><input name="Pass" type="Password" size="30" maxlength="30" style="font-family: AmericanText BT" />
05.
<p><input type="submit" value="L o g I n" style="font-family: AmericanText BT, Comic, cursive, Arial"/></p>
06.
</div>
Dann sollte dieser MD5-Wert mit einem vorhandenen MD5-Wert aus der
MySQL DB verglichen werden! Macht er auch
aber:
Der Vergleich sagt immer: <> (ungleich) Bis auf in einem
Fall! Wenn ich ein bestimmtes Kennwort in alle User in der DB eintrage,
dann geht es kurioser Weise! Ich bin irgendwie ratlos!
Das .php Script:
01.
<?php
02.
// Kontakt Datenbank
03.
$DBverb = mysql_connect("127.0.0.1","Hilfe","MD5MD5MD5") or die ("Log In momentan nicht möglich, wir arbeiten daran!");
04.
mysql_select_db("hsrv", $DBverb);
05.
06.
$password = $_POST['Pass'];
07.
$name = $_POST['Name'];
08.
09.
$ergebnis = mysql_query("SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'");
10.
11.
if ($ergebnis == md5($_POST['Pass']))
12.
{
13.
echo '<script language ="JavaScript">
14.
<!--
15.
document.location.href="HSRV2.html";
16.
// -->
17.
</script>';
18.
}
19.
else {
20.
echo '<script language ="JavaScript">
21.
<!--
22.
document.location.href="false.html";
23.
// -->
24.
</script>';
25.
}
26.
?>
[Edit Biber] Code formatiert. [/Edit]
3 Antworten
- LÖSUNG Arano schreibt am 21.10.2011 um 15:49:12 Uhr
- LÖSUNG FunkerVogt schreibt am 21.10.2011 um 17:33:42 Uhr
- LÖSUNG Arano schreibt am 22.10.2011 um 12:13:46 Uhr
- LÖSUNG FunkerVogt schreibt am 21.10.2011 um 17:33:42 Uhr
LÖSUNG 21.10.2011 um 15:49 Uhr
Hallo FunkerVogt,
Bitte verwende doch die <code>-Tags aus der Formatierungshilfe (roter Link über dem Eingabefeld)
Schau doch noch einmal im PHP-Manual - mysql_query() nach.
Tipp:
Ruhig während des Programmierens mal ein paar Variablen per echo ausgeben lassen und deren Inhalt kontrollieren.
siehe dazu im Manual auch nach den beiden Funktionen print_r() und var_dump()
Und weil du gerade im Manual unterwegs bist, schau auch gleich noch einmal nach header(), das funktioniert auch wen der Besucher Javascript deaktiviert hat ;)
~Arano
Edit:
Da sehe ich gerade noch ein kleinen Tipp.
Dein Query solltest du noch um einem LIMIT 1 ergänzen, dann braucht die Datenbank nicht noch alle Einträge __nach dem Treffer__ kontrollieren die weiss ja nicht, das es nur einen Benutzer mit dem Namen geben kann.
weiter Edit...
Du kannst auch der Datenbank den Passwort-/MD5-Vergleich überlassen, dann brauchst du in PHP nur noch auswerten ob es einen Treffer gab oder nicht.
Bitte verwende doch die <code>-Tags aus der Formatierungshilfe (roter Link über dem Eingabefeld)
$ergebnis = mysql_query("SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'");
if ($ergebnis == md5($_POST['Pass']))
Hier liegt dein Hund begraben, mysql_query() liefert etwas anders zurück als du erwartest !if ($ergebnis == md5($_POST['Pass']))
Schau doch noch einmal im PHP-Manual - mysql_query() nach.
Tipp:
Ruhig während des Programmierens mal ein paar Variablen per echo ausgeben lassen und deren Inhalt kontrollieren.
siehe dazu im Manual auch nach den beiden Funktionen print_r() und var_dump()
Und weil du gerade im Manual unterwegs bist, schau auch gleich noch einmal nach header(), das funktioniert auch wen der Besucher Javascript deaktiviert hat ;)
~Arano
Edit:
Da sehe ich gerade noch ein kleinen Tipp.
Dein Query solltest du noch um einem LIMIT 1 ergänzen, dann braucht die Datenbank nicht noch alle Einträge __nach dem Treffer__ kontrollieren die weiss ja nicht, das es nur einen Benutzer mit dem Namen geben kann.
weiter Edit...
Du kannst auch der Datenbank den Passwort-/MD5-Vergleich überlassen, dann brauchst du in PHP nur noch auswerten ob es einen Treffer gab oder nicht.
LÖSUNG 21.10.2011 um 17:33 Uhr
Danke für die Tips, nehm ich mir zu Herzen!
Die Lösung:
Formatierung hier im Forum auch gleich gelernt!
Vielen Dank!
Die Lösung:
$ergebnis = mysql_query("SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'");
$row = mysql_fetch_row($ergebnis);
$ergebnisRes = ($row[0]);
$row = mysql_fetch_row($ergebnis);
$ergebnisRes = ($row[0]);
if ($ergebnisRes == md5($password))
Formatierung hier im Forum auch gleich gelernt!
Vielen Dank!
LÖSUNG 22.10.2011 um 12:13 Uhr
Moin moin,
hat ja super geklappt !
Für Variablen sollten Namen gewählt werden, von denen man auf den Inhalt schließen kann.
Und als weitere Tipps:
Schönes Wochenende
~Arano
hat ja super geklappt !
if ($ergebnisRes == md5($password))
Wie du das jetzt vielleicht selber siehst, ist dieser Bedingung nicht gleich anzusehen was sie überhaupt vergleicht. Jetzt weisst du das noch, aber später kann es ganz schön schwer sein, den eigentlichen Sinn dahinter wieder zu erkennen. (oder dritte Personen z.B. in Foren)Für Variablen sollten Namen gewählt werden, von denen man auf den Inhalt schließen kann.
01.
<?php
02.
$strQuerySelectUser = "SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'";
03.
$resSelectUser = mysql_query($strQuerySelectUser);
04.
05.
// und dann
06.
07.
$arrUser = mysql_fetch_row($resSelectUser);
08.
$strMD5Pass = $arrUser[0];
09.
if ($strMD5Pass == md5($password))
10.
11.
// oder
12.
13.
$arrUser = mysql_fetch_assoc($resSelectUser);
14.
if ($arrUser['Passwort'] == md5($password))
15.
?>
- Was wenn die Anfrage doch nicht an den Server gesendet werden kann mysql_query() (z.B. Weil der Server nicht mehr erreichbar ist, oder die Tabelle Fehler aufweist, ...) PHP-Manual - is_ressource()
- Was wenn es den User __nicht gibt__ und so nur eine leere Ergebnistabelle als Ressourcenkennung zurückgegeben wird ? (z.B. Ein Tippfehler beim Benutzernamen) PHP-Manual - mysql_num_rows()
Schönes Wochenende
~Arano
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte