Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2007, 16h10   #1
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
Par défaut F5 et empêcher l'exécution du script déjà effectué

Bonjour,

j'ai un souci avec un formulaire basique sur une page A qui une fois validé (par du js) exécute un page B pour envoyer un mail et enregistrer des données dans un BDD.
Tout fonctionne très bien sauf que je viens de m'apercevoir que si l'utilisateur fait un refresh de la page B, le script est de nouveau exécuté.... ce qui provoque des doublons et des envois de mails inutiles... bref c'est naz !

Comment faire donc pour empêcher cela ?

Au départ, j'avais pensé à utiliser un variable cachée pour valider l'exécution du script :
Code HTML :
<input type="hidden" name="action" value="submitted" />
que page B vérifie :
Code :
1
2
3
4
5
6
if($_POST['action'] == 'submitted') {
    // OK
    unset($_POST['action']);
} else {
    // innattendu ou formulaire déjà exécuté
}
mais cette idée ne fonctionne pas....

Une idée pour m'aider ?
Merci d'avance

@+
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 08h53   #2
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
Bonjour,

Personnellement j'utilise des variables de session pour savoir si mon formulaire à deja était envoyé

Code :
1
2
3
4
5
6
7
8
9
10
11
<?php 
session_start();
if(!isset($_SESSION['bSubmit']))$_SESSION['bSubmit'] = false;
 
if($_POST['action'] == 'submitted' && !$_SESSION['bSubmit']) {  
	$_SESSION['bSubmit'] = true;
// OK  unset($_POST['action']);.
 } else {  
 // innattendu ou formulaire déjà exécuté 
 }
 ?>
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 13h12   #3
Invité de passage
 
Inscription : juin 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 10
Points : 2
Points : 2
Hmm moi je fais comme ca :

Code :
1
2
3
4
5
6
7
8
 
<?php 
if($_POST['action'] == 'submitted') {  
   // Ce que tu dois faire, mail, insertion bdd, etc...
   header('Location:lapageoutes.php');
} else {  
}
?>
La redirection avec le header permet de ne plus pouvoir renvoyer les données POST en cas de F5. Par contre faut pas d'affichage avant, c'est a dire qu'il faut que ca soit en haut de ta page avant tout écho.
astro84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 18h25   #4
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
merci pour vos méthodes... je vais regarder ça de plus près lundi...

Merci beaucoup... je vous tiens au courant
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 19h44   #5
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
Salut
tout comme TucSale j'utilise les session pour valider la page de provenance ou l'action de provenance si c'est une redirection vers la meme page

Cette méthode est également très pratique pour controler le changement d'url par l'usager
ainsi si tu est à la page home.php et que tu entre dans ta barre d'adresse gestionmembre.php qui est une page de traitement seulement accessible a partir de gestion.php ben ca passera pas...alors tes validation de post vont pas planté non plus

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
//ex page infoDossierClosed accessible seulement via adminDossierClosed
if(isset($_SESSION['nom'],$_SESSION['pageProvenance']) && $_SESSION['pageProvenance'] == "adminDossierClosed.php" ){
  //page actuelle pour éviter le f5 ou le back
  $_SESSION['pageProvenance'] = "infoDossierClosed.php";
 ....
}
else if(!isset($_SESSION['nom'])){
  //sort
	header("location:login.php?erreur=2");
}
else if(!isset($_SESSION['pageProvenance']) || $_SESSION['pageProvenance'] != "adminDossierClosed.php"){
  //redirection vers page d'accueil
	header("location:home.php?mod=4");
}
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 21h16   #6
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 424
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 424
Points : 2 811
Points : 2 811
j'utilise toujours le même algo

ouvrir la session
y copier $_Request
fermer la session
rediriger var le traitement

ça prends trois lignes et c'est tellement rapide que le F5 ne provoque que le rafraichissement de la page suivante

de même mon script de traitement ne fait que la mécanique et redirige vers une page de réponse

si le traitement est rapide impossible de le réexécuter
s'il est plus lent j'utilise un uuid dans la session pour marquer que le traitement est déjà passé

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h12   #7
Acropole
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Et si les cookies sont bloqués ?
  Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h28   #8
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 424
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 424
Points : 2 811
Points : 2 811
il n'est pas nécessaire d'avoir de cookie pour utiliser les sessions
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h23.


 
 
 
 
Partenaires

Hébergement Web