|
|
|
|
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 !
L'urgent est fait, l'impossible est en cours,
Pour les miracles, prévoir un délai ...Configuration: Linux
Firefox 2.0.0.6
Salut,
si $_SESSIONS['soumission'] existe_pas
alors : envoi du mail ; autre actions; $_SESSIONS['soumission'] = "soumis" ;
sinon
($_SESSIONS['soumission'] existe (= soumis)...)
alors je sors de la boucle car le formulaire a deja été soumis
Forcément... ©brupala : Le méchant nounours ©Moi |
Re,
//Création signature MD5
$signnc=$nom.$prenom.$adresse;
$sign=md5($signnc);
// Session
session_start();
if($_SESSION['md5']==$sign)
{
}
else
{
$_SESSION['md5']=$sign;
mail(....);
....
....
}
Et ça a l'air de marcher : http://cjoint.com/data/lboQO2HGLH_sess.png Néanmoins : 1- si la signature (md5) est identique à $sign, je voudrais qu'il ne se passe rien .... à part terminer l'exécution du script lancé lors du premier clic sur "valider". Or ici (et même problème avec break ou exit), si je clique plusieurs fois sur "valider", je me retrouve avec une page blanche, chose qui n'arrive pas si je ne clique qu'une fois. Est-ce que le 'nouveau' script lancé par le second clic sur "valider" a "annulé" l'exécution du premier script ? A mon sens oui, puisqu'ils ont le même nom de fichier. Comment pourrais_je éviter cela ? 2- Je voudrais comprendre un peu plus les choses : Qu'est-ce que c'est, au final, que la session ? Est-ce que, (graphiquement, voir lien ci-dessus) elle correspond au dossier ayant pour nom le domaine ? Dans ce cas-là une session n'expire jamais alors ? Ce sont les variables stockées à l'intérieur qui expirent ? Comment se fait-il que la variable (que j'ai appelé ici md5) ne soit nommée nulle part ? Correspond-elle au fichier PHPSESSID ? N'est-ce pas plutôt la session ? Enfin, je m'embrouille :-/ Merci :-)) L'urgent est fait, l'impossible est en cours, Pour les miracles, prévoir un délai ... |
Hello,
|
Salut,
|
Bonjour,
|
Le click "valable" générera une page de confirmation, après ton traitement, et pas forcément via un header
|
J'ai fini par choisir la solution de facilité : Avec Javascript : http://www.journaldunet.com/developpeur/tutoriel/dht/031202_javascript.shtml
|
Coucou ! :-)
|