/MySQL - Warum kein Ergebnis?
Ben
- php
Mahlzeit,
seit heute morgen kann ich mich aus unerklärlichen Gründen nicht mehr in meine eigene Community einloggen, weil anscheinend kein Eintrag mehr in der DB gefunden werden kann. Der entsprechende Eintrag mit meinem Usernamen und dem Passwort ist aber noch vorhanden und auch die DB ist da. Ich bin kurz vor dem Verzweifeln... Habt ihr eine Idee, wo sich in folgendem Code ein Fehler verbirgt?
<?php
include("mysql.php");
if(!$_GET['logout'])
{
// Userdaten werden anhand des eingegebenen Benutzernamens und des dazugehörigen Passwortes (md5-verschlüsselt) aus der DB gezogen
$connect = mysql_query("SELECT * FROM user WHERE LCASE(user_nick) = LCASE('$name1') AND user_pass = '". md5($pw1) ."'");
echo mysql_num_rows($connect);
if(mysql_num_rows($connect) == "1")
{
// Variablen für die Session und für das User-Online-Script werden gesetzt
$row = mysql_fetch_array($connect);
$userid = $row['user_id'];
$rang = $row['user_type'];
$zeit = time();
$nick = $row['user_nick'];
$sth = mysql_query("SELECT * FROM user_profile WHERE user_id = '$userid'");
$ergebnis = mysql_fetch_array($sth);
$geschlecht = $ergebnis['user_sex'];
$zeit_neu = $zeit - 600;
$ip = $REMOTE_ADDR;
$id = session_id();
// Name, Passwort, ID, Rang und Geschlecht des Users werden in der Session gespeichert
session_register("name1");
session_register("pw1");
session_register("userid");
session_register("rang");
session_register("geschlecht");
// Wenn der User nicht in der Online-Tabelle eingetragen ist, werden die Daten hier eingefügt
$online = mysql_query("SELECT * FROM user_online WHERE act_ip = '$ip' AND user_id = '$userid'");
if(mysql_num_rows($online) == "0")
{
mysql_query("INSERT INTO user_online (id, user_id, user_sex, user_name, session_id, session_stamp, act_ip) VALUES ('', '$userid', '$geschlecht', '$name1', '$id', '$zeit', '$ip')");
}
// ist der User bereits als online eingetragen, wird der timestamp aktualisiert
else
{
mysql_query("UPDATE user_online SET session_stamp = $zeit WHERE user_name = '$name1'");
}
// User aus der Online-DB löschen, bei denen 10 minuten keine Aktivität stattgefunden hat
mysql_query("DELETE FROM user_online WHERE session_stamp < $zeit_neu");
}
}
// Wenn der Logout gesetzt wurde, wird der User auf die Seite logout.php weitergeleitet und aus der online-Tabelle entfernt
else
{
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?page=logout");
session_destroy();
mysql_query("DELETE FROM user_online WHERE user_id = '$userid'");
}
?>
Danke und viele Grüße
Ben
Hello,
<?php
include("mysql.php");
if(!$_GET['logout'])
{
// Userdaten werden anhand des eingegebenen Benutzernamens und des dazugehörigen Passwortes (md5-verschlüsselt) aus der DB gezogen
$connect = mysql_query("SELECT * FROM user WHERE LCASE(user_nick) = LCASE('$name1') AND user_pass = '". md5($pw1) ."'");
if (mysql_errno() > 0) echo "<p>MySQL-Fehler ".mysql_errno().": ".mysql_error()".</p>\n";
echo mysql_num_rows($connect);
if(mysql_num_rows($connect) == "1")
Hast Du mal die Abfrage überprüft?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Tom,
if (mysql_errno() > 0) echo "<p>MySQL-Fehler ".mysql_errno().": ".mysql_error()".</p>\n";
Nichts passiert...
echo mysql_num_rows($connect);
if(mysql_num_rows($connect) == "1")Hast Du mal die Abfrage überprüft?
Ja, mysql_num_rows($connect) gibt 0
Ich bin ratlos...
Gruß
Ben
yo,
wenn die datenbank und der datensatz da ist, würde ich mal auf die variablen $name1 & $pw1 tippen, dass sie nicht mit dem gesuchten datensatz übereinstimmen. lass sie doch mal mit der gesamten query ausgeben und achte auf leerzeichen.
Ilja
Hello,
wenn die datenbank und der datensatz da ist, würde ich mal auf die variablen $name1 & $pw1 tippen, dass sie nicht mit dem gesuchten datensatz übereinstimmen. lass sie doch mal mit der gesamten query ausgeben und achte auf leerzeichen.
Da es ja keine MySQL-Fehlermeldung gibt würde ich mal auf eine Versionsumstellung tippen, wenn die Daten noch konsistent sind. Könnte natürlich auch sein, dass da jemand gefummelt hat, aber das traue ich Ben schon zu, dass er das überprüft hat. ;-))
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Da es ja keine MySQL-Fehlermeldung gibt würde ich mal auf eine Versionsumstellung tippen, wenn die Daten noch konsistent sind. Könnte natürlich auch sein, dass da jemand gefummelt hat, aber das traue ich Ben schon zu, dass er das überprüft hat. ;-))
Danke für dein Vertrauen ;-) Und das habe ich wirklich schon getestet. Ich hab wirklich nicht die leiseste Ahnung, was los ist... Aber heute ist eh irgendwie nicht mein Tag...
Gruß
Ben
Hello,
Da es ja keine MySQL-Fehlermeldung gibt würde ich mal auf eine Versionsumstellung tippen, wenn die Daten noch konsistent sind. Könnte natürlich auch sein, dass da jemand gefummelt hat, aber das traue ich Ben schon zu, dass er das überprüft hat. ;-))
Danke für dein Vertrauen ;-) Und das habe ich wirklich schon getestet. Ich hab wirklich nicht die leiseste Ahnung, was los ist... Aber heute ist eh irgendwie nicht mein Tag...
Dafür gibbet ja us.
Also nochmal strukturiert:
Welche Zugriffsmöglichkeiten hast Du denn auf die DB? Konsole oder phpMyAdmin oder MySQL-Front ...?
Dann mach doch mal eine direkte Abfrage nach dem gewünschten Datensatz.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Tom,
ich habe mal verglichen und tatsächlich sind die md5()-Werte irgendwie verschieden. Kann das an einer Versionsumstellung liegen? Wie kann ich das umgehen?
Danke und Gruß
Ben
PS: Ich habe Zugriff über phpMyAdmin.
Hello,
ich habe mal verglichen und tatsächlich sind die md5()-Werte irgendwie verschieden. Kann das an einer Versionsumstellung liegen? Wie kann ich das umgehen?
Eigentlich darf es keinen Unterschied geben. Ein Ausgangswert sollte immer zum selben md5()-Wert führen. Allerdings sind die nicht eineindeutig. Ein md5()-Wert kann also aus mehreren Ausgangswerten erzeugt werden. Das ist ja aber hier nicht das Problem.
Allerdings habe ich neulich auch Probleme gehabt und wenn ich mich recht erinnere, war da auch die PHP-Version geändert worden. Es könnte also durchaus sein, dass es da einen Bug gibt. Ich halte das zwar für sehr unwahrscheinlich, aber nicht für ausgeschlossen.
Hast Du mal in der Buglist von PHP geschaut, ob da was bekannt ist?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Tom,
also in der Buglist kann ich nix finden (finde sie aber auch recht unübersichtlich oder bin ich nur zu blöd?). Ich habe jetzt mal den md5()-Wert in die DB geschrieben, den mir ein echo md5("passwort") ausgibt. Damit funktioniert es... Es sind also anscheinend wirklich die Passwörter irgendwie anders verschlüsselt...
Bin etwas ratlos...
Gruß
Ben
Hello,
also in der Buglist kann ich nix finden (finde sie aber auch recht unübersichtlich oder bin ich nur zu blöd?). Ich habe jetzt mal den md5()-Wert in die DB geschrieben, den mir ein echo md5("passwort") ausgibt. Damit funktioniert es... Es sind also anscheinend wirklich die Passwörter irgendwie anders verschlüsselt...
Bin etwas ratlos...
Du musst doch wissen, wie die Passwörter in die Tabelle reingekommen sind.
Es gibt diverse Passwort-Verschlüsselungen. Ich halte md5() auch nicht wirklich für geeignet, da es keine bijektive Abbildung durchführt. Vielleicht solltest Du mal unter "Verschlüsselung" googlen oder bei MySQL nachsuchen.
Mir fallen so auf Anhieb crypt() http://de.php.net/manual/de/function.crypt.php und password() http://dev.mysql.com/doc/mysql/de/Passwords.html,http://dev.mysql.com/doc/mysql/de/Miscellaneous_functions.html ein.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom