Aller au contenu

caddie php (Resolu)


Sujets conseillés

Posté (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é) :gueule:

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é par kida
Posté

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'];
:huh: ? 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 :hypocrite: 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é

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

Posté

:) 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:

<? 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: :huh: ? 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  :hypocrite:  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}>

Posté

:P 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 :D

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...