# $_POST Array löschen



## zempsit (28. März 2006)

Gibt es eine Variante das $_POST Array zu löschen, damit ein Benutzer, nachdem er das Formular ausgefüllt hat, nicht einfach auf F5 drücken kann und alles vollspamt?

Mit unset() geht es jedenfalls nicht.

mfg zempsit


----------



## NomadSoul (28. März 2006)

Nein da F5 das Formular erneut abschickt.


----------



## fanste (28. März 2006)

Leite einfach, nachdem du die Daten ausgewertet hast, mit header() auf die gleiche Seite nochmals um. Wenn du vor header() schon etwas ausgegeben hast, musst du die Ausgabe puffer (ob_start());

Hier noch ein kleines Beispiel

```
ob_start(); #Falls eine Ausgabe vor dem Header unten erfolgt. Ansonsten kann das weg.

#POST Daten verarbeiten
foreach($_POST as $key=>$value)
{
    echo $key.": ".$value."<br>"; #Hier hätten wir z.B. solch eine Ausgabe!!
}

header("Location: ".$_SERVER['PHP_SELF']);

ob_end_flush(); #Falls eine Ausgabe vor dem Header erfolgte und darum ob_start() gesetzt wurde, musst du das gepufferte natürlich auch wieder rauslassen!
```


----------



## StefanR (28. März 2006)

Oder du machst es mit CAPTCHA-Images.


----------



## Gumbo (28. März 2006)

Captchas schützen jedoch nicht vor dem nicht-gewünschten Wiederholen einer Post-Anfrage des Browsers, Stefen. Fanstes Vorschlag geht schon in die richtige Richtung.


----------



## StefanR (28. März 2006)

Gumbo hat gesagt.:
			
		

> Captchas schützen jedoch nicht vor dem nicht-gewünschten Wiederholen einer Post-Anfrage des Browsers, Stefen. Fanstes Vorschlag geht schon in die richtige Richtung.


Ich heiße aber nicht Stefen.  Wenn ich den CAPTCHA Wert aber in ne Session pack und die Session- Var nach dem abschicken lösche schon!  Ist auf jeden Fall schneller, als ne Seite nochmal neu zu laden die die riesen Querys ausliest... Selbst wenn man das ganze cached...


----------



## grkpfl (29. März 2006)

Mach doch einfach folgendes:

Wenn der user das formular betritt
eine Session-Variable setzten...
wenn er es dann abschickt, nur abschicken wenn die session-Variable nich leer ist, und dann die session-Variable leeren


----------



## StefanR (29. März 2006)

grkpfl hat gesagt.:
			
		

> Mach doch einfach folgendes:
> 
> Wenn der user das formular betritt
> eine Session-Variable setzten...
> wenn er es dann abschickt, nur abschicken wenn die session-Variable nich leer ist, und dann die session-Variable leeren



Das würde er ja denn mit dem CAPTCHA machen, hat er gleichzeitig auch noch nen kleinesn Schutzt gegen dos.


----------



## zempsit (29. März 2006)

Aber wie kann ich dann das mit dem Header anstellen. Weil in der ersten Zeile muss ja der Dokument-Type stehen?

mfg zempsit


----------



## Gumbo (29. März 2006)

Bei einer Umleitung mittels „Location“-Header-Feld ist das Senden des Inhalts unnötig, da er nicht dargestellt wird. Daher ist auch eine Klassifizierung mittels Media-Typs unnötig.


----------



## zempsit (30. März 2006)

Ja, aber ich habe diese Dokument bisher mit PHP includet. Aber, wenn ich es mir genau überlege, muss ich das ja gar nicht, da es ja keine Ausgaube hat. Dann sieht der Benutzer halt für einen Bruchteil einen weissen Bildschirm.

mfg zempsit


----------



## zempsit (30. März 2006)

Ist es möglich mit dem Header auch noch ein Array mitzuschicken? Es handelt sich nämlich um ein Formular, welches auf Fehler überprüft wird. Die richtigen Daten sollen aber dennoch wieder im Formular eingetragen sein, wenn es einen Fehler entdeckt.

mfg zempsit


----------



## fanste (30. März 2006)

Um ein Array über die URL mitzugeben, könntest du die Funktionen serialize() bzw unserialize() anschauen.


----------



## Gumbo (31. März 2006)

Falls du Daten versteckt von einem Skript zu einem anderen transportieren möchtest, arbeite lieber mit den PHP-Sitzungen. Damit lassen sich beliebige Werte serverseitig speichern.


----------



## zempsit (31. März 2006)

Ja, schon. Aber da habe ich das Problem, dass die Seite mit dem Formular in einer Seite includet wird. Es gibt also das "Header already sent" Problem.

mfg zempsit


----------



## Online-Skater (31. März 2006)

Ich würde es nur mit Sessions machen.
Eine Session-Variable einen Wert zuweisen wenn er abgeschickt hat und natürlich den Wert im Script abfragen. 
Ganz simpel und erfüllt seinen Zweck.


----------



## fanste (31. März 2006)

Dann schreib halt in das Script, indem du die Seite includest das session_start(). Oder packe um alles einen Output-Puffer (klicke hier)


----------



## zempsit (31. März 2006)

Ich habe das Formular jetzt einfach in ein Popup-Fenster gemacht. Dann bekomme ich auch keine Probleme mit "headers already sent" und kann Sessions nutzen.

mfg zempsit


----------



## rollo27 (6. April 2006)

Deine Lösung, Fanste, führt bei mir zum Fehler "Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann." (Firefox). Scheint mir auch logisch: der Selbst-Aufruf durch den header()-Befehl wird nie übersprungen. Und wann soll man bei ob_end_flush() ankommen, wenn vorher der Rücksprung erfolgt?

Oder ich verstehs bloß nicht :-(.
Ralph


----------

