Page 1 sur 1
Supprimer des $_POST
Publié : 14 déc. 2006, 11:20
par guilhem_mdg
Bonjour,
Lorsque je clique sur le bouton "Envoyer" de mon formulaire, les infos contenues dans les champs du formulaire sont envoyées en POST.
Du coup, la page se recharge et des opérations s'éxécutent car
Le problème, c'est que si je recharge ma page, ces opérations vont se réexécuter et je n'en ai pas envie... Comment faire ?
Il faudrait sans doute arriver dans les opérations qui s'éxécutent pour la 1ère fois (avant rechargement de la page) à supprimer l'effet POST...
S'il vous plaît aidez-moi ... !!!
Merci !!
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Publié : 14 déc. 2006, 13:00
par martin
au pif, rajouter un champ caché (input de type hidden) , et tester sa valeur :
Code : Tout sélectionner
if (!empty($_POST['myHidden'])) {
//pas traiter
//mettre une value 'deja_traite' au champ caché
}
Re: Supprimer des $_POST
Publié : 15 déc. 2006, 13:49
par calimo
guilhem_mdg a écrit :Le problème, c'est que si je recharge ma page, ces opérations vont se réexécuter et je n'en ai pas envie...
Tu veux dire que l'utilisateur clique sur "Actualiser" ou F5 ?
La solution généralement adoptée est de rediriger vers une page de succès après le traitement. Ainsi, les informations POST sont irrémédiablement perdues (du côté de l'utilisateur, du moins).
Autre chose, quel traitement est fait ? Si c'est des insertions dans une base de données, il faut essayer de faire en sorte de ne pas pouvoir insérer plusieurs fois les informations. Pour cela, un bon découpage des tables et des
contraintes d'unicité bien ciblées permettront de résoudre le problème.
Selon l'ampleur du projet et le nombre de tables, l'utilisation d'un ORM peut t'être utile (en pho, voir
PHP Wiki). Pour d'autres choses, comme l'envoi d'un email, c'est vrai que c'est plus compliqué
Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8
Publié : 16 déc. 2006, 18:58
par FMaz
Il existe aussi une solution avec des nombres aléatoires.
C'est à dire que lorsque tu passe une première fois sur la page, le formulaire s'envoi à une adresse dont une variable à un contenu aléatoire.
Ensuite, lorsque tu recois le formulaire sur la seconde page pour traiter les résultats, tu dois:
1- Comparer la variable aléatoire avec la dernière variable aléatoire stocké en session.
2a - Si les deux corresponde, la personne à fait PRÉCÉDENT, fermer la session, lui afficher une erreur de sécurité.
2b - Si les deux ne correspondent pas, stocker la nouvelle variable aléatoire en session.
Note, il va sans dire que tu dois t'assurer, lors de la génération du # sur la première page, qu'il ne corresponde pas avec le # en session. Sinon, forcément, une fois sur 1 millions par exemple, une transaction échouera, ce qui pourrait signifier des pertes de profits, dépendamment du genre de site que tu gère.
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0