Loginscript - Ressource ID #5

Hallo,

ich arbeite seit gestern an einem Login-Script. Dieses ueberprueft einige Daten und schaut dann in einer Tabelle (MySQL) nach, ob die Logindaten auch korrekt sind.

So weit so gut, nur kommt das Script dummer Weise nicht so weit. Zur Ueberpruefung, habe ich in den Auslesebefehl ein or die(“Error:”.mysql_error()) eingebaut. Als Fehlermeldung erhalte ich aber nur das “Error:”, nicht aber die Fehlerbeschreibung. Da ich davon ausging, etwas in den vorherhigen Variablen falschgemacht zu haben, habe ich mir diese auch ausgeben lassen. Die Meldungen lauten wie folgt:

[quote]Abfrage_Login = SELECT * FROM frontend_user WHERE user = ‘MrGeneration’

Ergebnis_Login = Resource id #5
Error: [/quote]

Der Code (Teilausschnitt) lautet:

[code]include(“include/config.inc.php”);
//Pruefen, ob das Loginformular bereits abgesendet wurde
if(isset($_GET[“sent”]))
{
$sent = $_GET[“sent”];
$minuten2 = “120”; //2 Minuten
$ntimestamp = $timestamp + $minuten2;
if($ntimestamp >= $sent)
{
if($timestamp >= $sent)
{
//Die Variable ist gueltig und wurde innerhalb der letzten 2 Minuten abgesendet
//Pruefen, ob die Nutzerdaten eingetragen wurden
if(isset($_POST[“username”]))
{
//Username gesetzt, pruefe weiter
if(isset($_POST[“pass”]))
{
//Passwort vorhanden, pruefe weiter
if(isset($_POST[“sid”]))
{
//Pruefen, ob die angegebenden Daten korrekt sind
$username = $_POST[“username”];
$passwort = $_POST[“pass”];
$passwort = md5($passwort);
$psid = $_POST[“sid”];
$session = session_id();

                                                     $verbindung = mysql_connect($server, $user, $pass) or die("Could not connect to Server!");
                                                     mysql_select_db($datenbank);
                                                     $abfrage_login = "SELECT * FROM $table2 WHERE user = '$username'";
                                                     echo "<br>Abfrage_Login = ".$abfrage_login."<br>";
                                                     $ergebnis_login = mysql_query($abfrage_login);
                                                     echo "<br>Ergebnis_Login = ".$ergebnis_login."<br>";
                                                     while($lrow = mysql_fetch_object($ergebnis_login) or die ("Error: ".mysql_error()))
                                                             {
                                                             $dusername = $lrow->user;
                                                             $dpasswort = $lrow->passwort;
                                                             }
                                                     //Pruefen, ob die angegebenen Daten stimmen
                                                     if($dusername == $username)[/code]

Ich bin verzweifelt, sieht jemand vielleicht einen Fehler, den ich nicht sehe??

Lg
Mr.Generation

PS: Der Abfragecode ansich funktioniert, habe ich in einer Shell mal ausprobiert…

Hi,

Ich gehe davon aus, dass du hier das Ergebnis in der Ausgabe nicht durch ein “fetch” laufen lässt. Wenn du das Ergebnis nur so ausgibst erzählt dir SQL hier nur, dass wohl Daten vorhanden sind. :wink: Ressource ID #5 ist das Argument, mit dem dann gearbeitet wird.

Hey,

ich glaube, dass du mich irgendwo auf der Strecke verloren hast…

Ich bin nach diesem Beispiel vorgegangen:

$abfrage = "SELECT Spaltenname FROM Tabellenname"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->Spaltenname"; }

fetch_object, weil ich nur ein eine einzelnde Zeile ausgeben moechte, und keine arrays gebrauchen kann. Stehe ich mit meinem Verstaendnis nun so auf dem Schlauch, oder verstehe ich es falsch, dass das Script das Ergbnis von “mysql_query($abfrage_login)” holt und dieses dann in meine Variablen speichern muestte?

Ich mein, so habe ich es schon oft gemacht, und es ist das erste Mal, dass mir dieser Fehler unterkommt… :confused:

Hi,

was wird dir denn bei echo “$row->Spaltenname”; ausgegeben? Tritt dort o.g. Meldung auf?

Ich dachte dies bezieht sich auf diese Zeile:

Und da kann ich das durchaus nachvollziehen, weil eben dort $ergebnis_login nicht durch ein fetch gelaufen ist.

Hey,

nun wird es interessant! Die Schleife fuehrt er anscheinend noch aus, aber danach bricht er ab. Nun gibt er aus:

[quote]Abfrage_Login = SELECT user, passwort FROM frontend_user WHERE user = ‘MrGeneration’

Ergebnis_Login = Resource id #5
MrGeneration
1c53693468e73ff3e1011c1934bceb84
Error: [/quote]

Ich habe den Abfragetext ein wenig angepasst:

$verbindung = mysql_connect($server, $user, $pass) or die("Could not connect to Server!"); mysql_select_db($datenbank); $abfrage_login = "SELECT user, passwort FROM $table2 WHERE user = '$username'"; echo "<br>Abfrage_Login = ".$abfrage_login."<br>"; $ergebnis_login = mysql_query($abfrage_login); echo "<br>Ergebnis_Login = ".$ergebnis_login."<br>"; while($lrow = mysql_fetch_object($ergebnis_login) or die ("Error: ".mysql_error())) { $dusername = $lrow->user; $dpasswort = $lrow->passwort; echo $dusername."<br>"; echo $dpasswort."<br>"; } echo "<br><br>Dusername = ".$dusername; echo "<br>Dpasswort = ".$dpasswort; //Pruefen, ob die angegebenen Daten stimmen if($dusername == $username) { if($passwort == $dpasswort)

Hi,

wieso gibst du den Fehler überhaupt so spät aus? I. d. R. platziert man den ja direkt nach mysql_query();

Dass er die Schleife durchläuft und dann erst den Error ausgibt kann ich mir nur dadurch erklären, dass nach Beendigung der Schleife diese ja abgebrochen wird. Vielleicht wird dieses Abbrechen als Fehler angesehen - das ist aber nur eine wage Vermutung.

nach mysql_query(); hatte ich das or die rausgenommen, da dort keine Fehler mehr vorhanden waren. Ich habe es eben nochmal eingefuegt, allerdings bleibt es bei der vorherigen Ausgabe. Waere es vielleicht mal eine Idee, bei Fehlern fortzufahren?

Ich vermute, wie gesagt, dass es sich hier nicht um einen Fehler handelt. Vielleicht kann ja chrisb oder einer der h4xx0r-Michis hier was zu sagen - die sprechen ja alle fließend php

Okay danke, dann heisst es fuer mich ersteinmal abwarten :slight_smile:

Du hast ihm ja auch gesagt, dass „er“ dort abbrechen soll …

[quote]while($lrow = mysql_fetch_object($ergebnis_login) or die ("Error: ".mysql_error())) {[/quote]
Das ist eine vollkommen unsinnige Konstruktion.

Bitte mal mit Logik überlegen, was da passiert:

mysql_fetch_object liefert so lange ein Object, so lange es noch Datensätze gibt.
Nachdem der letzte Datensatz gelesen und verarbeitet wurde, wird wieder in den Schleifenkopf gesprungen, mysql_fetch_object erneut aufgerufen, und dann liefert es false.
Bei einer vernünftig aufgebauten Schleife (ohne das an dieser Stelle blödsinnige or die) tritt genau das gewünschte Verhalten ein: false erfüllt die Weiterlaufbedingung der Schleife nicht mehr, Schleife wird beendet, danach weiter gemacht.

Hier kommt aber jetzt das or die(…) zum tragen - weil der davor stehende Teilausdruck false ergibt, wird jetzt das, was hinter dem logischen Operator or steht ausgewertet - ups, die(…), Script muss an dieser Stelle abgebrochen werden.
(Natürlich wird noch "Error: " ausgegeben - dass dahinter nichts mehr steht, liegt daran, dass überhaupt kein MySQL-Fehler aufgetreten ist.)

Man sollte sich schon klar machen, was solche Konstrukte eigentlich bewirken und wie sie arbeiten - bevor man sie einfach übernimmt, und dann auch noch an Stellen verschiebt, an denen sie keinen Sinn ergeben.

Autsch - das tut ja schon weh … da hätte ich auch selbst drauf kommen können, danke.