$_POST wieder löschen

Kona

Mitglied
Hallöchen zusammen. Willkommen zu einer weiteren Folge von "Konas lustige Fragestunde". Heute:

Wie kann ich die Daten, die in $_POST enthalten ist, wieder löschen? Ich hab schon so ein paar Ideen gehabt, aber die haben alle nicht gefruchtet ...
 
Wat willste machen?

Post Daten werden vom Client übermittelt und dann per php Interpreter in die globale Variable (Array) $_POST geschrieben ;-)

Wenn du den Wert einerVariablen aus dem Speicher löschen willst, probier mal unset($var);

Aber hier ist die Frage nach dem Sinn wieder mal angebracht, klar, du kannst den Speichen schonen, aber das Skript sollte nicht länger als 1 sek laufen dann ist der Speicher sowiso wieder geleert ;-)

Lg, Yanick
 
den Sinn den ich z.B. sehe ist das z.B. wenn Daten gesendet wurden und dann meinetwegen eine Message kommt: Erfolgreich !
Das de rUser dann aktualisieren drücken könnte und schon steht der Eintrag 2mal in der DB bzw mehrmals ...

Natürlich kann man mit Sessions arbeiten aber is das elegant ? :(
 
Also meinem bisherigen Verständnis nach werden die Daten aus dem globalen Array $_POST in den HTML-Header geschrieben und so übermittelt. Den müsste ich jetzt manipulieren, aber ich weiß nicht wie.

unset() bringt da leider nichts, das hab ich schonmal ausprobiert.


Es wäre halt praktisch, wenn man die $_POST so einfach mit ein oder zwei Befehlen löschen könnte. Denn ansonsten kostet das schon um einiges mehr Aufwand herauszufinden, ob die Daten bei einem Refresh einer Seite veraltet sind und nicht nochmal gesendet werden sollen oder ob sie doch aktuell sind und verwendet werden sollen.


Ich denke, der Warenkorb ist dabei das geläufigste Beispiel.
 
Warum nicht einfach nach Auswertung der Daten per header() auf die gewuenschte Seite (es kann ja durchaus auch die gleiche sein) umleiten? Dann hat man keine Probleme mehr mit dem Reload.
 
Achso.. $_POST ist jedesmal neu, wenn eine Seitenanfrage gesendet wird.
Bei einem Warenkorb nimmst du das was der User übermittelt (kommt in Post rein) und legst es in der Session ab... nun kannst du $_post löschen sooft du willst.. wenn der user die seite refresht kommt das zeug tatsächlich neu... abhilfe z.b.:
Wenn due dem user eine Seite präsentierst lege ein hidden field mit uniqueid() an...
sobald du aus $_post etwas in $_Session einlagerst kannst du mit der uniqueid prüfen ob die seite schon einmal etwas gesendet hat... es gibt sicher noch bessere ansätze aber das fällt mir grade so ein....
 
Wie gesagt, die einfachste Variante wird wohl header() darstellen. Du kannst ja hier im Forum mal probieren Deine Nachricht per F5 nochmals abzuschicken. ;)
 
Ja tatsächlich ist das ne gute Lösung aber nur wenn man vorher nichts gesendet hat an html kram und das ist hmm naja ich will nicht sagen unmöglich aber deine Seite sieht dann ziemlich weiß und leer aus oder :suspekt:
 
Zuletzt bearbeitet:
Klar darf vorher nichts ausgegeben worden sein.
Eine von mir sehr gerne benutzte Mathode siht im Groben etwa so aus:
PHP:
<?php
	
	// Anfang des Scripts.
	// Vorher dürfen KEINERLEI Ausgaben gesendet worden sein
	
	session_start();
	
	// Reaktion auf Submit NUR wenn ein Formular submittet wurde:
	// ----------------------------------------------------------
	if (!empty($_POST)) {
		
		// Es wurde ein Formular abgesendet, dessesn Daten werden
		// innerhalb des if-Blocks nach eigenem Gusto verarbeitet,
		// z.B. Datenbank-Aktionen oder dergleichen.
		// Hier nur ein primitives Beispiel:
		include('../dbparams.inc.php');
		$con = mysql_connect($host, $user, $pw) or die('So nicht!');
		mysql_select_db($db, $con) or die('So auch nicht!');
		
		$_POST['id']   = mysql_real_escape_string($_POST['id']);
		$_POST['feld'] = mysql_real_escape_string($_POST['feld']);
		
		$sql = "UPDATE `tabelle` SET `feld` = '".$_POST['feld']."' WHERE `id` = '".$_POST['id']."'";
		mysql_query($sql, $con) or die('So erst recht nicht!');
		
		mysql_close($con);
		
		// POST ins SESSION umschreiben, um die Werte im späteren Seitenaufbau
		// zu verwenden, um z.B. die vom User eingetragenen Daten wieder in das
		// Formular zu füllen:
		$_SESSION['post'] = array(
			'thispage'		=> $_SERVER['PHP_SELF'],  // das ist wichtig, wenn man diese Technik auf mehreren Seiten anwendet.
			'id'  			=> $_POST['id'],
			'feld'			=> $_POST['feld']
		);
		
		// Seite neu laden, diesmal ohne POST:
		header('Location: '.$_SERVER['PHP_SELF']);
		die('Hier sollten wir niemals ankommen!');
		
	} // end if Reaktion auf Submit
	// ----------------------------------------------------------
	
	// Ist Form-Session auch von dieser Seite?
	if (!empty($_SESSION['post']) && $_SESSION['post']['thispage'] != $_SERVER['PHP_SELF']) unset($_SESSION['post']);
	
?>

<!-- Hier kommt jetzt der ganz normale Seitenaufbau -->
So kann der User ein Formular absenden, dessen Action-Ziel die eigene Seite ist und er kann danach nach Herzenslust reloaden oder auch per Back-Button wieder hier herkommen - er wird niemals durch eine "Das Formular wurde bereits abgeschickt... Wollen Sie wirklich...?"-Fehlermeldung verunsichert werden.
 
Zurück