POST Request + redirect
trunx
- php
Guten Morgen Forum,
ich habe folgendes Problem: ich habe drei Skripte
formular.php
auswertung.php
anzeige.php
die in dieser Reihenfolge aufeinander verweisen. Die Übergabe der Variablen von formular.php nach auswertung.php per Formular :D ist dabei klar, nun sollen aber auch die Ergebnisse von auswertung.php automatisch an anzeige.php weitergegeben werden.
1. Möglichkeit wäre das Speichern der Ergebnis-Daten in externer Datei und Einbindung per include() in anzeige.php, doch dies möchte ich (noch) nicht.
2. Möglichkeit ist, die Ergebnisse per GET method mit header("Location:http://localhost/anzeige.php?var=...") zu übergeben, Nachteil ist allerdings, dass die Adresszeile zu lang werden kann.
Die 3. Möglichkeit besteht in einem HTTP POST Request z.B. per fsockopen und fputs an anzeige.php, doch da verbleibt man ja quasi im auswertung.php Skript, sprich dieses wird in der Adresszeile angezeigt.
Ich hätte nun gern eine Möglichkeit, die die Möglichkeiten 2. und 3. verbindet, also einen POST Request absendet und zugleich ein redirekt vornimmt. Gibt es sowas?
Wäre echt dankbar für Hilfe :-)
ansonsten allen einen schönen Start in den Frühling
trunx
Hi,
Die Übergabe der Variablen von formular.php nach auswertung.php per Formular :D ist dabei klar,
ehrlich? Erstaunlich. Ich arbeite seit Jahren mit derlei Techniken und weiß gerade mal, wie man Parameter übergibt. Mit Variablen ist es dermaßen komplex, dass ich noch nicht einmal versucht habe, es zu tun (außer mit SOAP o.ä.).
Ich hätte nun gern eine Möglichkeit, die die Möglichkeiten 2. und 3. verbindet, also einen POST Request absendet und zugleich ein redirekt vornimmt. Gibt es sowas?
Nein. Aber warum benutzt Du nicht einfach eine Session?
Cheatah
ok :-) Parameter-Übergabe
auf Sessions wollte ich verzichten, weil ich keine cookies oder dergleichen beim Clienten ablegen will. Sind denn Sessions nur auf den Server zu beschränken?
bye trunx
Hi,
» Die Übergabe der Variablen von formular.php nach auswertung.php per Formular :D ist dabei klar,
ehrlich? Erstaunlich. Ich arbeite seit Jahren mit derlei Techniken und weiß gerade mal, wie man Parameter übergibt. Mit Variablen ist es dermaßen komplex, dass ich noch nicht einmal versucht habe, es zu tun (außer mit SOAP o.ä.).
» Ich hätte nun gern eine Möglichkeit, die die Möglichkeiten 2. und 3. verbindet, also einen POST Request absendet und zugleich ein redirekt vornimmt. Gibt es sowas?
Nein. Aber warum benutzt Du nicht einfach eine Session?
Cheatah
Hello trunx,
nur btw: könntest Du bitte den hier üblichen Quotingstil einhalten? Der läuft hier in der Reihenfolge der Beiträge von oben nach unten, nicht wie beim eMail enders herum. :-)
Nein. Aber warum benutzt Du nicht einfach eine Session?
auf Sessions wollte ich verzichten, weil ich keine cookies oder dergleichen beim Clienten ablegen will. Sind denn Sessions nur auf den Server zu beschränken?
Du wirst bei größeren Projekten, bei denen außerdem der User gar nicht sehen soll, welche Variablen es gibt, nicht ohne Sessionmechanismus auskommen. Die Session dient dazu, mit dem per Definition zustandslosen Protokoll einen zustandsorientierten Vorgang zu machen, der i.d.R. aus mehreren Teilen besteht.
Dazu muss man wissen, welche Vorgänge der User gestartet hat, von welchen Clients aus er diese verfolgt, ob sie sich eventuell sogar überschneiden, welchen Status jeder Vorgangsfaden bereits erreicht hat und wie die Werte der zugehörigen Variablen im Moment sind. Ohne Sessions wird das kaum möglich sein.
Alternative wäre, alle Daten immer wieder zum Client zu schicken. Damit der User damit auf seinem Client keinen Unsinn anstellt, kann man sie verschlüsseln. Dazu müssten dann aber die Requests zweckmäßigerweise immer per POST-Methode ablaufen. Bei größeren Datenmengen macht das dann aber keinen Spaß mehr. Außerdem kann man auf diese Weise keine Vorgänge synchronisieren. Dafür benötigt man einen zentralen Speicherort.
Liebe Grüße aus Syburg
Tom vom Berg
echo $begrüßung;
ich habe folgendes Problem: ich habe drei Skripte
Das Problem ist lösbar. Mach dich mit der Technik namens Affenformular vertraut, dann hast du nur noch ein Script.
echo "$verabschiedung $name";
Hallo,
vielen Dank auch dir, diese Struktur ist mir bekannt und bei kleineren Aufgaben nutze ich dies auch, aber ich möchte aufgrund des Umfangs der Skripte der Übersichtlichkeit halber die einzelnen Aufgaben und Funktionen trennen.
mfg trunx++
echo $begrüßung;
» ich habe folgendes Problem: ich habe drei Skripte
Das Problem ist lösbar. Mach dich mit der Technik namens Affenformular vertraut, dann hast du nur noch ein Script.
echo "$verabschiedung $name";
echo $begrüßung;
aber ich möchte aufgrund des Umfangs der Skripte der Übersichtlichkeit halber die einzelnen Aufgaben und Funktionen trennen.
Du kannst den Code strukturieren, indem du Einheiten (Funktionen, Klassen, Templates) bildest, die jeweils eine bestimmte Aufgabe erfüllen. Diese kannst du auch in Dateien auslagern, die inkludiert werden können. Somit musst du die eigentliche Aufgabe nicht auf mehrere Dateien verteilen, was letzlich der Übersichtlichkeit besser dient. Die ausgelagerten Teilaufgaben kannst du bei geschickter Programmierung auch noch anderswo einsetzen.
echo "$verabschiedung $name";
moin,
Ich hätte nun gern eine Möglichkeit, die die Möglichkeiten 2. und 3. verbindet, also einen POST Request absendet und zugleich ein redirekt vornimmt. Gibt es sowas?
Zugleich nicht, aber nacheinander. Baue Dir eine Kontrollstruktur über die Parameter:
Hotte
Hallo,
danke für deinen Tipp, was genau meinst du mit Kontrollstruktur? Hast du einen Link, wo ich mir das mal näher ansehen kann? Ich habe das nicht wirklich verstanden...
bye trunx
moin,
» Ich hätte nun gern eine Möglichkeit, die die Möglichkeiten 2. und 3. verbindet, also einen POST Request absendet und zugleich ein redirekt vornimmt. Gibt es sowas?
Zugleich nicht, aber nacheinander. Baue Dir eine Kontrollstruktur über die Parameter:
- ohne Parameter wird ein header text/html gesendet und das Formular gezeigt;
- beim Absenden des Forms (POST oder GET) sind Parameter gesetzt, über die Kontrollstruktur erfolgt Deine gewünschte Aktion serverseitig und dann sendest Du einen redirection-header zur Antwort-Seite (die auch vom Script selbst erzeugt werden kann).
Hotte
Hallo,
danke für deinen Tipp, was genau meinst du mit Kontrollstruktur? Hast du einen Link, wo ich mir das mal näher ansehen kann? Ich habe das nicht wirklich verstanden...
Hier eine Kontrollstruktur in Perl. Mit PHP und jeder anderen Programmiersprache geht das latürnich auch.
CGI's die per Parameter gesteuert werden, erforden eine gute Überlegung, welche Parameter verwendet werden. Ich mache das immer so, dass ich mir zur Steuerung sog. Schlüsselparameter aussuche. Beispielsweise ist Name eines Submit-Butten solch ein Schlüsselparameter: Die Kontrollstruktur prüft, ob dieser Button geklickt wurde und lässt eine oder mehrere Statements oder Funktionen folgen wobei u.u. auch weitere Parameter abgefragt werden.
Eine gute Idee ist es auch, Buttons mit definierten und für den Besucher aussagekräftigen Values zu versehen, so:
input type='submit' name='mailsend' value='Mail senden'
Und nicht vergessen: Schau, dass Du alle Parameter auf Gültigkeit prüfst, ggf. gib eine entsprechende Meldung aus. Siehe o.g. verlinkten Artikel.
Hotte
Noch was:
Sofern über das gesamte Script dergleiche header gilt, beispielsweise
Content-type: text/html
kann der vorher ausgegeben werden, steht also über der Parameter-Kontrollstruktur.
Soll jedoch, Parameterabhängig, z.B. nach dem Senden eines Forms eine Umleitung (redirection) erfolgen, notiere die Ausgabe des entsprechenden headers _innerhalb_ der Kontrollstruktur.
Hotte