post d'un formulaire s'execute 2 fois

Petit nouveau ! | 4 Messages

31 oct. 2007, 15:13

salut a tous et toutes



voila mon probleme d'ordre national :

je fais des posts dans mon formulaire, je reccupere dans la page suivante les posts pour les mettre dans un array de la variable $_SESSION par ajout avec la fonction array_push. Donc $_SESSION contient un array dans lequelle je sauvegarde des elements. Mais, lorsque je controle la liste apres ajout, l'element ajoute a ete mis en double. Ce qui est bizarre c'est que, un mouchard qui me dit combien de fois l'operation d'ajout a ete effectue m'en donne qu'un. Il semble que c'est comme si la page ouverte apres l'envoie du formulaire s'execute 2 fois, la premiere execute juste l'operation d'ajout avec la fonction array_push, puis la page s'execute normalement et donc a nouveau, l'element poste est ajoute ...

pas clair ?

voici une portion pertinente de mon code :

les pages et les includes sont comme suit

page index.php
include gestion_order.php
include listProducts.php
fin page index.php

le formulaire est dans listProducts.php
la page ou sont envoyes les post est la meme : index
les donnees envoyees sont traitees dans gestion_order.php

le code :

listProducts.php :
...
<form name="listProductsForm" action="" method="POST">
...
// boucle

<input type="image" src="./img/ajout.gif" alt="ajouter" border="0" onMouseOver="this.src='./img/ajout_over.gif'" 
onMouseOut="this.src='./img/ajout.gif'" onClick="this.src='./img/ajout_on.gif'; 
poster('listProductsForm', 'refListProducts', '" . $ligneProducts['ref'] . "'); 
poster('listProductsForm', 'designationListProducts', '" . $ligneProducts['mod'] . "'); 
poster('listProductsForm', 'catListProducts', '" . $ligneProducts['cat'] . "'); 
poster('listProductsForm', 'prixListProducts', '" . $ligneProducts['prix'] . "'); 
document.forms['listProductsForm'].submit();">
	<input type="hidden" name="refListProducts" value="">
	<input type="hidden" name="designationListProducts" value="">
	<input type="hidden" name="catListProducts" value="">
	<input type="hidden" name="prixListProducts" value="">
</form>";

je precise que la fonction poster est du javascript qui ne fait qu'attribuer les valeurs aux hidden lors de l'envoie

fin listProducts.php


gestionOrder.php :
...

if (isset($_POST['refListProducts'])) {
       $addList = array(
'reforder'		=> $_POST['refListProducts'], 
'nameproductsorder'	=> $_POST['designationListProducts']);
'catorder'		=> $_POST['catListProducts'], 
'prixunitorder'	=> $_POST['prixListProducts'],
'quantiteorder'	=> 1);

unset($_POST['refListProducts']);
unset($_POST['designationListProducts']);
unset($_POST['catListProducts']);
unset($_POST['prixListProducts']);

array_push($_SESSION['session_order']['productsorder'], $addList);
unset($addList);
unset($exist);
$_SESSION['session_order']['etatTransac'] = 'modif';

...

j'espere que c'est plus clair.

si quelqu'un ou quelqu'une ou autre a une idee, je suis preneur pour toute reponse interplanetaire.

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 oct. 2007, 15:58

Pas vraiment d'idée, tout me semble correcte également, mais une suggestion, affiche quelques echo et print_r($_SESSION) tu verras à partir de quel moment il prend la valeur et éventuellement la double...


Pas de header('Location:...') où tu aurais omis un exit() pour interrompre le traitement dans ton code ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

31 oct. 2007, 17:27

salut Ryle

je te remercie d'avoir pris du temps pour mon cas

pour ce qui est de mettre des echo, print_r ..., j'en ai mis un peu partout sur le $_POST et $_SESSION et notamment au tout debut du fichier index.php, avant l'include gestionOrder.php, qui contient le code qui traite l'ajout du post dans la session. Et bien, le print_r me dit que deja, le serveur a range la valeur du post dans la session. c'est impossible !!! J'ai egalement mit un print juste avant la fonction array_push. Il m'indique un seul passage par ce code. Donc, il semble que le serveur excute cette fonction sans meme executer le code en amont ! puis apres il execute la page normalement et confirme un passage. Donc au finale, j'obtient l'execution de 2 insertions.

j'ai lu sur un autre forum que mozilla ou firefox je sais plus, avait un bug de meme genre. il charge la page 2 fois si le tag action du form est a vide. Pour le resoudre, il suffit de remplir ce tag et ca va. Pour ma part, ce pb est sous IE. Je n'ai pas teste sous mozilla. J'ai egalement essaye de mettre ce tag avec index.php puis gestionOrder.php et #, mais rien y fait.

J'ai essaye de voir si des fois je n'avais pas insere gestionOrder.php autre part mais non.

Ce qui me semble bizarre c que je ne vois qu'1 seul passage. C'est comme si une page ou du code mis en cache etait execute avant.

Pour ce qui est du header, je n'ai rien code de ce genre et je ne sais pas a quoi ca sert.

voila pour le moment

pour la suite, je vais teste sous un autre nav pour voir si ca donne les memes resultats.

pour le moment, je me contente de diviser par 2 la quantite chaque fois entree.


merci encore