cartman1991 Geschrieben 24. August 2010 Teilen Geschrieben 24. August 2010 (bearbeitet) Hey, Ich habe ein Login formular (index.php) <form action="./index.php" method="post"> Username:<input name="username"> Passwort:<input name="passwort" type="password"> <input type="submit" value="Login"> </form>[/PHP] Und der php-Teil: [PHP]<?php If($_SERVER['REQUEST_METHOD'] == 'POST'){ If(isset($_POST['username']) AND isset($_POST['passwort'])){ $username = $_POST['username']; $passwort = md5($_POST['passwort']); //MySQL-Connect include('../db_user_connect.php'); $query = "SELECT * FROM `User`"; $result = mysql_query($query); $i = 0; while ($row = mysql_fetch_array($result)) { If($row[username] == $username AND $row[md5] == $passwort AND $row[mode] == 777){ $id = $row[id]; $username = $row[username]; $md5 = $row[md5]; $mode = $row[mode]; $i = $i + 1; echo "id: ".$id."<br>Username: ".$username."<br>md5: ".$md5."<br>Mode: ".$mode; } } If($i == 1){ echo "Willkommen $username , einen Moment sie werden weitergeleitet!"; // Sessionvariablen erstellen und registrieren echo "Sessions registrieren"; $_SESSION["user_id"] = $id; $_SESSION["usernamen"] = $usernamen; $_SESSION["mode"] = $mode; mysql_close(); header("Location: ./panel.php"); } else{ echo "Falsche Benutzerdaten!"; } } } ?> Am Anfang der Seite wird noch zusätzlich die Checkuser.php included Checkuser.php <?php session_start(); if(!isset($_SESSION["username"])) { header ("Location: ./index.php"); } ?>[/PHP] Mein Problem ist jetzt, wenn ich mich einlogge, passiert gar nichts. Die Seite wird neu geladen etc... aber sonst nicht mehr und ich bin wirklich am Verzweifeln bei der Fehlersuche :/ Hoffe ihr findet was. Mfg Cartman Bearbeitet 24. August 2010 von cartman1991 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 24. August 2010 Teilen Geschrieben 24. August 2010 Soweit wie ich das sehe, sind schon einige Syntaxfehler drin: Anstatt If muss es if heißen. Weiterhin liefert das mysql_fetch_array ein assoziatives Array, wobei die Namen als Stringwerte übergeben werden. Schau bitte in Deine Logs, dort müssten Warning und Fehler zu finden sein, die Du zuerst beheben solltest. Weiterhin ist die Meldung "funktioniert nicht", absolut unbrauchbar, denn niemand kann aus dem Code etwas herausfinden bzw. etwas mit dieser Aussage anfangen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schaelle Geschrieben 31. August 2010 Teilen Geschrieben 31. August 2010 Soweit wie ich das sehe, sind schon einige Syntaxfehler drin: Anstatt If muss es if heißen. Sollte allerdings keine Probleme hervor rufen. PHP meckert da imho nicht. Weiterhin liefert das mysql_fetch_array ein assoziatives Array, wobei die Namen als Stringwerte übergeben werden. Solange sein Felder richtig benannt sind ("id", "username" etc.) sollte PHP auch hier nicht meckern. Wenn auch beide Sachen kein schönes Syntax ergeben. Zum eigentlichen Thema: Dein Login-Algorithmus ist schon etwas merkwürdig. Mal aufgebröselt macht dein PHP Skript folgendes: Wurde ein POST-Formular übergeben/abgesendetWurden die Input-Elemente mit den Namen "username" und "passwort" übergebenMysql Connect (was auch immer in der Datei passwirt)->Mysql Abfrage nach allen Usern->Schleife durch alle User ->Wenn Username und Password und Modus übereinstimmen, setze einige Variablen->Inkrementiere $i um 1Wenn i == 1 dann setze einige Variablen für den Login Was fällt auf? Sobald du mehr User als einen als Ergebnis deiner Datenbank abfrage rausbekommst, dann wird $i nie 1 sein. Sprich ein User kann nie eingeloggt werden. Weiterhin ist auch die Abfrage nach allen Usern merkwürdig. Einfacher ist es, wenn du direkt eine Mysql Abfrage nach einem User bestehend aus diesem Usernamen, Passwort und Modus machst. Und die Ergebnismenge nur zählen lässt. Zu beachten ist bei der zusammengebastelten SQL-Abfrage, dass du alle Werte die der User eingibt (Username, Passwort) mittels mysql_real_escape_string maskierst. Dadurch verhindest du, hinreichend, SQL-Injections. Wenn die Ergebnismenge 1 ergibt, ist der Userlogin okey. Ergibt sie 0 stimmt die Kombo aus User+PW+Mode nicht. Ergibt sie >1 hast du redundante Einträge in der Datenbank. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 31. August 2010 Teilen Geschrieben 31. August 2010 Wenn die Ergebnismenge 1 ergibt, ist der Userlogin okey. Ergibt sie 0 stimmt die Kombo aus User+PW+Mode nicht. Ergibt sie >1 hast du redundante Einträge in der Datenbank. Letzteres würde meines Erachtens für einen Fehler in der Modellierung sprechen, denn ein Username sollte unique sein, d.h. bei der Datenbankabfrage reicht die Prüfung auf die Existenz des Datensatzes anhand Username und Passwort (ich hoffe, dass das Passwort nicht im Klartext sondern als Hash gespeichert ist). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schaelle Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 Letzteres würde meines Erachtens für einen Fehler in der Modellierung sprechen Dito. In wie weit man sich jetzt auf sein Modell verlässt und deswegen bestimmte Abfragen/Else-Zweige nicht ausbaut bleibt einem selbst überlassen. ich hoffe, dass das Passwort nicht im Klartext sondern als Hash gespeichert ist Laut seinem ersten Beitrag schon: $passwort = md5($_POST['passwort']); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 Solange sein Felder richtig benannt sind ("id", "username" etc.) sollte PHP auch hier nicht meckern. er benutzt aber keine strings, sondern nicht definierte konstanten: $row[md5] das funktioniert zwar dummerweise, aber nur weil php "annimmt" die konstante md5 soll auch den string md5 enthalten. normalerweise sollte php dann mit warnings um sich werfen. ->Wenn Username und Password und Modus übereinstimmen, setze einige Variablen ->Inkrementiere $i um 1 das $i wird aber nur inkrementiert, wenn pass,username und mode stimmen wäre also erstmal nicht das problem. viel interessanter ist die frage ob das alles aus der index.php ist, und wo genau die checkuser.php angeblich eingebuden wird. in checkuser.php wird auf existens der session variablen 'username' geprüft, die wird aber nie gesetzt. in der index.php wird eine sessionvariable 'usernamen' gesetzt. und in der index.php so wie sie da steht fehlt auch ein session_start(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schaelle Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 er benutzt aber keine strings, sondern nicht definierte konstanten: $row[md5] das funktioniert zwar dummerweise, aber nur weil php "annimmt" die konstante md5 soll auch den string md5 enthalten. normalerweise sollte php dann mit warnings um sich werfen. Jap, stimmt. Warnings gibt's dann natürlich. das $i wird aber nur inkrementiert, wenn pass,username und mode stimmen wäre also erstmal nicht das problem. Stimmt, siehe flashpixx sollte man wohl konzeptmäßig nicht davon ausgehen das es redundante User-Einträge gibt. in checkuser.php wird auf existens der session variablen 'username' geprüft, die wird aber nie gesetzt. in der index.php wird eine sessionvariable 'usernamen' gesetzt. Stimmt auch, habe ich überlesen. Entweder ein Logik-Fehler ($usernamen = Summe aus allen $username's in Schleife, ähm ja...) oder nur ein Typo, wobei dann ein Doppelter: $_SESSION["usernamen"] = $usernamen; und in der index.php so wie sie da steht fehlt auch ein session_start(); Daran könnte es natürlich liegen. Gibt PHP Warnings in Fällen das man $_SESSION setzt, aber gar keine Session gestartet ist, oder wird einfach nichts Aufruf-übergreifend gespeichert und könnte so zu seinem Problem führen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 Gibt PHP Warnings in Fällen das man $_SESSION setzt, aber gar keine Session gestartet ist, oder wird einfach nichts Aufruf-übergreifend gespeichert und könnte so zu seinem Problem führen? gute frage, weiß ich nicht, is mir auch zu blöd das jetzt zu testen aber prinzipiell glaub ich nicht das php da warnings wirft, $_SESSION is ja auch nur eine superglobal wie _POST oder _GET. und die sind ja auch immer da. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schaelle Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 Gut, also vermuten wir - ich, ohne es weiter für cartman1991 zu testen, dass es an einer nicht korrekt per PHP: session_start - Manual gestarteten Session liegt. Zu überdenken ist die Herangehensweise des Ladens und manuellen Verarbeitens der User dennoch. Siehe mein Beitrag, wäre ein SQL-Query mit WHERE-Klausel wohl geeigneter. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 Siehe mein Beitrag, wäre ein SQL-Query mit WHERE-Klausel wohl geeigneter. stimmt, deswegen hab ich da auch nicht wiedersprochen aber ich glaube nach einer woche hat der TE auch kein allzugroßes interesse mehr an einer lösung oder hat schon eine ^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schaelle Geschrieben 1. September 2010 Teilen Geschrieben 1. September 2010 stimmt, deswegen hab ich da auch nicht wiedersprochen aber ich glaube nach einer woche hat der TE auch kein allzugroßes interesse mehr an einer lösung oder hat schon eine ^^ Das mag natürlich sein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.