Insertions a la pelle avec refresh !?

Insertions a la pelle avec refresh !? - PHP - Programmation

Marsh Posté le 15-03-2004 à 15:12:53    

bonjour,
 
je crée en ce moment un module de faq dynamique, qui se décompose pour l'instant en 2 fichiers:
- mon 'post.php' contient un formulaire de question / réponse à poster vers 'main.php'
- mon 'main.php' contient des routines pour afficher l'ensemble de mes posts triés, réceptionner un formulaire (question ou réponse) et l'enregistrer s'il est cohérent + 2 liens vers les 2 formulaires de 'post.php'
 
Ca tourne en boucle: lorsque je remplis un formulaire de question (valable aussi pour réponse) et que je l'envoie vers 'main.php', je retombe sur ma page 'main.php' avec mon tableau trié contenant ce nouveau message... Seulement, lorsque je tape sur F5 pour refresh, ca me pond à chaque fois un nouvel enregistrement avec les données réceptionnées du forulaire de 'post.php', donc si je fais N refresh ca me balance N enregistrement identiques (logique puisqu'issus des memes champs postés) dans ma bdd...
 
J'ai essayé plusieurs trucs déja:
- lorsque je vérifie la validité des champs du formulaire, je les conserve dans une variable lambda_N, j 'unset()' la variable postée ($_POST['nom_user'] par exemple), puis apres insertion j 'unset()' également les lambda_N correspondant
=> les insertions suivantes ne devraient pas se faire puisque les variables sont deja vidées...
 
- j'ai flanqué quelques booléens, du style:

Code :
  1. bool_sauv = 0;
  2. SI (champs_formulaire OK) ALORS bool_sauv = 1 FIN SI;
  3. SI (bool_sauv == 1) ALORS
  4. Insertion_enregistrement;
  5. bool_sauv = 0;
  6. FIN SI


=> 1 seule insertion devrait être possible avec ce genre de "controle"
 
note: j'utilise Mozilla (tlm devrait aussi ;)), et il me met une boite de confirmation qui illustre bien mon problème => ca donne en gros: votre page contient des données postées, si vous réenvoyez les données (avec F5 refresh), toutes les actions de la page (ici 'main.php') seront répétées... (on peut ensuite annuler ou valider)
 
MERCI D'AVANCE pour la parade


Message édité par lkolrn le 15-03-2004 à 17:03:20
Reply

Marsh Posté le 15-03-2004 à 15:12:53   

Reply

Marsh Posté le 15-03-2004 à 17:01:12    

Personne n'a jamais rencontré ce probleme... :??: :heink:

Reply

Marsh Posté le 15-03-2004 à 17:57:20    

si si souvent même.  
 
il faut 3 fichier et non 2. tu pourras alors pas faire F5 pour revalider.  
 
saisie --> ajoutbdd --> affichage
 
à la fin de l'ajout, redirection et voilà

Reply

Marsh Posté le 16-03-2004 à 00:32:22    

ca veut dire que c'est po possible de réinitialiser des variables postées depuis mon 'poster.php' ?! (du type <input type="text" name="nom" size="42" maxlength="256"> )
la durée de "vie" de ces variables est-elle configurée dans un/des fichier(s) :??:


Message édité par lkolrn le 16-03-2004 à 11:03:51
Reply

Marsh Posté le 16-03-2004 à 01:06:02    

c'est pas la durée de vie, mais la visibilité. c'est la même chose mais ça se dit comme ça.  
 
sinon je sais pas ce que fait poster.php ??

Reply

Marsh Posté le 16-03-2004 à 11:03:33    

dsl ct po poster.php mais 'post.php' (c précisé dans le 1er message), qui contient juste des champs de formulaire et un submit...
 
P.S.: jme souviens d'avoir deja vu le système classique (unique?) de 3 pages pour insérer facilement des données depuis des formulaires, mais j'aimerais savoir vraiment comment ca marche, même si c 3 fois + chiant de faire avec seulement 2 pages (en fait faudrait rendre inactive la visibilité des variables après la 1ere insertion...)


Message édité par lkolrn le 16-03-2004 à 11:35:56
Reply

Marsh Posté le 16-03-2004 à 12:27:15    

tu ne peux pas. eu refresh, les variables sont réinitialisées dans le post.

