$_POST + Nur 1mal ausführen

oldputz1990

Erfahrenes Mitglied
Hallo!

Folgendes Problem:

Ich schreibe einen Gästebuch eintrag.
Der Beitrag wird mittels POST an die 2. Seite weitergeleitet.
Dort wird ausgegeben, dass der Eintrag erfolgreich übernommen worden ist.

Das lesen jetzt die meisten Leute, und gehen im Browser auf "Zurück".
Dann wird dass ganze nochmal ausgeführt.

Wie kann ich das verhindern?

(Wenn das passiert, werden 2mal die gleichen Einträge in die DB geschrieben)

Danke!
 
Dafür gibt es unterschiedliche Ansätze wie etwa eine Umleitung nach erfolgreicher Aktion oder ein zufälliger Autorisierungsschlüssel (benötigt erfolgreiche PHP-Sitzung, kann aber auch begrenzt vor Spam schützen). Am besten du nutzt beides.
 
Das Prinzip ist einfach: Bei jedem Formularaufruf wird ein zufälliger Schlüssel generiert, der gleichzeitig im Formular und in der Sitzung notiert wird. Vor dem Verarbeiten der Formulardaten werden beide Schlüssel verglichen. Sind sie identisch, ist alles in Ordnung; sind sie nicht identisch, wird die Verarbeitung der Formulardaten abgebrochen. War die Verarbeitung erfolgreich, wird der Schlüssel aus der Sitzung gelöscht, damit bei Wiederaufruf eine wiederholte Verarbeitung nicht möglich ist. Die Formularseite muss also neu geladen werden, damit beide Schlüssel wieder übereinstimmen können.
 
Beim Formular wird ein Schlüssel erzeugt.
--> abschicken

seite2: was wird da überprüft?

Danke!

(Ich steh grad etwas auf der Leitung!)
 
Ein einfaches Beispiel:
PHP:
$_SESSION['authid'] = md5(uniqid(rand()));
echo '<input type="hidden" name="authid" value="'.$_SESSION['authid'].'">';
PHP:
if( empty($_POST['authid']) || empty($_SESSION['authid']) || $_POST['authid'] !== $_SESSION['authid'] ) {
    echo 'Ungültige Aktion!';
}
 
Hy ich bin neu hier. Hab eben ma deinen Beitrag gelesen. Und an deiner Stelle würd ich einfach überprüfen lassen ob der Name mit diesem Text schon in der Datenbak drin steht.

PHP:
$query = "SELECT * FROM `GB` WHERE `name` = '".$_POST['name']."'";
$quer = mysql_query($query) OR die(mysql_error());
while($result = mysql_fetch_object($quer)) {
	
	if(strtolower($_POST['name']) == strtolower($result->name) && strtolower($_POST['text']) == strtolower($result->text)) {
		
		echo 'Ein Identischer Eintrag ist bereits vorhanden.';
		echo"<a href=http://deine-seite.de">Zurück zur Hauptseite</a>;
                exit;
                
	}

Und ich würd halt noch einen Link zur Hauptseite einbauen. Dann kommen die LEute garnich ers auf die idee den Zurück button zu nehmen


Ich weiß nich ob dir das weiter Hilft aber kannst ja ma gucken

LG Nino
 
Zuletzt bearbeitet:
Zurück