2010-09-01 15 views
9

Ho un semplice modulo php, come questo:Impedire modulo venga presentata due volte

<?php 

if(isset($_POST['myform'])) 
    // email... 
else 
    // display form 

il problema è che se mi aggiorna la pagina dopo aver inviato il modulo, esso viene presentato due volte. Come posso evitare che ciò accada?

risposta

16

Si consiglia di eseguire un redirect ad una pagina con un messaggio che è stato inserito i dati ... e un pulsante indietro per andare direttamente al form di nuovo (se si vuole) ...

per reindirizzare utilizzando PHP utilizzare la funzione header:

header('Location: http://www.example.com/'); 
+7

Questo è il cosiddetto [Post-Redirect-Get pattern] (http://en.wikipedia.org/wiki/Post/Redirect/ Get). – BalusC

+1

grazie. ma ora ho un altro problema :) Ho aggiunto l'intestazione '(Location: http://www.example.com/?formsent=1 ');', e sto verificando per '$ _GET [' forment '] 'per visualizzare un messaggio di successo. Il problema è che se aggiorno la pagina ottengo lo stesso messaggio di successo :) – Alex

+1

e il problema è? ... non lo vedo come un problema, in quanto non manipola alcun dato sul DB. –

3

eseguire un redirect dopo i dati vengono inseriti in una pagina di conferma (può essere fatto con header(), che dovrebbe cancellare i dati POST e consentire rinfrescante senza duplicare il contenuto.

2

Nel caso in cui l'utente abbia ritardo e preme il pulsante di invio alcune volte, quindi forse usa il meccanismo del lato client, usa js per disattivare il pulsante di invio una volta fatto clic. ma dovrà visualizzare un messaggio che dice approssimativamente qualcosa come "invio di un messaggio ... se non vi è alcuna risposta, ricaricare la pagina e riprovare".

1
session_start();  
if (!$_SESSION['REQUEST_TYPE_USER_ID'] == $_POST) 
{ 
//your code 
//after the success process 
    $_SESSION['REQUEST_TYPE_USER_ID'] = $_POST; 
} 
else 
{ 
// request duplicated 
} 
+0

Si prega di fornire alcune spiegazioni su cosa sta succedendo nel codice. Il dumping di codice è disapprovato qui. – rayryeng

Problemi correlati