Reply

Marsh Posté le 16-03-2004 à 13:51:20    

c donc impossible... :sweat:  
 
oki merci :jap:

Reply

Marsh Posté le 16-03-2004 à 15:23:50    

tu peux essayer en faisant un locatation qui rappelle ta page avant que l utilisateur ne puisse rafraichir.

Reply

Marsh Posté le 16-03-2004 à 15:56:14    

Salut,
 
personnellement, je place un champ hidden sur ma page de formulaire qui contient un timestamp de l'heure actuelle. Au moment du traitement (insertion), je place une variable de session avec la valeur du hidden.  
Je verifie ensuite à chaque traitement que la valeur du hidden soit superieure à celle de ma variable de session.
Ca permet de ne pas reposter un formulaire déja posté via "F5" ou la touche "back" du navigateur.
 
voila.
 
ps : ne pas oublier de prévenir l'utilisateur.....

Reply

Marsh Posté le 16-03-2004 à 15:56:14   

Reply

Marsh Posté le 16-03-2004 à 17:01:23    

en voila des idées qu'elles sont bonnes! :D  
 
o fait, c quoi un "locatation" :??: :pt1cable:


Message édité par lkolrn le 16-03-2004 à 17:01:41
Reply

Marsh Posté le 16-03-2004 à 19:19:50    

sebastien >> ouais bof. si je fait back puis F5...

Reply

Marsh Posté le 16-02-2005 à 17:02:02    

sinon ya plus simple pour faire ça en 1 fois:
 
dans la page d'insertion on vérifie dabord que les données postées n'existent po dja dans la base... le gars aura beau faire des refresh, rien n'ira jusqu'à la base :bounce:

Reply

Marsh Posté le 16-02-2005 à 17:35:06    

LKoLRn a écrit :

sinon ya plus simple pour faire ça en 1 fois:


 
Pas efficace, ça sous entend qu'il ne peut y avoir 2 données identiques dans la base (hors clé unique).
 
A moins de faire le test sur tous les champs (et encore, avec une date d'insertion à comparer à la date actuelle), bref, c'est lourd pour pas grand chose par rapport au classique form > ajout redirection sur le serveur > form par exemple.

Reply

Marsh Posté le 16-02-2005 à 19:00:46    

naceroth a écrit :

Pas efficace, ça sous entend qu'il ne peut y avoir 2 données identiques dans la base (hors clé unique).
 
A moins de faire le test sur tous les champs (et encore, avec une date d'insertion à comparer à la date actuelle), bref, c'est lourd pour pas grand chose par rapport au classique form > ajout redirection sur le serveur > form par exemple.


ouais! c vrai que ça dépend des bases... pour la date précise d'insertion dans la base, c vraiment nécessaire? si les données ont dja été insérées 1 fois, ça suffit pour ne plus vouloir les insérer à nouveau, et donc c indépendant d'une date. nan?
 
Sinon le schéma classique c bien:
- page formulaire
- page insertion des données postées
- redirection vers page formulaire
 
???
 
jmi perd avec ces applis internet...  :pt1cable: :whistle:


Message édité par lkolrn le 16-02-2005 à 19:01:21
Reply

Marsh Posté le 16-02-2005 à 19:35:16    

LKoLRn a écrit :

ouais! c vrai que ça dépend des bases... pour la date précise d'insertion dans la base, c vraiment nécessaire? si les données ont dja été insérées 1 fois, ça suffit pour ne plus vouloir les insérer à nouveau, et donc c indépendant d'une date. nan?


 
Tu réponds toi même à la question : ça dépend des bases :)
 
Si (et j'insiste sur le si :)) on se base sur un principe de non doublons pour, par exemple, une liste de contacts (cas où 2 enregistrements identiques peuvent exister sans être des doublons), avoir une date d'insertion est un moyen de s'assurer que les deux n'ont pas été insérer l'un après l'autre.
 

Citation :

Sinon le schéma classique c bien:
- page formulaire
- page insertion des données postées
- redirection vers page formulaire


 
Oui, c'est ça. Attention qu'on parle bien d'une redirection sur le serveur, pas d'un truc javascript chez le client :)

Reply

Marsh Posté le 16-02-2005 à 21:28:22    

:jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed