no save
Assistance
Achat
News

Forum | webmastering
[PHP] empêcher de valider 2fois un formulaire
Yoan, le dim. 28 oct. 2007 à 12:30:31
Bonjour,

J'ai un formulaire HTML qu'un utilisateur doit remplir. Cliquer sur "Valider" appelle un script PHP qui, entre autres, envoie un mail. Chaque soumission de données par l'intermédiaire du formulaire est identifiée et rendue unique aux yeux du serveur par une signature md5 (du coup le formulaire remplit par DUPONT Joseph, 2 rue des Platanes, 75000 PARIS et celui de DUPONT Joseph Lieu dit les embruns 69000 LYON auront une signature différente). Le problème est que, durant le temps où l'utilisateur clique une première fois sur "envoyer" et jusqu'au moment où le script PHP termine son exécution et informe l'utilisateur que sa demande a été envoyée, celui-ci a le temps de cliquer encore plusieurs fois sur "Valider". De ce fait, le script est exécuté à nouveau, autant de fois que l'utilisateur a cliqué. De ce fait, certaines fois 5 mails sont envoyés pour un utilisateur unique.

Je cherche donc à y remédier, sachant que je n'utilise aucune base de données (et je voudrais en n'utiliser aucune), et que le seul moyen d'identifier des "doublons" c'est de différencier le hash. Je pensais qu'il serait possible de créer un fichier par exemple antidoublons.txt (dans lequel seraient enregistrés les hashs en cours). Au début du script je vérifie qu'aucun hash identique à celui que je vais traiter n'est trouvé dans ce fichier, si c'est le cas je poursuis l'exécution du script, sinon je ne fais rien. A la fin du script, je supprime le hash correspondant à le demande traitée.

Mais cela impose :
* l'ouverture/Ecriture d'un fichier
* l'utilisation de la recherche avec des expressions régulières deux fois (une première pour vérifier que la signature n'existe pas, une seconde pour la supprimer)

Et au final ça risque d'allonger énormément la durée d'exécution du script. Et puis je suis pas sûr que ça fonctionne merveilleusement bien, surtout dans le cas où plusieurs demandes seraient effectuées "en même temps".

Y aurait-il une solution plus simple ? Je suis eprduadé que oui :)
Merci !



gryzzly
oct. 07
Suivant
REPONSES
gryzzly
oct. 07
Yoan
oct. 07
Yoan
nov. 07
gryzzly
nov. 07
Alain42
nov. 07
gryzzly
nov. 07
Yoan
nov. 07
Yoan
nov. 07
gryzzly
nov. 07
Version Web
Réalisé par RedShift
no save