fastix®: Doppelklick bei Formularen verhindern / Reloadsperre + Redirect

Beitrag lesen

Moin!

Die Antwort hast Du schon gegeben:

Formular.php

<?php session_start()  
$_SESSION['unique']=false;  
  
function myUnique() {  
  if isset($SERVER['UNIQUE_ID']) {  
      return $SERVER['UNIQUE_ID'];  
  } else {  
      return md5($_SERVER['SERVER_ADDR'].microtime().rand(1000,9999));  
  }  
}  
  
?>

<form method="POST" action="/auswert.php">
<input name="unique" type="hidden" value="<?php myUnique(); ?>">
...

auswert.php:

<?php  
session_start();  
if (isset($_POST['unique'] && $_POST['unique']==$_SESSION['unique']) {  
  echo '<h1>Hoppla. Schon gesendet!</h1>';  
  /*  
   Oder was immer Du dann tun willst. Sorge auf jeden Fall dafür, dass hier Schluss ist:  
  */  
  exit;  
}  
# else  
$_SESSION['unique']=$_POST['unique'];  
/*  
 tu dies, tu das ... aber sende nichts!  
*/  
header('Location: http://'.$SERVER['HTTP_HOST'].'/antwort.php")  
?>

antwort.php:

<?php  
/*  
 load all your stuff into a fine template, send this and exit.  
*/  
?>

Gegen mehrfaches Klicken des Submit-Buttons muss man meines Wissens nichts unternehmen.

Wenn Du es ganz hart nehmen willst, dann bilde über alle Elemente von $_POST einen String, jage den durch md5() und speichere das in einem versteckten Formularfeld. Alternativ kannst Du unique id (oder eine Kombination aus IP-Adresse des Senders und microtime(), sowie einen Zufallswert nutzen, ebenfalls durch md5() jagen und im Formularfeld speichern.

Kommt die Anfrage rein, dann schaue nach, ob der unique-Wert in der Session steht. Wenn nicht werte die übrigen Daten aus und schreibe ihn in die Session damit er beim zweiten Versuch drin steht. Leite gleich zu einer Antwort-Seite weiter. Braucht die antwort.php Daten, dann schreibe diese in der auswert.php in die Session.

Steht in $_SESSION['unique'] und $_POST['unique'] drin, dann wurde doppelt gesendet, breche auf geeignete Weise ab.

Das obige ist ein Beispiel und nicht getestet. Es kann fehlerhaft sein.

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix