Veröffentlicht 9. März 200916 j <?php if(!isset($_SESSION["UserName"])) { if (!isset($_POST["submit"])) { eval ("\$login = \"".gettemplate("login")."\";"); echo $login; } if (isset($_POST["submit"])) { $username = $_POST["username"]; $password = $_POST["password"]; $query = 'SELECT * FROM t_user WHERE UserName="$username" LIMIT 1'; $result = mysql_query($query); $row = mysql_fetch_object($result); var_dump($row->UserName); var_dump($username); if($row->UserPass==$password) { $_SESSION["UserName"] = $row->UserName; $_SESSION["UserID"] = $row->UserID; $_SESSION["isAdmin"] = $row->isAdmin; eval ("\$logged = \"".gettemplate("logged")."\";"); echo $logged; } else { echo 'Benutzername und/oder Passwort waren falsch.<br><a href="?go=login">Login</a>'; } } } elseif(isset($_SESSION["UserName"])) { eval ("\$logged = \"".gettemplate("logged")."\";"); echo $logged; } else { echo 'Es ist ein unbekannter Fehler aufgetreten, bitte setzten Sie sich mit dem Administrator in Verbindung.'; } ?>[/PHP] die variablen die sich das mysql_fetch_object aus dem select hlen soll sind iwi nicht vorhanden, hab mir das mal angeguckt mir var_dump, aber als ergebnis komt NULL bzw. bei var_dump($row); kommt bool(false) dementsprechend funzt der schöne login nicht :S weiß jemand wo das fehler liegt? ich komm nicht weiter -__- danke schonmal im vorraus
9. März 200916 j ich weiß dumme frage, aber wie lass ich mir die fehlermeldung ausgeben?^^ also mit mysql_error($result); oder wie? (musste das noch nie machen und ausserdem gerade in der ausbildung)
9. März 200916 j Das nächste Mal bitte selbstständig suchen: PHP: mysql_error - Manual PHP: mysql_errno - Manual Phil
9. März 200916 j Ist nicht Dein SQL-Statement in PHP falsch? $query = 'SELECT * FROM t_user WHERE UserName="$username" LIMIT 1'; wenn ich das Stringlateral ' nutze, ersetzt PHP doch meiner Meinung nach $username nicht durch den Inhalt der Variable, oder? Außerdem sollte doch in SQL das doch so sein: $query = "SELECT * FROM t_user WHERE UserName='$username' LIMIT 1"; Eventuell ist deshalb nach mysql_query das $result einfach leer und deshalb kann auch mysql_fetch_object() nix anderes als false zurückliefern, da ja nix mehr im ResultSet drin is. Bearbeitet 9. März 200916 j von VaNaTiC
9. März 200916 j Quellcode sieht jetzt wie filgt aus, <?php if(!isset($_SESSION["UserName"])) { if (!isset($_POST["submit"])) { eval ("\$login = \"".gettemplate("login")."\";"); echo $login; } if (isset($_POST["submit"])) { $username = $_POST["username"]; $password = $_POST["password"]; $query = "SELECT * FROM t_user WHERE UserName='$username' LIMIT 1"; $result = mysql_query($query); $row = mysql_fetch_object($result); if($row->UserPass==$password) { $_SESSION["UserName"] = $row->UserName; $_SESSION["UserID"] = $row->UserID; $_SESSION["isAdmin"] = $row->isAdmin; eval ("\$logged = \"".gettemplate("logged")."\";"); echo $logged; } else { echo 'Benutzername und/oder Passwort waren falsch.<br><a href="?go=login">Login</a>'; } } } elseif(isset($_SESSION["UserName"])) { eval ("\$logged = \"".gettemplate("logged")."\";"); echo $logged; } else { echo 'Es ist ein unbekannter Fehler aufgetreten, bitte setzten Sie sich mit dem Administrator in Verbindung.'; } ?>[/PHP] der tipp mit den " " statt ' ' hat bischen geholfen (' ' is ne angewohnheit von mir die ich durch den echo befehl hab ^^) naja auf jedenfall kommt jetzt ne fehlermeldung Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Dokumente und Einstellungen\Desktop\xampp-win32-1.7.0\xampp\htdocs\ab_web\login.php(20) : eval()'d code on line 4
9. März 200916 j so hab jetzt die Quotes escaped bevor ich sie durch den eval() jage ^^ vorher: eval ("\$login = \"".gettemplate("login")."\";"); echo $login;[/PHP] Jetzt: [PHP]eval ("\$login = stripslashes(\"".addslashes(gettemplate("login")."\";"); echo $login; so die fehlermeldung hat sich auch geändert: Parse error: parse error in C:\Dokumente und Einstellungen\Praktikant\Desktop\xampp-win32-1.7.0\xampp\htdocs\ab_web\login.php on line 4 oh kleiner denkfehler, so is besser: eval ("\$login = \"".addslashes(gettemplate("login"))."\";"); echo $login;[/PHP] Bearbeitet 9. März 200916 j von cuLcha
9. März 200916 j Als Hinweis: eval = evil ! Wofür Du überhaupt eval benötigst ist mir völlig schleierhaft Phil
9. März 200916 j wenn ich richtig geschaut habe ist der Fehler aus Zeile 20, der Code der mittels eval() ausgeführt werden soll. Der Fehler ist in der 4.Zeile des durch gettemplate("logged") zurückgelieferten Textes. Da ich den Code nicht kenne, keine Chance zu helfen. Aber den Fehler solltest selber finden können
9. März 200916 j Als Hinweis: eval = evil ! Wofür Du überhaupt eval benötigst ist mir völlig schleierhaft Phil die Funktion gettemplate() ist 100% selbst eine PHP-Datei und er will die PHP gleich Parsen und nicht nur Einlesen und dann im Hauptkontext erst parsen lassen.
9. März 200916 j jo danke VaNaTiC hast mir sehr geholfen ^^ funzt jetzt alles und eval brauch ich zum einlesen von meinen teplate datein
9. März 200916 j die Funktion gettemplate() ist 100% selbst eine PHP-Datei Mir ist die Funktionsweise von eval durchaus bekaant, aber normalerweise wird innerhalb der php.ini ein solcher Aufruf durch den Admin unterbunden. Zusätzlich habe ich nicht nach der Funktionsweise gefragt, sondern nach dem Nutzen, denn ich sehe absolut für eval keine Notwendigkeit, die man durch eine Function oder ein Object, das man via include/required auslagert bzw der aktuellen PHP Datei hinzufügt, nicht auch lösen kann Phil
9. März 200916 j Mir ist die Funktionsweise von eval durchaus bekaant, Das hat auch niemand in Frage gestellt. aber normalerweise wird innerhalb der php.ini ein solcher Aufruf durch den Admin unterbunden. Was ist denn normalerweise? Ich hatte bisher keinen WebSpace, wo ich nicht selbst die INI ändern konnte, wo das eval() unterbunden wurde? Zusätzlich habe ich nicht nach der Funktionsweise gefragt, sondern nach dem Nutzen, Ich verstehe Deinen Einwand leider nicht, denn ich habe Dir doch "seinen" Nutzen und nicht die Funktionsweise erläutert. denn ich sehe absolut für eval keine Notwendigkeit, die man durch eine Function oder ein Object, das man via include/required auslagert bzw der aktuellen PHP Datei hinzufügt, nicht auch lösen kann Da stimme ich Dir zu. Fakt ist Du sagtest: Wofür Du überhaupt eval benötigst ist mir völlig schleierhaft Ich wollte Dir nur vermitteln, was aller Wahrscheinlichkeit der Nutzungsgrund für das eval() ist. Dabei habe ich weder eine Wertung inbezug auf Nutzungsfehler, noch die Funktionsweise erläutert. Wenn Dir das alles bereits bewusst war, dann ist Dein "ist mir völlig schleierhaft" irgendwie unpassend, finde ich.
9. März 200916 j Was ist denn normalerweise? Ich hatte bisher keinen WebSpace, wo ich nicht selbst die INI ändern konnte, wo das eval() unterbunden wurde? Hatte es bei einem Hoster, daher mein Einwand. Ich verstehe Deinen Einwand leider nicht, denn ich habe Dir doch "seinen" Nutzen und nicht die Funktionsweise erläutert. Wenn Dir das alles bereits bewusst war, dann ist Dein "ist mir völlig schleierhaft" irgendwie unpassend, finde ich. Vielleicht meinerseits zu unpräzise formuliert: Es bezog sich das "schleierhaft" auf dieses ganze eval Konstrukt mit stripslashes usw. Ich kenne ja die Funktionseise der Befehle, aber ich denke man kann das semantisch besser und übersichtlicher lösen Sorry für den Ausdruck Phil
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.