# erneutes Senden von $_POST verhindern



## Katzehuhn (13. Dezember 2005)

Kann man außer mit header("location:") das erneute senden der POST-Daten verhindern? bräuchte dies für ein Script, das nicht nochmal abschickbar seien soll.

thx vor help


----------



## Irgendjemand_1 (13. Dezember 2005)

Wie meinst du das?
Meinst du das Wiederholte absenden beim Refresh?
Ja, wenn du nach dem Senden der Daten zu einer anderen URL weiterleitest (oder zur Selben aufjedenfall halt weiterleiten), dann werden die beim Refresh nicht mehr abgeschickt.

Oder habe ich die Frage falsch verstanden?


----------



## Katzehuhn (14. Dezember 2005)

Jap hast du richtig verstanden, nur will ich dies ohne eine Umleitung schaffen da auf dieser Seite seeehr viel Text ausgegeben wird, den ich sonst in eine Session speichern müsste um ihn dann auf der nächsten Seite anzuzeigen. ( durchschnittlich wäre eine Session dann so 100kb groß, bei vielen Usern is das Mord^^)


----------



## Gumbo (14. Dezember 2005)

Kennst du schon den Antwortvorschlag der de.comp.lang.php.*-Newsgroup auf die Frage „Wie verhindere ich mehrfaches Absenden eines Formulars?“?


----------



## FipsTheThief (14. Dezember 2005)

Mhm ich hätte da auch noch 2 Vorschläge .

 1. Alle Post Daten einfach am Ende des Scripts rauslöschen oder nach erfolgreicher Bearbeitung mittels unset($_POST'...']);
 2. Man schickt die Daten an ein anderes Script fix rüber.Dort werden sie verarbeitet und dann machst einen Header der zurück an das alte Script geht.


----------



## Katzehuhn (14. Dezember 2005)

FipsTheThief hat gesagt.:
			
		

> Mhm ich hätte da auch noch 2 Vorschläge .
> 
> 1. Alle Post Daten einfach am Ende des Scripts rauslöschen oder nach erfolgreicher Bearbeitung mittels unset($_POST'...']);
> 2. Man schickt die Daten an ein anderes Script fix rüber.Dort werden sie verarbeitet und dann machst einen Header der zurück an das alte Script geht.



1. funktioniert mal nicht, das hab ich schon gemacht.
2. Ja und was mach ich dann mit den Daten die dieses Script ausgibt? Die sollen ja nicht verloren gehen und nicht unnötig gespeichert werden.


----------



## FipsTheThief (14. Dezember 2005)

Naja weiss ja nun nicht was dein erklärtes Ziel ist , aber wenn einer F5 drückt wird er eh immer alles neu reinladen also auch deinen gesammten Text  egal ob POST Daten gesetzt sind oder nicht das Script startet von vorne.

 Wenn musst Du nach einer Möglichkeit suchen den Text wo zwischen zuspeichern , welchen Du ja nun nicht in einer Session speichern willst. Aber wo kommt er denn sonst her ?


----------



## MiNiMaG (16. Dezember 2005)

Ich würde aber folgendes Vorschlagen, wenn du nur Doppelpost durch F5 oder "Zurück" verhindern und die Post-Daten in einer Tabelle speichern willst:

Eine "Post-ID" vergeben:

Funktionsprinzip:
-Beim Aufbau des Formulars wird dem form eine ID zugewiesen (und in DB um 1 erhöht)
-Beim Senden wird abgeglichen, ob es die ID schon gab
-ID wird mit den Formulardaten mitgespeichert

Funktionsweise:
Solange das Formular im Cache ist, kann das erneute senden geblockt werden.
Wenn der Nutzer das Formular an sich refresht oder es nochmal aufruft kann er direkt wieder posten.

Vorteil:
- Schnell und einfach zu realisieren


```
...
Abfrage ob $_POST(id) schon vergeben wurde
wenn ja $blocked = 1;
...
if ($blocked == 0)
  {
    Formulardaten speichern
  }
...
```


----------

