$_POST wieder löschen

Hallo,

ManicMarble hat gesagt.:
PHP:
		// Seite neu laden, diesmal ohne POST:
		header('Location: '.$_SERVER['PHP_SELF']);
		die('Hier sollten wir niemals ankommen!');
Um eventuellen Missverständnissen vorzubeugen: das Stringargument bei [phpf]die[/phpf] ist hier etwas irreführend. Man könnte meinen, der alleinige Aufruf von [phpf]header[/phpf] würde dazu führen, dass die Umleitung erfolgt und die Ausführung des Skripts abgebrochen wird (und somit die Zeile mit [phpf]die[/phpf] nie erreicht wird). Tatsächlich ist es aber so, dass der Aufruf von [phpf]die[/phpf] zum Abbruch des Skripts führt. Ich bin mir sicher, dass du das selbstverständlich weißt und nur den String etwas unglücklich gewählt hast. Aber wie gesagt: nur um Missverständnissen vorzubeugen :)

Grüße,
Matthias
 
Die Funktion sieht gut aus. Die werde ich so bald wie möglich ausprobieren.

Weil eine Abfrage, ob die $_POST-Daten noch aktuell sind, ist ziemlich aufwendig. Das hab ich mal mit Timestamps realisiert, basierend auf Cookies und ich hab mir - zugegebenermaßen hab ich da meine ersten Schritte in PHP gmacht - einen Wolf gecodet, bis es am Ende geklappt hat. Aber diese Funktion sieht bei weitem einfacher aus.

Ich werd mich melden, wie es geklappt hat. :)
 
Matthias Reitinger hat gesagt.:
Man könnte meinen, der alleinige Aufruf von [phpf]header[/phpf] würde dazu führen, dass die Umleitung erfolgt und die Ausführung des Skripts abgebrochen wird (und somit die Zeile mit [phpf]die[/phpf] nie erreicht wird). Tatsächlich ist es aber so, dass der Aufruf von [phpf]die[/phpf] zum Abbruch des Skripts führt. Ich bin mir sicher, dass du das selbstverständlich weißt und nur den String etwas unglücklich gewählt hast.
Danke Matthias, der Text sollte natürlich heißen "Dieser Text sollte nie ausgegeben werden" oder so ähnlich. Ohne das die() funktioniert das Ganze logischerweise nicht.
 
Es funktioniert auch ohne die(). Nur wird dann halt erst noch der Rest des Scripts abgearbeitet, was ja in dem Fall nicht wirklich Sinn macht.

Ich bevorzuge an dieser Stelle uebrigens exit anstelle von die(). die() ist da irgendwie zu brutal, das nehm ich lieber fuer Fehlerfaelle.
 
Hm, das ganze ist ja eine schöne Funktion, die allerdings eines voraussetzt: session.auto_start = On. Ist aber bei mir nicht. Also lokal schon, aber auf dem Webserver, auf dem das Skript laufen soll nicht.

Ich mach das jetzt anders: Ich beschreibe meine Problemstellung und dann bin ich für Tipps und Ratschläge offen.

Ich möchte ein Blog schreiben, dass Doppelposts verhindert. Für jeden Eintrag soll man sich extra anmelden. Das klappt soweit auch, bis eben auf die bösen Zurück-Buttons vom Browser. Diese möchte ich damit austricksen, dass ich die Seite, die die Daten ins Blog schreibt, nach dem Schreiben verfallen lasse. Das Schema sieht so aus:

eintrag_hinzu.php: Formular für den Eintrag.
eintrag_schreiben.php: Skript, das die Daten schreibt. Daten sollen verfallen. Danach redirect zur Anzeigeseite.
eintrag_anschauen.php: Anzeigeseite.

Wenn jetzt jemand von eintrag_anschauen.php per Zurück-Button auf die eintrag_schreiben.php oder die eintrag_hinzu.php zugreift, soll die Meldung kommen, dass die gewünschte Seite nicht mehr aktuell ist.

Deswegen hab ich die Idee mit dem löschen der $_POST-Daten gehabt, aber irgendwie sperre ich mich entweder selber aus meinem Script oder alle Türen sind offen. Da steh ich irgendwie auf der Leitung. Kann mir mal bitte einer runterhelfen? *g*
 
header() hat nichts mit Sessions zu tun.
Und selbst wenn Du bei der Weiterleitung mit header() Daten in der Session festhalten willst (ich frag mich nur wofuer), dann kannst Du die Session doch auch mit session_start() starten. Auf den Autostart der Session sollte man sich eh nicht verlassen. Wenn man mit Sessions arbeiten will, dann nutzt man eben session_start(), egal wie jetzt die Autostart-Option gesetzt ist.
 
Ups, da hab ich mich wohl missverständlich ausgedrückt. Ich will die Daten nicht mit header() in der Session festhalten. Überhaupt ist das mit der Session recht blöd in diesem Fall, da ich zwar die Session brav gestartet bekomm, aber sich das Löschen der Session bei geöffnetem Browserfenster als sehr aufwendig gestaltet. Meist bleibt die Session trotz session_unset() oder session_destroy() noch aktiv (so hab ich es jedenfalls bei meinen Tests rausgefunden).

Allerdings fand ich es etwas komisch, dass ich trotz session_start() nicht auf $_SESSION zugreifen konnte. Bei Abfragen wie

Code:
if (!emtpy($_SESSION)) {
   echo "Hier spricht die Session!";
}

oder
Code:
if (isset($_SESSION)) {
   echo "Hier spricht wieder die Session!";
}

kam keine Antwort. Deswegen bin ich drauf gekommen, dass es an session.auto_start()=off liegt.

Aber ich hab das Gefühl, das führt unter diesem Thema zu weit. Die $_POST-Daten lassen sich mit der Weiterleitung löschen, und damit ist ja die Frage an sich auch behandelt. Sollte es sich so ergeben, dass das andere noch Probleme macht, naja, dann kann ich ja immernoch ein eigenes Thema dafür aufmachen.

Danke jedenfalls euch allen, die ihr mir da geholfen habt.
 
Zurück