Prevenire l’invio multiplo dello stesso form



Per prevenire l’invio multiplo dello stesso form c’è una tecnica abbastanza semplice che non richiede neanche l’uso di JavaScript.

Nella pagina del form, che chiameremo form_page.php, inseriamo il seguente codice:

<?
session_start();
$secret=md5(uniqid(rand(), true));
$_SESSION['FORM_SECRET']=$secret;
?>

Quindi inseriamo nel form il seguente campo hidden:

<html>
<input type="hidden" name="form_secret" id="form_secret" value="<?php echo $_SESSION['FORM_SECRET'];?>" />
</html>

In pratica viene creato un ID unico per il form, che ci basterà solo controllare nella pagina seguente:

<?
//Retrieve the value of the hidden field
$form_secret=$_POST['form_secret'];
if(isset($_SESSION['FORM_SECRET'])) {
if(strcasecmp($form_secret,$_SESSION['FORM_SECRET'])===0) {
/*Inserire il codice da eseguire qui, poi viene cancellata la variabile di sessione, in modo che il form non sia più eseguibile di nuovo.
*/
unset($_SESSION['FORM_SECRET']);
}else {
//Chiave segreta non valida!
}
}else {
//La chiave manca
echo 'Form data has already been processed!';
}
?>

Già dai commenti si può  il funzionamento del codice.

In pratica una volta effettuato il processo di invio del form, unsetta la variabile di sessione, in modo che ad invii successivi venga eseguto altro codice, che in questo caso informa che il form è stato già inviato.

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest