2010-09-01 5 views
9

J'ai une forme simple php, comme ceci:Prévenir la forme d'être soumis deux fois

<?php 

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

le problème est que si j'actualisez la page après que je soumets la forme, il se soumis deux fois. Comment puis-je empêcher cela?

Répondre

16

Vous devez effectuer une redirection vers une page avec un message que les données ont été insérées ... et un bouton retour pour aller à nouveau le formulaire (si vous voulez) ...

pour rediriger l'aide PHP utiliser la fonction header:

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

Ceci est d'ailleurs appelé le [Post-Redirect-Get pattern] (http://en.wikipedia.org/wiki/Post/Redirect/Get). – BalusC

+1

merci. mais maintenant j'ai un autre problème :) J'ai ajouté 'header ('Location: http://www.example.com/?formsent=1');', et je vérifie '$ _GET ['formsent'] 'pour afficher un message de réussite. Le problème est que si je rafraîchis la page je reçois le même message de succès :) – Alex

+1

et le problème est? ... Je ne vois pas cela comme un problème, car il ne manipule aucune donnée sur la base de données. –

3

Effectuer une redirection après les données sont insérées à une page de confirmation (qui peut être fait avec header(), qui devrait effacer les données POST et permettent de rafraîchir sans dupliquer le contenu.

2

Dans le cas où l'utilisateur est en retard et qu'il appuie plusieurs fois sur le bouton Soumettre, alors utilisez le mécanisme côté client, utilisez js pour désactiver le bouton Soumettre une fois que vous avez cliqué dessus. mais devra afficher un message disant à peu près quelque chose comme, "envoi de message ... si aucune réponse pls recharger la page et réessayer".

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

Veuillez donner quelques explications sur ce qui se passe dans le code. Le dumping de code est mal vu ici. – rayryeng