Ciao,
per gestire i casi di doppio submit di solito si fa qualcosa del genere.
Se non vuoi assolutamente avere duplicati nel db, devi fare un controllo con una query.
Però questo controllo deve essere l'ultima spiaggia (meglio evitare query inutili) quindi prima di tutto assicurati che l'utente non abbia fatto refresh.
1) Dopo il submit e l'inserimento nel db fai un redirect su una pagina di destinazione
2) Per evitare che l'utente faccia click sul tasto back del browser e poi comunque rifaccia il submit utilizza le sessioni
Potrebbe essere qualcosa del genere, butto lì ma dovrebbe andare bene
codice:
function submit_status($nomeCampoHidden)
{
$hiddenContent = trim(@$_REQUEST[$nomeCampoHidden]) ;
$giaInviato = @$_SESSION[$nomeCampoHidden] ;
$quanteVolte = 0 ;
//se c'è invio
if( isset($hiddenContent) )
{
//se e' il primo invio
if( $giaInviato !== $hiddenContent )
{
$_SESSION[$nomeCampoHidden] = $hiddenContent ;
$quanteVolte = 1 ;
}
//se e' il secondo invio non va bene
else
{
$quanteVolte = 2 ;
}
}
return $quanteVolte ;
}
$page_after_submit = 'http://www.miosito.com/miapag.php' ;
session_start() ;
$status = submit_status('nascosto') ;
switch($status)
{
case 1:
//debug
//echo $status ;
/*
primo invio: eventualmente controllo con una query che i dati non siano duplicati,
aggiorno il db e poi redirect ;
*/
//session_write_close() ;
//header('Location: $page_after_submit') ;
break ;
case 2:
//debug
//echo $status ;
//secondo invio non aggiorno il db
//e gestisco il problema
break ;
default:
//debug
//echo $status ;
//non c'è stato ancora alcun invio, siamo al momento iniziale, mostro il form
}