kida Posté 14 Juin 2005 Posté 14 Juin 2005 (modifié) Boujour, Je réalise mon premier caddie en php, et j'ai un prob avec add_caddie.php. Rien ne s'ajoute au caddy, il remplace à chaque fois le produit enregistré par le nouveau ajouter au caddy, ou alors il me crée une nouvelle session à chaque fois ??? Si quelqu'un à une idée se serai super, ça fait bientôt 1 semaine que je galère.(c'est pas faute d'voir cherché) Merci d'avance ! Voici mes codes de page. (J'ai session_start(); en premier sur toutes les pages) Lien ajout au caddy: <a href=caddie_add.php?prod=".$res['id']."&t=poteries>Ajouter au panier</a> Page add_caddy.php: <? session_start();if(isset($_GET['prod']))//si id produit{$t=$_GET['t']; if((session_is_registered('caddie')) && (isset($caddie))) { $place = array_search($_GET['prod'], $caddie); if ($place === FALSE) { $caddie["prod"]=$_GET['prod']; header("Location:caddie.php?table=$t"); } else { echo "Produit déjà sélectionné !"; } } else { session_register('caddie'); $caddie=array("prod"=>$_GET['prod']); header("Location:caddie.php?table=$t"); }}else //variable prod pas passée{header("Location:caddie.php");}?> Page caddy.php: <? if(!isset($caddie)) { echo "Votre caddie est vide !"; } else { foreach($caddie as $caddie["prod"]) { require_once('connexion.php'); $t=$_GET["table"]; $sql='Select ref,nom,prix FROM '.$t.' WHERE id="'.$caddie["prod"].'"'; $res=mysql_query($sql) or die ('Erreur SQL!'.$sql.mysql_error()); while($val=mysql_fetch_array($res)) { echo "<tr>"; ?> <td height="30"> </td> <td height="30"><? echo $val['ref'] ?></td> <td height="30"><? echo $val['nom'] ?></td> <td height="30"> <? echo $val['prix'] ?> €</td> <td height="30"><input name="qte" type="text" class="text" id="qte" size="7"> <br></td> <td height="30"> €</td> <? } } } echo "</tr>" ?> Modifié 15 Juin 2005 par kida
Boo2M0rs0 Posté 14 Juin 2005 Posté 14 Juin 2005 Bonjour, D'apres la fonction array_search(), je déduis que quand un produit existe tu l'enregistres dans le tableau comme un nouvel enregistrement avec comme valeur, le nom de l'article obtenu par $_GET. Alors pourquoi: $caddie["prod"]=$_GET['prod']; ? Cela signifie que tu enregistre toujours l'article dans la même variable donc normal que l'ancien est effacé. Pour que ton code marche il faudrait que tu enregistre chaque élément dans un tableau, le plus simple serait de dire que $caddie["prod"] est tableau numéroté: $caddie["prod"][]=$_GET['prod']; les crochets vides signifient que php se débrouille tout seul pour choisir la clé associée à cette valeur (normalement il compte en commenceant de 0). tu dois donc changer aussi la ligne: $place = array_search($_GET['prod'], $caddie); en: $place = array_search($_GET['prod'], $caddie["prod"]); Tu as le même problème lors de la création de la session: $caddie=array("prod"=>$_GET['prod']); devient: $caddie["prod"]=array($_GET['prod']); Là aussi php se débrouille pour numéroter Dernière chose, cette fois-ci concernant les sessions même si je sais pas grand chose à ce sujet de la même façon que tu utilises $_GET['prod'] au lieu de $prod, tu devrais utiliser $_SESSION['caddie'] au lieu de $caddie si register_globals est désactivé
Dan Posté 15 Juin 2005 Posté 15 Juin 2005 J'ajouterais un détail: Pourquoi mettre: else { foreach($caddie as $caddie["prod"]) { require_once('connexion.php'); Alors qu'un: else { require_once('connexion.php'); foreach($caddie as $caddie["prod"]) { serait bien suffisant Dan
kida Posté 15 Juin 2005 Auteur Posté 15 Juin 2005 Hello ! J'ai donc essayé les modif proposé, ça fonctionne sauf (eh oui en info jamais de repos !!) au premier ajout de produit il m'en met 2 au lieu de 1 (chacun sur une ligne différente du caddie, à l'ajout d'autre articles il m'en met bien 1 seul. Merci beaucoup pour votre coup de main. Et si vous avez une idée pour les 2 articles à la première insertion dites le moi. Schuss Voici mon nouveau de Add-caddie: <? session_start();if(isset($_GET['prod']))//si id produit{$t=$_GET['t']; if(!isset($_SESSION['caddie'])) { session_register('caddie'); $_SESSION['caddie']=array($_GET['prod']); header("Location:caddie.php?table=$t"); } else { $place=array_search($_GET['prod'],$_SESSION['caddie']); if($place === FALSE) { $_SESSION['caddie'][]=$_GET['prod']; header("Location:caddie.php?table=$t"); } else { echo "Produit déjà sélectionné !"; } }}else //variable prod pas passée{header("Location:caddie.php");}?> Bonjour, D'apres la fonction array_search(), je déduis que quand un produit existe tu l'enregistres dans le tableau comme un nouvel enregistrement avec comme valeur, le nom de l'article obtenu par $_GET. Alors pourquoi: ? Cela signifie que tu enregistre toujours l'article dans la même variable donc normal que l'ancien est effacé. Pour que ton code marche il faudrait que tu enregistre chaque élément dans un tableau, le plus simple serait de dire que $caddie["prod"] est tableau numéroté: $caddie["prod"][]=$_GET['prod']; les crochets vides signifient que php se débrouille tout seul pour choisir la clé associée à cette valeur (normalement il compte en commenceant de 0). tu dois donc changer aussi la ligne: $place = array_search($_GET['prod'], $caddie); en: $place = array_search($_GET['prod'], $caddie["prod"]); Tu as le même problème lors de la création de la session: $caddie=array("prod"=>$_GET['prod']); devient: $caddie["prod"]=array($_GET['prod']); Là aussi php se débrouille pour numéroter Dernière chose, cette fois-ci concernant les sessions même si je sais pas grand chose à ce sujet de la même façon que tu utilises $_GET['prod'] au lieu de $prod, tu devrais utiliser $_SESSION['caddie'] au lieu de $caddie si register_globals est désactivé <{POST_SNAPBACK}>
kida Posté 15 Juin 2005 Auteur Posté 15 Juin 2005 Re Hello ! Ca y est !!! J'ai trouvé pour mon histoire de 2 produit ajoutés Il fallai écrire: $_SESSION['caddie']=array($_GET['prod'],0); Merci
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant