Supprimer des $_POST

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
guilhem_mdg
Lézard à collerette
Messages : 438
Inscription : 18 juin 2004, 09:13

Supprimer des $_POST

Message 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

Code : Tout sélectionner

$_POST['btEnvoyer']<>''
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
Cordialement.
Guilhem.
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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é
}
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Supprimer des $_POST

Message 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
FMaz

Message 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
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités