Problem mit mysql_fetch_object
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
benutzer
code
datum
eigentliche abfrage
fehlermeldung
funktion
funktioniert moment
geschafft versuch
header
http
index
jemand
liegen
limit
operator
problem
sache
url
versuch
zeile
-
Und nochmal hallo,
Mein neues Problem:
Ich würde gerne einen Loginscript erstellen, mithilfe einer MySQL-Datenbank.
Die eigentliche Abfrage habe ich mir so vorgestellt:
$username = trim($_POST['username']); $pwd = trim($_POST['password']); if(empty($username) OR empty($pwd)) { echo "<br />\n<span class=\"error\">Das Formular wurde nicht korrekt ausgefüllt!</span>\n<br />\n"; } else { $pwd = md5($pwd); $sql = "SELECT name, pwd FROM user_dat WHERE name LIKE '$username' LIMIT 1"; $db_erg = mysql_query($sql); if(!$db_erg) { echo "Abfrage unmöglich!"; } $row = mysql_fetch_object($db_erg); if($row->name === $username AND $row->pwd === $pwd) { echo "Geht"; } else { echo "Geht nicht!"; } }
Leider endet das ganze so, dass mir als Fehlermeldung
Notice: Trying to get property of non-object in C:\xampp\htdocs\Webseite\User\index.php on line 130
ausgegeben wird...
Hat hier jemand eine Ahnung, woran das liegen könnte, bwz, was ich falsch mache???
mfG Mönch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Was steht denn auf Zeile 130 in der index.php?
-
Ich kenn mich mit der Funktion mysql_fetch_object nicht so aus.
Ich habe bei meinem Loginscript damals mysql_fetch_assoc verwendet.
Vielleicht solltest du mal das probieren:
$row = mysql_fetch_assoc(($db_erg); $rowname = $row['name']; $rowpwd = $row['pwd']; if($rowname && $rowpwn) { echo "Geht"; } else { echo "Geht nicht!"; }
Oder...
Wie ich gesehen habe hast du bei if als operator
benutzt, es mussAND
heißen.&&
Versuch das hier als erst.
LG yashha -
Hallo,
Mit
$daten = mysql_fetch_assoc($db_erg); echo $daten['name']; echo $daten['pwd']; echo $daten['sck'];
wird leider auch nichts ausgegeben...
Wenigstens keine Fehlermeldung. :-)
Aber normalerweise müssten mir doch auf diese Weise die Inhalte der gewählten Reihe ausgegebene werden.
$db_erg ist getestet und funktioniert aber.
UndAND
entspricht in PHP&&
.
In Javascript gild das AND nicht.
In PHP kann man allerdings für && AND und für || OR einsetzen... (-:
mfG Mönch -
Ich denke mal es hat dann etwas mit der sql zu tun.
SELECT name, pwd FROM user_dat WHERE name LIKE '$username' LIMIT 1
Warum benutzt du den Operator LIKE und nicht "=". -
LIKE ermöglicht es bei falschem Benutzernamen trotzdem eingeloggt zu werden. Spar dir das LIKE und ersetz es durch =
Zum Code:
Versuch mal Folgendes:
Das ist eine einfache Fehlerüberprüfung, da $row == false bedeutet das keine Datenzeile vorhanden ist.$row = mysql_fetch_object($db_erg); if(!$row) { echo('Keine Zeilen!'); }
Ansonsten sehe ich bei deinem Code keine Behandlung für den Fall dass gar keine Zeile deinem Suchkriterium entspricht. -
Hallo,
Danke, der Tipp mit "=" hat gewirkt...
Ich weiß zwar nicht, warum der SQL - Code mit "LIKE" nicht azeptiert wird, aber auf jeden Fall geht jetzt die Sache!
Mein nächstes Problem:
Ich würde, wenn der Loginerfolgreich war, den Benutzer gerne auf eine andere Seite umleiten.
Ich habe vor, das ganze in der Version
zu realisieren.header('Location ...');
Wenn ich die Sache im Localhost ausprobiere klappt es einwandfrei, allerdings nichtmehr, wenn ich den Code auf dem Server eingefügt habe.
Der Benutzer wird erkannt, aber nicht weitergeleitet...!
Mein Code hierzu sieht so aus:
$pwd = md5($pwd); $sql = "SELECT name, pwd FROM user_dat WHERE name = '$username' LIMIT 1"; $db_erg = mysql_query($sql); $row = mysql_fetch_object($db_erg); if(!$row) { echo "<br />\n<span class=\"error\">Dieser Benutzername existiert nicht!</span>\n<br />\n"; } else { if($row->name == $username AND $row->pwd == $pwd) { header('Location: http://www.geocaching-dermoench.lima-city.de/...); } else { echo "<br />\n<span class=\"error\">Deine Formulareingaben waren falsch!</span>\n<br />\n"; } }
Hat hier jemand eine Idee, woran das liegen könnte???
mfG Mönch -
Kommt bei dir eine Fehlermeldung?
Wenn ja:
Ich habe auch lange Zeit versucht, die headerfuktion zum Funktionieren zu bringen.
Ich habe es nicht geschafft.
Versuch es mal mit Javascript. Damit hat es bei mir funktioniert.
Moment ich such dir was raus.
Edit:
http://www.websmith.de/blog/webprogrammierung/redirect-suchmaschinen/redirect-mit-javascript-21/
Wenn nein probier das:
setzte ein ' am ende deines links in der header funktion
mfg yashha
Beitrag zuletzt geändert: 19.1.2012 20:19:47 von yashha -
Wenn du PHP-Warnungen aktiviert hast und irgend etwas in der Art "header already sent" bekommst hast du schon vor dem header()-Aufruf Zeichen ausgegeben. Somit wurde der Header schon übertragen und kann nicht mehr verändert werden.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage