Version complète: sur le forum Webmaster Hub : caddie php (Resolu)
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
kida
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é) :gueule:

Merci d'avance !

Voici mes codes de page. (J'ai session_start(); en premier sur toutes les pages)

Lien ajout au caddy:

CODE
<a href=caddie_add.php?prod=".$res['id']."&t=poteries>Ajouter au panier</a>


Page add_caddy.php:

CODE
<? 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:

CODE
<?
    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">&nbsp;</td>
             <td height="30"><? echo $val['ref'] ?></td>
             <td height="30"><? echo $val['nom'] ?></td>
             <td height="30"> <? echo $val['prix'] ?>&nbsp;&euro;</td>
             <td height="30"><input name="qte" type="text" class="text" id="qte" size="7">
             <br></td>
             <td height="30"> &euro;</td>
    <?
    }
    }
    }
    echo "</tr>"
    ?>
Boo2M0rs0
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:
CITATION
$caddie["prod"]=$_GET['prod'];
huh.gif ? 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é:
CODE
$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:
CODE
$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:
CODE
$caddie["prod"]=array($_GET['prod']);

Là aussi php se débrouille pour numéroter happy.gif

Dernière chose, cette fois-ci concernant les sessions même si je sais pas grand chose à ce sujet hypocrite.gif 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é wink.gif
Dan
J'ajouterais un détail:

Pourquoi mettre:
CODE
   else
   {
       foreach($caddie as $caddie["prod"])
       {
           require_once('connexion.php');

Alors qu'un:
CODE
   else
   {
       require_once('connexion.php');
       foreach($caddie as $caddie["prod"])
       {
serait bien suffisant wink.gif

Dan
kida
smile.gif 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 B)

Voici mon nouveau de Add-caddie:

CODE
<? 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");
}
?>



CITATION(Boo2M0rs0 @ mardi 14 juin 2005, 16h31)
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: huh.gif ? 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é:
CODE
$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:
CODE
$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:
CODE
$caddie["prod"]=array($_GET['prod']);

Là aussi php se débrouille pour numéroter happy.gif

Dernière chose, cette fois-ci concernant les sessions même si je sais pas grand chose à ce sujet  hypocrite.gif  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é wink.gif
*
kida
tongue.gif Re Hello !

Ca y est !!!

J'ai trouvé pour mon histoire de 2 produit ajoutés

Il fallai écrire:

CODE
$_SESSION['caddie']=array($_GET['prod'],0);



Merci biggrin.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.