Auteur Sujet: Caddie Virtuel  (Lu 2324 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne 3corbeaux

  • Débutant
  • *
  • Messages: 11
    • 3corbeaux
Caddie Virtuel
« le: 29 Mars 2004 à 00:23:30 »
Salut, salut,

J'espère que mon truc n'est pas trop compliqué.
J'ai adapté le code d'un magasin virtuel et ça marche plutôt bien.
Mais...
Il y a un mais :

1er problème : caddie s’affiche avec quantité = vide comme si ajout() ne fonctionnait pas bien. J’aimerai quantité = 1 par défaut

2ème problème : enleve() remet la quantité à vide mais n’enlève pas le produit du caddie.

Que faire ? Merci.


Le code, tout le code...

if (! isset($SESSION["caddie"])) {
   $SESSION["caddie"] = new Caddie;
}

**sur une page**

<a href=\"caddie_ajout.php?id= $ligne2[id].\">...</a>   ok

**caddie_ajout.php**

$SESSION["caddie"]->ajout($id, 1);      
$SESSION["caddie"]->nettoie();      
$SESSION["caddie"]->recalc_total();

**class_caddie**

class Caddie {
   var $articles;      
   var $total;      

   function Caddie() {
         $this->init();
   }

   function init() {
      $this->articles = array();
      $this->total = 0;
   }

   function ajout($produitid, $quantite) {      
         if (isset($produitid)) {
         if (! isset($this->articles[$produitid])) {
            $this->articles[$produitid] = 0;
         }
         $this->articles[$produitid] += $quantite;
      }
   }

   function place(&$produitid, $quantite) {      
         if (isset($produitid)) {
         $this->articles[$produitid] = (int) $quantite;
      }
   }

   function enleve($produitid) {         
         if (isset($produitid)) {
         unset($this->articles[$produitid]);
         }
   }

   function nettoie() {      
         foreach ($this->articles as $produitid => $quantite) {
         if ($quantite < 1 ) {
            unset($this->articles[$produitid]);
         }
      }
   }

   function compte_elements() {      
      $total = 0;
      foreach ($this->articles as $produitid => $quantite) {
         $total += $quantite;
      }

      return $total;
   }

   function recupere_produitid_list() {      
      $produitid_list = "";
      foreach ($this->articles as $produitid => $quantite) {
         $produitid_list .= ",'" . $produitid . "'";
      }
         return substr($produitid_list, 1);
   }

   function recalc_total() {         
      $this->total = 0;
      $in_clause = $this->recupere_produitid_list();
      if (empty($in_clause)) {
         return;
      }
      $qid = mysql_query("SELECT id, prix FROM catalogue WHERE id IN ($in_clause)");
      if ($qid) {
         if (mysql_num_rows($qid) > 0) {
            while ($produit = mysql_fetch_array($qid)) {
               $this->total += $this->articles[$produit["id"]] *  
$produit["prix"];
            }
         }
      }
   }
}

**fonctions**


function recupere_articles_caddie() {         
/* Retourne $qid de tous les éléments du caddie */

   global $SESSION;

   $in_clause = $SESSION["caddie"]->recupere_produitid_list();
   if (empty($in_clause)) {

      return false;
   }
   $requete = "SELECT id, nom, contenance, weight, prix FROM catalogue WHERE id IN ($in_clause)";
   return mysql_query($requete);
}

function maj_quantite(&$form) {      
/* Met à jour les quantités d'un article  */

   global $SESSION;

   foreach ($form["id"] as $i => $produitid) {
      $quantite = $form["quantite"][$i];
      $SESSION["caddie"]->place($produitid, $quantite);
   }
}


** caddie_affichage**


if (isset($func)) {
   switch ($func) {
      case "enleve" :
          $SESSION["caddie"]->enleve($id);   
         break;

      case "vide" :
         $SESSION["caddie"]->init();   
         break;

      case "recalc" :
         maj_quantite($HTTP_POST_VARS);   
         break;
      
         }

   $SESSION["caddie"]->nettoie();      
   $SESSION["caddie"]->recalc_total();      
}

$qid = recupere_articles_caddie();

...

include("caddie.php");


**caddie.php**

if ($qid) {

      if (mysql_num_rows($qid) > 0) {

         while ($prod = mysql_fetch_array($qid)) {
             $quantite = $SESSION["caddie"]->articles[$prod[id]];
            $total = $prod[prix] * $quantite/$fact;
                        
         ?>
         <tr>
   <input type="hidden" name="id[]" value="<?=$prod[id]?>">
   <td><?=$prod[nom]?></td>
   <td><?=$prod[contenance]?></td>
   <?$price=$prod[prix]/$fact ?>
   <td><? printf("%.2f", $price)  ?></td>
<td><input type="text" size="1" name="quantite[]" value="<?=$quantite?>"></td>
   <td><?=$dev ?></td>
   <td><? printf("%.2f", $total) ?></td>
   <td>[<a href="<?=$PHP_SELF?>?func=enleve&id=<?=$prod[id]?>"> Remove</a>]</td>
      <?$tot_weight=$prod[weight]*$quantite;
      $total_weight=$total_weight+$tot_weight;
      $SESSION["total_weight"]=$total_weight ?>
         </tr>
   <? } } } ?>


 

Hors ligne Mystic`

  • Habitué
  • **
  • Messages: 135
    • http://bouh.net/
Caddie Virtuel
« Réponse #1 le: 29 Mars 2004 à 00:32:06 »
Salut,
A mon avis remplace :

**class_caddie**

class Caddie {
var $articles;
var $total;

function Caddie() {
$this->init();
}

function init() {
$this->articles = array();
$this->total = 0;
}

par :

**class_caddie**

class Caddie {
var $articles;
var $total;

function Caddie() {
$this->init();
}

function init() {
$this->articles = array();
$this->total = 1;
}

Je n'ais pas vraiment lu le code, j'ai juste ete logique, il se peux que ca ne soit pas du tout ca.

Jérém'


Edit :

Si apres que tu ais teste ca ne marche pas, reprends "$this->total = 0;" et essaie ca :
function ajout($produitid, $quantite) {
if (isset($produitid)) {
if (! isset($this->articles[$produitid])) {
$this->articles[$produitid] = 1;
}
$this->articles[$produitid] += $quantite;
}
}

Si malgre tout ca ne marche pas, et bien contact Maverick78 :).
« Modifié: 29 Mars 2004 à 00:44:18 par Mystic` »
A Castle Can Have Only One Owner.

Un beau jour, l'amour dit à l'amitié : "Mais pourquoi existe-tu ?!" Et l'amitié de répondre : "Pour faire sécher les larmes que tu fais couler ..."

Hors ligne maverick78

  • VIP
  • *****
  • Messages: 2 601
    • http://www.clan-ck.com
Caddie Virtuel
« Réponse #2 le: 29 Mars 2004 à 00:45:13 »
gné  :blink:
jai rien fait moi  :ph34r:
demande a alex plutot il te filera une poche  :D  
La force est dans la céréale
Clan cereal-killer : http://www.clan-ck.com

Ne te demande pas ce que ton pays peut faire pour toi mais plutôt ce que tu peux faire pour ton pays...(JF Kennedy)

Hors ligne 3corbeaux

  • Débutant
  • *
  • Messages: 11
    • 3corbeaux
Caddie Virtuel
« Réponse #3 le: 29 Mars 2004 à 01:08:02 »
Merci,

Mais j'avais déjà essayé ça.
J'y retourne...

 ;)  

Hors ligne miiin

  • Débutant
  • *
  • Messages: 30
Caddie Virtuel
« Réponse #4 le: 30 Mars 2004 à 21:40:54 »
J'ai eu ton mail!

mais ca me parait bien compliqué tout ca!  ;)
En ce qui me concerne, j'ai pas utilisé de classes donc sur ce coup, je peux pas t'aider! desolé!