.| Autor | Beitrag |
|---|---|
|
000 24.04.2002, 02:19 Kriz |
Holla und Gute Nacht (gähn). Bis gerade eben habe ich an dem Problem geknobelt, daß man in einem HTML-Frameset, in denen PHP-Skripte ablaufen, gewaltige Frame-Update-Probleme bekommen kann, wenn man nicht etwas nachdenkt. Zuersteinmal der Grundgedanke: Angenommen man hat das aktuelle Browserfenster in 2 Frames aufgeteilt: NAVI und MAIN. In linken Frame NAVI läuft ein PHP-Skript ab, in rechten Frame MAIN ebenfalls. Aus Designergründen befindet sich in NAVI die Funktionalität zum Ein/Ausloggen für Benutzer und in MAIN sollen Hauptausgaben erscheinen, sozusagen als Main-Frame (löl)... Die Formulareingaben in NAVI mit den Benutzerdaten zum Einloggen (Name + PW) werden beim Klicken auf einen Submitbutton an ein externes PHP-Skript weitergeleitet, welches die Formulardaten prüft und dann nötige Datenbank- und Variablensettings betreibt. Danach sollen NAVI und (!!!) MAIN aktualisiert werden mit den jeweils auftretenden Situationsevents (korrektes Login, Fehler usw.) Die Problematik Wie gesagt befördert das Formular in NAVI die Benutzerangaben an das externe PHP-Skript. Dort werden die Angaben ausgewertet und weitere Schritte eingeleitet. Problem #1: Das externe Skript kann von sich aus nur maximal 1 URL wieder losschicken. Das geschieht mit der PHP-Funktion header(). Header() muß aber in Sinne des HTTP-Headers noch VOR irgendeinem HTML-Tag (in diesem Fall das Tag <!doctype ...> bzw. bei Standarddateien <html>) erscheinen, damit es funktioniert. Problem #2: Außerdem bezieht sich header() wieder auf den Ursprungsframe, von dem es aufgerufen wurde, in diesem Falle also NAVI. Frame MAIN kann also niemals mit PHP und header() aus dem Skript heraus direkt aktualisiert werden! Lösung Da PHP wie gesagt nur maximal 1 URL weiterleiten kann (nach dem Ausführen von header() gilt der HTTP-Header der Datei als abgesendet!) und diese URL auch noch dummerweise direkt wieder an den Frame zurückfließt, von dem das Skript heraus aufgerufen worden ist, muß was anderes her, was diese Barrieren überwindet! Die Lösung ist simples JavaScript! Mit JavaScript kann man bequem alle vorhandenen Frames steuern. Folgendes Miniskript definiert eine JavaScript-Funktion, welche als Parameter jeweils zwei Frame-IDs und zwei URLs erwartet. Die Funktion aktualisiert dann automatisch die jeweils angesprochenen Frames mit dem Inhalt der übergebenen URLs. Übrigens ist dies dasselbe Skript, welches auch bei CAWS die Navileiste und den Main-Bereich aktualisiert (dort aber ohne PHP, sonst hätte ich diesen Thread ja nicht aufgemacht). Diese Funktion packen wir in eine externe JavaScript-Datei namens twoframes.js und speichern sie ab (Ich mag .js Dateien lieber als embedded scripts!). So, aber wie friemeln wir nun dieses JavaScript mit dem PHP-Skript zusammen? Dazu ein weiterer Gedankenvorstoß: Wir wissen, daß header() maximal 1 URL aufrufen kann und dazu noch vor jeglichem HTML-Code erscheinen muß. Header() ist also für unser Vorhaben absolut zwecklos! Also streichen wir header() aus unserem Konzept, weil wir ja nun die JavaScript-Funktion TwoFrames() besitzen. Da das PHP-Skript ja nur als Skript auftauchen soll und weniger als sichtbares Ergebnis in einem Frame, so müssen wir das Skript dazu bringen, eine Fake-HTML-Seite zu generieren. Im <head> .. </head> Segment binden wir unsere twoframes.js Datei ein und zwingen die Seite im <body> Tag durch OnLoad() die JavaScript-Funktion TwoFrames() zu laden. Als Übergabeparamater an TwoFrames() setzen wir die Frame-IDs für NAVI und MAIN ein und die original PHP-Skript URLs vom NAVI-Basisskript und MAIN-Basiskript. Die sollen ja das Auswerten, was unser externes PHP-Skript ausgewertet hat infolge der Benutzereingaben in NAVI. Jetzt muß man nur noch dafür sorgen, daß PHP im Parameterteil von TwoFrames() dynmisch alle Angaben erledigt. Der Ablauf ist dann folgender: 1. Der User gibt seine Daten ins Formular im Frame NAVI ein und klickt Submit. Der Code für das externe Skript könnte so aussehen: Ich hoffe, meine Basteleien helfen euch ein wenig. Und denkt dran: PHP ist zwar mächtig, aber manchmal braucht es eben einen starken Verbündeten wie JavaScript, ehe was anständig funktioniert =) Wer Fragen hat, der soll bitte hier posten, weil ich nicht andauernd nur E-Mails beantworten will. Thx... Cu --K:R-I)Z++ Dieser Beitrag wurde am 24.04.2002 um 02:26 von Kriz bearbeitet. |
|
Profil || Suche |
|
001 24.04.2002, 11:55 Hessie J. |
JavaScript == UBEREVIL! Nee, aber mal im Ernst: Deswegen würd ich für sowas keine Frames nehmen. Es soll nämlich tatsächlich Leute geben, die JavaScript ausgeschaltet haben (müssen). Ich gehöre hier im Büro zu dieser Gruppe. Und ich bin jedesmal angepisst, wenn wieder mal eine Seite meint, JavaScript vorraussetzen zu müssen (oder Java, oder Flash, usw. usw. :D). --Dieser Beitrag wurde am 24.04.2002 um 11:55 von Hessie J. bearbeitet. |
|
Profil || Suche |
|
002 24.04.2002, 12:56 Tron |
yeah... no java, no frames - you don't need a cup of coffee and no extra glass (; --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
003 26.04.2002, 15:59 [RMen]OneStone |
Grrr! Das ist JavaScript ihr BANAUSEN! -- georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/ |
|
Profil || Suche |
|
004 26.04.2002, 20:50 Another1 |
was denkst du wovon die reden, du banause? --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
005 26.04.2002, 21:43 KhanRKerensky |
Java != JavaScript "[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book |
|
Profil || Suche |
|
006 27.04.2002, 12:11 Kriz |
Wo kann man denn bitteschön JavaScript deaktivieren? Sowas kann ich weder bei IE noch bei NS... -- K:R-I)Z++ |
|
Profil || Suche |
|
007 27.04.2002, 14:42 Hessie J. |
Unsere Systemadministratoren sind wahrhafte Künstler im Abschalten von Features (leider nur darin ;). Die haben sogar die Suchfunktion im Explorer deaktiviert. Eine Anleitung zur Deaktivierung von JScript findet man beim z.B. Heise-Browsercheck -- |
|
Profil || Suche |

