Formulaire, problème insertion de données

Formulaire, problème insertion de données - PHP - Programmation

Marsh Posté le 11-04-2005 à 12:07:37    

salut,  
 
J'ai deux pages php, "page1" et "page2".  
Sous "page1", il existe un formulaire html. A la validation du formulaire, les données s'insèrent dans une BD MySQL et je passe automatique sur la page 2.  
La méthode utilisée pour récupérer les variables du formulaire est POST.
 
J'ai remarqué que dès lors je rafraîchis la page2 , ces mêmes données sont insérées une seconde foi et ainsi de suite.  
 
J'ai fait exprès de ne pas mettre une clé unique dans la base pour éviter les doublons.
 
Alors, y a-t-il un moyen simple pour ne pas insérer plusieurs fois les mêmes données si l'utilisateur est amené à rafraîchir la page.
 
 
merci
 

Reply

Marsh Posté le 11-04-2005 à 12:07:37   

Reply

Marsh Posté le 11-04-2005 à 13:12:07    

up.
 
ça m'interesse dans le cadre de developpement de mon formulaire d'inscription aussi. surtout savoir comment je peux éviter les doublons.  :heink:  
ça peut se faire avec un mysql_num_rows() ?  :??:

Reply

Marsh Posté le 11-04-2005 à 13:23:32    

pmusa a écrit :

up.
 
ça m'interesse dans le cadre de developpement de mon formulaire d'inscription aussi. surtout savoir comment je peux éviter les doublons.  :heink:  
ça peut se faire avec un mysql_num_rows() ?  :??:


 
euh je vois pas le rapport avec un mysql_num_rows ...
ton INSERT est tout simplement dans page2, donc à chaque rafraichissement il se refait .. Logique..
Pour eviter ça tu as cas faire une page entre les 2 qui fait l'insert, et renvoi sur ta page2 ...
Mais doit y avoir beaucoup plus propre ...

Reply

Marsh Posté le 11-04-2005 à 13:31:18    

Code :
  1. $requete=mysql_db_query($sql_bdd,"select * from membres where pseudo='".$_POST['pseudo']."' || email='".$_POST['email']."',$db_link);
  2. $num=mysql_num_rows($requete);
  3. if($num==0)
  4.  {
  5.  $requete=mysql_db_query($sql_bdd,"insert into membres values('', '".$_POST['pseudo']."','".$_POST['email']."')",$db_link);
  6.  }
  7. else{
  8.  echo "vous êtes déjà inscrit";
  9.  }


 
après à lui de l'adapter.  [:airforceone]  
chai pas, moi je fais comme ça, si qqn à plus elegant après... je prends.


Message édité par pmusa le 11-04-2005 à 13:32:39
Reply

Marsh Posté le 11-04-2005 à 13:44:51    

GaSPaRD77 a écrit :

euh je vois pas le rapport avec un mysql_num_rows ...
ton INSERT est tout simplement dans page2, donc à chaque rafraichissement il se refait .. Logique..
Pour eviter ça tu as cas faire une page entre les 2 qui fait l'insert, et renvoi sur ta page2 ...
Mais doit y avoir beaucoup plus propre ...


 
 
effectivement, très bonne astuce,mais lorsque tu as plusieurs page de formulaire, c'est pas gérable.
ceci-dit, je suis sûr qu'il est possible de vider la variable HTTP_POST_VARS une fois que l'on se trouve dans la page2, car c'est bien cette variable qui contient toutes les valeurs du formulaire , non ??
 
sinon, j'ai essayé un autre moyen, c'est d'initialiser une variable de session, et de faire un contrôle dessus. Ainsi, s'il est déjà initialisée, on ne répéte pas la requête. Mais ceci n'est pas correct non plus .

Reply

Marsh Posté le 11-04-2005 à 14:25:13    

J'ai aussi pensé à la variable de session, en quoi ce n'est pas correct ?

Reply

Marsh Posté le 11-04-2005 à 14:51:08    

GaSPaRD77 a écrit :

J'ai aussi pensé à la variable de session, en quoi ce n'est pas correct ?


 
dans le cadre de mon formulaire, ce n'est pas une méthode propre, car je peux être amené à faire appel à la page1 tout en étant sous la même session. Et là, j'aurais besoin d'insérer de nouvelle données avec la même session. Evidemment, il y a un autre id qui me permet de distinguer les données à insérer pour l'une ou l'autre session.
 
bon si c flou désolé pour l'explication...
 

Reply

Marsh Posté le 11-04-2005 à 14:55:13    

ouais j'ai pas compris là :)

Reply

Marsh Posté le 12-04-2005 à 10:07:01    

Et alors ? Avec les variables de session tu peux naviguer partout dans ton site avec...

Reply

Marsh Posté le 02-05-2005 à 09:13:57    

Je n'ai pas testé, mais sinon vous pouvez surement ruser, en testant dans la seconde page que les champs ne sont pas vide, si ils ne le sont pas vous faites l'insertion puis vous réinitialisez les variables.
un truc de ce genre là :

Code :
  1. $monChamp=$_POST['monChamp'];
  2. if(!$monChamp==''){
  3.  $insert="insert into maTable values('$monChamp')";
  4.  $result_insert=mysql_query($insert);
  5.          $monChamp='';
  6. }


Mais bon, c'est assez bizzare quand meme je ne fais pas ca dans mes scripts (je ne réinitialise pas mes variables) et il me me les insere pas en double pour autant à chaque refresh  :??: ou alors j'ai pas compris votre probleme...
Sinon effectivement, le mieux reste surement de passer par un script qui gère l'insertion et renvoie sur la seconde page.

Reply

Marsh Posté le 02-05-2005 à 09:13:57   

Reply

Marsh Posté le 02-05-2005 à 09:18:46    

un header ? puis tu reviens sur t

Reply

Marsh Posté le 02-05-2005 à 09:18:53    

a page

Reply

Marsh Posté le 02-05-2005 à 09:19:16    

oola qu'est ce qui c'est donc passé avec mon message...

Reply

Marsh Posté le 02-05-2005 à 13:34:52    

Le plus simple et d'utiliser une page intermediaire.
 
En gros :
page1 -> page1b -> page2
Dans la page1 il y a le formulaire. Une fois le formulaire envoye, on arrive dans la page1b qui est chargee de faire le traitement des donnes envoyees par le formulaire, ainsi que l'insertion.
Ensuite cette page renvoie sur la page2.
Comme ca, si l'utilisateur fait un refresh sur la page2, il n'y auras pas de nouvelle insertion dans la base.

Reply

Marsh Posté le 02-05-2005 à 13:37:08    

C'est bien ce que je dis, avec un header au pire qui renvoie sur page1

Reply

Sujets relatifs:

Leave a Replay

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