Rafraîchir

Résolu
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010 - 30 août 2007 à 14:34
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010 - 3 sept. 2007 à 12:46
Bonjour,
voilà j'ai un problème.
 J'ai un formulaire que je valide pour insertion dans MYSQL, jusque là tout va bien.
quand je fais un refresh de la page juste après avoir soumis la requete, le script se reexecute une deuxième fois !
du coup, j'ai des tentatives de INSERT avec les mêmes clés d'enregistrement !!! Le résultat est assez moche !
est-ce normal ? si oui, comment l'éviter ?
pour info, mon script x.php qui soumet le formulaire est lui même rappelé pour pour executer la soumission.
merci de vorte aide.

6 réponses

audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
31 août 2007 à 19:18
Ola je comprends pas là -_-"
Pour le cas 1 tu peux très bien lancée une recherche sans la clé d'enregistrement mais avec tous les champs que l'utilisateur t'a soumis.
Pour le cas 2 il suffit de supprimer la variable "$_SESSION['form_exec']" avec "unset($_SESSION['form_exec'])" sur la page du formulaire. De cette manière le verrou est posé lorsque tu postes le formulaire et il est enlevé lorsque tu affiches le formulaire.

For every choice, a consequence (Fable)
3
raven44 Messages postés 315 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 21 mars 2011 1
30 août 2007 à 15:44
Bonjour à toi,

Pour résoudre ton problème, tu peux mettre un champs caché du style :


Puis ton PHP tu l'execute seulement si ta variable "form_exec == yes", un peu comme ça :

if ($form_exec=="yes")
{
Mon PHP avec mon insert.
}
else
{
Mon HTML avec mon formulaire et mon champs hidden en dessous de mon form.
}
0
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
30 août 2007 à 20:46
Salut,
@raven44 : Nan si tu fais un refresh le formulaire entier (avec le champs caché) sera également réenvoyer.
Tu as 2 solutions dans ce cas :
1 - Soit tu fais une recherche dans ta base pour vérifier que l'INSERT a déja été executée.
2 - Soit juste après la requete tu enregistres une variable une variable "$_SESSION". Celà donnera un script du genre :
<?php
session_start();
if (!isset($_SESSION['form_exec'])) {
   // requete INSERT
   $_SESSION['form_exec'] = TRUE;
}
?>

For every choice, a consequence (Fable)
0
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010
31 août 2007 à 10:09
Merci pour ces réponses ...MAIS :
le cas 1 - je l'oublie pour la raison suivante : je ne peux pas tester la clé d'enreg puisque auto incrémentée.
il reste donc la 2- : Que se passe-t-il si l'utilisateur veut créer 2 fois d'affilée.
La première ça marchera, ça pas de pb; par contre, la 2ème $_SESSION['form_exec'] = TRUE  empêchera au script de créer un deuxième enregistrement !
le problème c'est que je ne peux pas me baser sur la clé de l'enreg créé puisqu'elle est auto incrémentée et que ce n'est pas l'utilisateur qui la choisit.
vraiment je bloque !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
31 août 2007 à 11:42
Hello,

soit tu fais un select pour voir si un enregistrement identique (je parle de tout sauf la clé auto-incrémentée bien sûr) existe, ou alors à chaque fois que tu génères une page de formulaire, tu mets un numéro unique dedans, et c'est lui que tu mets en session quand la page est remplie :

$_SESSION['form_exec_2684685'] = true;

là, la page de formulaire qui a reçu le numéro 2684685 ne pourra plus valider le formulaire, mais une autre page (différente) avec le numéro 121231546 pourra.
0
glachant Messages postés 39 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 24 novembre 2010
3 sept. 2007 à 12:46
super, ça marche, je me suis fais c... mais ça marche !
merci
0
Rejoignez-nous