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