Godfather_d Geschrieben 4. Mai 2008 Geschrieben 4. Mai 2008 Hallo Leute, habe für meine Webseite ein Login erstellt, der Funktioniert auch soweit. Leider hab ich ein kleines Problem nach dem ich mich Angemeldet habe. Das Ziel ist es nach erfolgreichen Login soll sich auf der Webseite eine neue Webseite öffnen, leider bekomm ich nur ein Link zu der Webseite. Hier mein Code: <? session_start(); include 'sessionhelpers.inc.php'; if (isset($_POST['Einloggen'])) { $userid=check_user($_POST['username'], $_POST['userpass']); if ($userid!=false) login($userid); else echo 'Ihre Anmeldedaten waren nicht korrekt!'; } if (!logged_in()) -------------------------------- html: echo '<form method="post" action="index.htm"> <td style="border-style: none; border-width: medium" width="57%"></td> <td style="border-style: none; border-width: medium" width="26%"> <input type="text" name="username" size="20"></td> <td style="border-style: none; border-width: medium" width="15%"></td> </tr> <tr> <td style="border-style: none; border-width: medium"></td> <td style="border-style: none; border-width: medium"> <input type="password" name="userpass" size="20"></td> <td style="border-style: none; border-width: medium"></td> </tr> </table> <table border="1" width="100%" id="table2" style="border-width: 0px"> <tr> <td style="border-style: none; border-width: medium"></td> <td style="border-style: none; border-width: medium" width="49"> <input type="submit" value="Login" name="Einloggen"></td> <td style="border-style: none; border-width: medium" width="166"></td> </form>'; -------------------------------- else echo '<a href="1.html">1</a>'; ?>[/PHP] Dieser Befehl verursacht den Link -> echo '<a href="1.html">1</a>'; aber wie lautet der Befehl zum öffnen einer Webseite? Zweite Frage wie bekomm ich die Antwort: else echo 'Ihre Anmeldedaten waren nicht korrekt!'; unter dem Login Button? Danke im Voraus! Zitieren
flashpixx Geschrieben 4. Mai 2008 Geschrieben 4. Mai 2008 Dieser Befehl verursacht den Link -> echo '<a href="1.html">1</a>'; aber wie lautet der Befehl zum öffnen einer Webseite? PHP: header - Manual Zweite Frage wie bekomm ich die Antwort: else echo 'Ihre Anmeldedaten waren nicht korrekt!'; unter dem Login Button? Passe einfach Deine Bedingung an. Phil Zitieren
Godfather_d Geschrieben 4. Mai 2008 Autor Geschrieben 4. Mai 2008 http://de2.php.net/manual/de/function.header.php]PHP: header - Manual Passe einfach Deine Bedingung an. Phil Erstmal thx für deine Antwort und den header Tipp!! Leider hab ich schon verschiedene Varianten versucht um die Bedingung zu ändern, jedoch hab ich es nicht geschafft, da ich ein Anfänger in diesem Bereich bin und ich die Skripte von ein paar Tutorials gemixed habe. Dritte Frage zwar hab ich ein Login aber in der Adressleiste erscheint der Name Bsp.: w w w.beispiel.de/1.htm das heißt einer kann mein Login umgehen. Wie kann ich das unterdrücken? Zitieren
Aiun Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Leider hab ich schon verschiedene Varianten versucht um die Bedingung zu ändern, jedoch hab ich es nicht geschafft, da ich ein Anfänger in diesem Bereich bin und ich die Skripte von ein paar Tutorials gemixed habe. mixen ist gefährlich. Ich rate dir dringend dich mehr damit zu befassen "was" du da tust.... Dritte Frage zwar hab ich ein Login aber in der Adressleiste erscheint der Name Bsp.: w w w.beispiel.de/1.htm das heißt einer kann mein Login umgehen. Wie kann ich das unterdrücken? weil genau solche dinge auftreten. Antwort: gar nicht. du musst in jeder Datei prüfen ob dein User Zugang hat oder nicht. Einfacher geht es mit einem Portalscript d.h. eine einzige URL wird immer aufgerufen und mit einem if($_GET['seite'] == 'meinefunktion') prüfst du was gemacht werden soll zu deinem Script: am besten du legst ein flag an, das anzeigt ob der user eingeloggt ist $logginerror = true ode $logginerror = false und fragst das mit if($logginerror ) unter dem Formular wieder ab. Zitieren
Godfather_d Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 Erstmal danke für deine Antwort! Einfacher geht es mit einem Portalscript d.h. eine einzige URL wird immer aufgerufen und mit einem if($_GET['seite'] == 'meinefunktion') prüfst du was gemacht werden soll Kommt in die Funktion der Script unten? Bzw. verstehe ich nicht was er machen soll? zu deinem Script: am besten du legst ein flag an, das anzeigt ob der user eingeloggt ist $logginerror = true ode $logginerror = false und fragst das mit if($logginerror ) unter dem Formular wieder ab. Oben setzt du ja Variablen ein, aber sollte es nicht so sein: $logginerror = true or $logginerror = false ? In der Bedingung: if($logginerror = true ) { header('Location:index.htm'); else header('Location:1.htm'); } Geht das so überhaupt? Zitieren
M-Cha Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Also ich arbeite mit Runlevels. Der Login muss standardmäßig auf "false" gesetzt sein. So könnte man deinen Login schon mal nicht umgehen. Zitieren
Aiun Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 switch($_GET['seite']) { case 'ersteseite': { include 'ersteseite.php'; break; } case 'interneseite': { if(dieser_user_ist_eingeloggt) include 'interneseite'; else DIE('404 Seite nicht gefunden'); break; } } [/PHP] Wie gesagt...beschäftige dich etwas damit. Beispielscripte analysieren (die Beispiele auf php.net sind meistens nur minimale um eine bestimmte funktion zu erläutern, aber kein allgemeines intro) Zitieren
Godfather_d Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 Danke für eure Hilfe! @Aiun Ich mach wirklich nicht nur Copy/Paste sondern ich versuche das ganze auch wirklich nachzuvollziehen. Leider klappt das nicht auf Anhieb, da ich sehr viele Befehle nicht kenne geschweige deren Funktion kenne. Ich hab mir vorgenommen PHP zu erlernen und gleich mit nem Login anzufangen ist schwer aber ich möchte das schaffen. Ich weiß das es nicht von heute auf morgen schaffbar ist, jedoch möchte ich in ein paar Monaten fit sein in dem Bereich. switch($_GET['seite']) { case 'ersteseite': { include 'ersteseite.php'; break; } case 'interneseite': { if(dieser_user_ist_eingeloggt) include 'interneseite'; else DIE('404 Seite nicht gefunden'); break; } }[/PHP] Ich versuch den Code zu verstehen und anzupassen. Leider kann ich das erst heute Abend wenn ich zu Hause bin. Hoffe das ihr mir bei fragen helfen könnt/wollt und Rücksicht nimmt, dass ich ein Rookie bin :new. Zitieren
Aiun Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 kein Problem, wir mussten alle mal anfangen, also einfach fragen. aber das Manual (RTFM ^^) ist immer ein guter anfang Zitieren
Godfather_d Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 Hi danke fürs Verstädnis. Zurück zur meiner dritten Frage: Ausgabe unter dem Login Button. Habe die Bedingung umgeändert funktioniert auch wunderbar, nur wenn kein Html-Code dazwischen ist? Seht selbst: <? session_start(); include 'sessionhelpers.inc.php'; if (isset($_POST['Einloggen'])) { $userid=check_user($_POST['username'], $_POST['userpass']); if ($userid!=false) login($userid); else umgeändert ---> $falsch = "1"; } if (!logged_in()) echo '<form method="post" action="index.htm"> <td style="border-style: none; border-width: medium" width="96%"> <p style="margin-left: 285px"> <input type="text" name="username" size="20"></td> </tr> <tr> <td style="border-style: none; border-width: medium"> <p style="margin-left: 285px"> <input type="password" name="userpass" size="20"></td> </tr> </table> <table border="1" width="100%" id="table2" style="border-width: 0px"> <tr> <td style="border-style: none; border-width: medium"> <p style="margin-left: 285px"> <input type="submit" value="Login" name="Einloggen"></td> </form>'; else header('Location:1.htm'); ---------------------------------------------------------------- </tr> </table> <table border="1" width="100%" id="table3" style="border-width: 0px"> <tr> <td style="border-style: none; border-width: medium"> <p style="margin-left: 285px"> ---------------------------------------------------------------- neu meins ---> if ($falsch == "1") { echo 'Ihre Anmeldedaten waren nicht korrekt!'; } else { echo ' '; } ?>[/PHP] Dieser Quellcode funktioniert nur dann wenn der Html-Quellcode über [b]neu meins--->[/b] weg ist?!?!?!??!?! Zitieren
Godfather_d Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 Sry wegen Doppelpost, da leider edit nicht mehr geht. Hab das Problem gelöst. session_start(); include 'sessionhelpers.inc.php'; if (isset($_POST['Einloggen'])) { $userid=check_user($_POST['username'], $_POST['userpass']); if ($userid!=false) login($userid); else $falsch = "1"; } if (!logged_in()) echo '<form method="post" action="index.htm"> <td style="border-style: none; border-width: medium" width="96%"> <p style="margin-left: 285px"> <input type="text" name="username" size="20"></td> </tr> <tr> <td style="border-style: none; border-width: medium"> <p style="margin-left: 285px"> <input type="password" name="userpass" size="20"></td> </tr> </table> <table border="1" width="100%" id="table2" style="border-width: 0px"> <tr> <td style="border-style: none; border-width: medium"> <p style="margin-left: 285px"> <input type="submit" value="Login" name="Einloggen"><p style="margin-left: 285px"> </form>'; else header('Location:1.htm'); neu---> if ($falsch == "1") { echo "Ihre Anmeldedaten waren nicht korrekt!"; } else { echo ''; } ?> </td> </tr> </tr> [/PHP] Mich würde es dennoch interessieren wieso die erste Variante nicht geht? Ich dachte PHP ignoriert HTML? Zitieren
Fader Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Moin, es läuft ja so ab: Der User schickt Anfrage an den Server. Dieser leitet die PHP-Bestandteile der Seite und ggf. Parameter an den eigenen PHP-Interpreter weiter, der die dann verarbeitet. Die Ergebnisse der Interpretation landen dann zusammen mit dem HTML (daraus wird ja im Endeffekt reines HTML - Der Server schickt ja keine PHP-Bestandteile mehr an den Client zurück) wieder beim Client. Es ist also eine reine HTML-Seite die du zurück geliefert bekommst. Da bei dir die Tags nicht geschlossen waren können sie vom Browser nicht angezeigt werden. Der macht ja auch nix anderes, als den HTML-Text grafisch anzuzeigen. Das war jetzt ne ganz grobe Darstellung des Vorgangs. Keine Garantie auf Richtigkeit und Vollständigkeit. Darüber kann man ganze Bücher schreiben (wenn man will *g*).. Solltest dir mal anschauen, was genau passiert, wenn du eine PHP-Seite in deinem Browser öffnest.. hier ein kleiner Vorgeschmack: Der Ablauf einer PHP-Anfrage Viele Grüße Fader Zitieren
geloescht_JesterDay Geschrieben 6. Mai 2008 Geschrieben 6. Mai 2008 Das war jetzt ne ganz grobe Darstellung des Vorgangs. Zu grob Sobald du eine Seite beim Webserver anfragst, prüft der erstmal was er mit der tun soll bzw ob es eine Einstellung gibt, dass er sie nicht direkt ausliefern soll. Bei php-Seiten ist als Handler der Seite der PHP-Interpreter eingetragen. Der Server nimmt also die ganze Seite und übergibt sie an den PHP-Interpreter. Dieser geht das Dokument was er bekommt von oben nach unten zeilenweise durch. Sobald er sieht, dass PHP-Code anfängt (mit <?php, oder auch kurz, aber IMHO nicht so gut, <?). interpretiert er den. Und zwar alles, bis das Endezeichen (?>) kommt. Alles andere wird ignoriert und direkt wieder so ausgegeben, wie es dasteht (egal ob HTML, Text oder sonst was). Alles was der PHP-Interpreter ausgibt kommt an den Webserver zurück, welcher das dann als Ausgabe an den Client (meistens Browser) liefert. Zitieren
Godfather_d Geschrieben 6. Mai 2008 Autor Geschrieben 6. Mai 2008 Ach OK und deswegen erkennt er den HTML teil drinne nicht bzw die Befehle. Danke für die Antworten. Mich würde es aber interessieren, wie schaffe ich das PHP Antworten genau da zu setzen im HTML code wo ich will? Zwar hat es im zweiten Beispielt geklappt aber ich musste die HTML Tabelle von der ersten Varianten entfernen. Muss ich dann die ganzen HTML Befehle die in der Mitte sind mit echo Ausgeben? Bsp.: echo "Ausgabe"; oder geht das nicht? Zitieren
geloescht_JesterDay Geschrieben 7. Mai 2008 Geschrieben 7. Mai 2008 (bearbeitet) Muss ich dann die ganzen HTML Befehle die in der Mitte sind mit echo Ausgeben? Kannst du machen, machen auch manche, aber schön ist das nicht Ich empfehle hier, das Dokument in 2 Teile aufzuteilen. Den PHP-Teil oben und den HTML-Teil unten. Im PHP-Teil definierst du Klassen oder Funktionen, und im HTML-Teil werden die dann, falls benötigt, aufgerufen. kleines Beispiel: <?php function doSomething() { $result = "some"; $result.= " Text"; return $result; } function showSomething() { return doSomething(); } start_session(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> </head> <title>Some page</title> </head> <body> <h1>Some Title</h1> <p> Here is some Text </p> <p> <?php echo showSomething(); ?> </p> </body> </html> [/php] Nachtrag: Dabei geben alle Funktionen die für eine Ausgabe sind nur die Ausgabe zurück, machen aber selber kein Echo o.ä. Alle Ausgaben erfolgen nur und ausschließlich im HTML-Teil. Am Ende des oberen PHP-Teils stehen dann die Funktionen, die am Anfang jeder Seite ausgeführt werden sollen, z.B. start_session();. Das kannst du auch ganz oben stehen haben, oder sonst wo, aber ich finde da ist es gut aufgehoben und leicht zu finden. Erst die Startinitialisierung o.ä. und dann HTML. Alles andere irgendwo darüber. Bearbeitet 7. Mai 2008 von JesterDay Zitieren
Godfather_d Geschrieben 7. Mai 2008 Autor Geschrieben 7. Mai 2008 OK cool danke, ich werds versuchen. Zitieren
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.