Je suis encore bloqué, merci de bien vouloir m'aider un peu.
/!\ ATTENTION : ce message est très très long ... si vous êtes courageux aujourd'hui pour le lire ...
Mise en situation : C'est une liste d'article avec plusieurs cases à cocher qui après avoir cliquer sur le bouton "VALIDER" doit (normalement) tout ajouter au caddie.
Voici les bout de mon programme :
* les noms cases à cocher dans mon fichier index.php
Code :
- <form name=bm_table action="/caddie/add_caddie.php" method=post>
- // ...
- <input type=checkbox name="add_me[]" value="'.$row['idx'].'">
- / ...
|
* Ensuite le script de add_caddie.php envoyer par POST pour afficher le résultat (normallement) des articles qui ont bien été ajouté
Code :
- // [...] Mise en page de la page
- // Vérif du formalaire
- if (!filled_out($HTTP_POST_VARS))
- {
- echo "Vous n'avez coché aucune case. Cochez les cases des articles qui vous intéresse puis réessayer.";
- do_html_footer();
- exit;
- }
- else
- {
- if (count($add_me) >0)
- {
- // boucler tant qu'on a pas fini d'ajouter tous les articles au caddie
- $fin_add=sizeof($add_me);
- for($i=0 ; $i<$fin_add ; $i++)
- { $idx=$add_me[$i];
- if(add_article($idx))
- echo "<br>article ".$idx." ajouté<br>";
- }
- }
- else
- { echo "Vous n'avez rien coché. Votre caddie reste donc inchangé.";
- }
- }
|
Rem : on fait une boucle pour ajouter tous les caddie dont les cases chekcbox nommé add_me ont été ajouté. Dans $idx on met l'id de l'article. Ca çà a l'air de marcher. Ensuite on appelle donc la fonction add_article();
* fonction add_article, d'où très certainement vient le problème :
Code :
- function add_article($idx)
- {
- // si un objet a été ajouté au caddie pour la première fois
- if(!session_is_registered("cart" ))
- { echo "session non enregistrée<br>";
- $cart = array();
- session_register("cart" );
- $items = 0;
- session_register("items" );
- $total_taille = "0.00";
- session_register("total_taille" );
- }
-
- if($cart[$idx])
- $cart[$idx]++; // si on commande à nouveau le même article on incrémente sa quantité
- else
- $cart[$idx] = 1; // sinon c'est la 1ère fois qu'on ajoute cet article au caddie
- $total_taille = calculate_price($cart,$items);
- $items = calculate_items($cart);
- // tests perso mais çà affiche tjs pareil quand on passe dans cette fonction plusieurs fois
- echo "add_article : taille=$total_taille ; items=$items ; cart=$cart<br>";
- echo "add_article : idx=$idx ; qty=$cart[$idx]<br>";
- return true;
- }
|
Rem : quand on clique sur 4 cases à cocher par exemple on passe donc 4 fois dans cette fonction mais les echo afficher ont toujours les mêmes :
* aperçu d'affichage lorsque le caddie vient d'ouvrir une session pour la première fois, donc était vie au départ : 4 articles cochés
Code :
- session non enregistrée
- add_article : taille=8.69 ; items=1 ; cart=Array
- add_article : idx=3 ; qty=1
- article 3 ajouté
- add_article : taille=35.8 ; items=1 ; cart=Array
- add_article : idx=5 ; qty=1
- article 5 ajouté
- add_article : taille=36.3 ; items=1 ; cart=Array
- add_article : idx=6 ; qty=1
- article 6 ajouté
- add_article : taille=23.1 ; items=1 ; cart=Array
- add_article : idx=7 ; qty=1
- article 7 ajouté
|
Allez tant qu'on y est je livre tous mon code des fonctions calculate_price et calculate_items si ca viendrais de là :
Code :
- // en fait cette fonction calcul la taille des articles du caddie
- function calculate_price($cart)
- {
- // sum total price for all items in shopping cart
- $price = 0.0;
- if(is_array($cart))
- {
- $conn = db_connect();
- foreach($cart as $idx => $qty)
- {
- $query = "select taille from gene where idx='$idx'";
- $result = mysql_query($query);
- if ($result)
- {
- $item_price = mysql_result($result, 0, "taille" );
- $price +=$item_price*$qty;
- }
- }
- }
- return $price;
- }
- function calculate_items($cart)
- {
- // sum total items in shopping cart
- // $items = 0;
- if(is_array($cart))
- {
- foreach($cart as $idx => $qty)
- {
- $items += $qty;
- }
- }
- return $items;
- }
|
J'arrête là mon code, si vous arrivez à tout lire.
Rem. finale : En fait au début le code de la fonction add_article n'était pas utilisé ainsi. J'ai un autre scrypt similaire à 'add_article' mais qui n'est pas une fonction. Lorsque que quelqu'un visite le détail d'un article, là aussi il y a le bouton "AJOUTER".
Mais là on passe directement par une méthode POST et donc on envoie /voir_caddie.php?idx=12345 à la page voir_caddie donc. Et elle elle récupère çà directement depuis l'url. Mais là j'ai juste voulu mettre le paramètre dans le prototype d'une fonction exactement la même sauf que çà marche pas
Message édité par ced_voyage le 09-06-2003 à 13:57:51