CLASSE PHP5 DE PANIER TOUTE SIMPLE

bbcluny Messages postés 66 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 29 septembre 2008 - 30 sept. 2005 à 15:41
julbuc Messages postés 1 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 23 mars 2011 - 23 mars 2011 à 14:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34003-classe-php5-de-panier-toute-simple

julbuc Messages postés 1 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 23 mars 2011
23 mars 2011 à 14:57
Hello,

J'ai un problème avec ta classe sur un mutualisé ovh.

La méthode showQuantity() me renvoit : Cannot use object of type Cart as array.

Il n'a pas l'air de bien aimer
foreach($this->cart as $ref => $data) {
$total += $data['quantity'];
}

Auriez-vous une petite idée, le serveur et bien conf en php5 grace à SetEnv PHP_VER 5 dans un .htaccess

Ci-joint une copie de la classe :

<?php
session_start();
class Cart {

private $cart = array();

// constructeur
public function __construct(){ // constructeur
if (!isset($_SESSION['cart'])) $_SESSION['cart']=array();
$this->cart =& $_SESSION['cart'];
}

// ajouter un article $refproduit
public function addItem($refproduit="",$nb=1){
@$this->cart[$refproduit]['quantity'] += $nb;
if ($nb <= 0) unset ($this->cart[$refproduit]);
}

// supprimer un article $refproduit
public function removeItem($refproduit="",$nb=1){
@$this->cart[$refproduit]['quantity'] -= $nb;
if ($nb <= 0) unset ($this->cart[$refproduit]);
}

// choisir la quantité d'article $refproduit
public function setQuantity($refproduit="",$toSet=""){
@$this->cart[$refproduit]['quantity'] = $toSet ;
if ($toSet <= 0) unset ($this->cart[$refproduit]);
}

// afficher la quantité de produits dans le cart
// paramètre : $refproduit : permet d'afficher la quantité pour le produit de cette référence
// si le paramètre est vide, on affiche la quantité totale de produit

public function showQuantity($refproduit=""){
if ($refproduit) {
return $this->cart[$refproduit]['quantity'];
}else{
$total=0;
foreach($this->cart as $ref => $data) {
$total += $data['quantity'];
}
}
return $total;
}

// afficher la liste des articles (et accessoirement, leur quantité)

public function showCart(){
$list = array();
$i = 0;
foreach($this->cart as $ref => $data) {
$list[$i]['ref'] = $ref;
$list[$i]['qte'] = $data['quantity'];
$i++;
}
return $list;
}
public function destructCart() {
if (!isset($_SESSION['cart'])) unset($_SESSION['cart']);
}
}
?>

Merci d'avance pour vos réponses ; )
Donald08 Messages postés 3 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 5 mars 2011
5 mars 2011 à 10:01
Comment faire pour supprimer un produit avec cette classe SVP. On peut supprimer par exemple 2 articles d'un produit mais si le resultat est à 0, il reste affiché dans le tableau à 0
GauldoMagique Messages postés 8 Date d'inscription lundi 15 décembre 2008 Statut Membre Dernière intervention 12 janvier 2009
30 déc. 2008 à 14:38
Super source, merci ! Simple et efficace.
cflorian911 Messages postés 3 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 8 juin 2007
20 mars 2008 à 14:59
ok merci
Par contre j'ai un autre problème avec la fonction: showQuantity() quand je passe en parametre une référence d'un produit(REFTEST1).
J'obtiens cette erreur:
Notice: Undefined index: REFTEST1 in C:\Documents and Settings\Flo\Site\lib\commande\Panier.php on line 87

cela correspond à cette ligne:
return $this->panier[$refproduit]['quantity'];

Est ce que quelqu'un sait d'où cela peut venir ?

Merci d'avance
Mement Messages postés 6 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 18 mars 2008
18 mars 2008 à 19:51
La fonction RemoveItem est là pour ça =)

Tu places un lien Supprimer comme celui-ci ->

Obj1 correspond à la référence de ton produit.

Tu ajoutes un code du genre:

if (isset($_GET['ref']) && $_GET['suppression']== 1){ $monPanier->removeItem($_GET['ref'], 0);
}

Et le produit correspondant à la référence sera supprimé quelque soit sa quantité... J'ai fait de la sorte pour mon TP d'initiation au PHP =)
cflorian911 Messages postés 3 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 8 juin 2007
18 mars 2008 à 18:08
Merci pour cette classe ....Par contre je n'arrive pas à créer une méthode pour supprimer un article (supprimer un article avec toute sa quantite). Est ce que quelqu'un sait comment faire ????
Mement Messages postés 6 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 18 mars 2008
22 nov. 2007 à 14:59
Salutations,

J'ai également rencontré un problème lors de l'utilisation de mon script chez mon hébergeur (ou en local avec IE)... En effet, à l'ajout d'un produit, le script générait une nouvelle session et donc autant que d'ajout etc...
Pour éviter cela, il est préférable de déclarer l'ouverture de la session avec session_start(); comme d'habitude... Dans les premières lignes de vos fichiers php utilisant la classe ;-)
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
21 nov. 2007 à 09:50
Merci pour la modif' !
Mement Messages postés 6 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 18 mars 2008
20 nov. 2007 à 23:12
Salutations,

Le code pour l'affichage est fonctionnelle, il est néanmoins nécessaire de faire deux petites modifications dans la fonction showCart();

$list[$i]['ref'] = $ref;
$list[$i]['qte'] = $data['quantity'];

N'étant pas un as, j'ai perdu énormément de temps mais j'ai réussi ^^ Je partage donc avec la communauté !
Félicitations pour la classe... Claire et bien pratique ;-)
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
20 nov. 2007 à 14:18
Pour info, pour faire fonctionner cette classe sous PHP4, il suffit d'enlever tout les "public", "private", et de remplacer le __construct() par le nom de la classe : Panier()
lbasic Messages postés 18 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 23 mai 2011
20 nov. 2007 à 12:57
Merci pour votre réponse rapide.
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
20 nov. 2007 à 09:52
C'est parce que c'est une classe PHP5 et que vous êtes certainement sous PHP4 ou moins.
lbasic Messages postés 18 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 23 mai 2011
19 nov. 2007 à 23:47
Bonjour,

J'obtiens cette erreur :

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home.10.28/pleug/www/cat/panier.php on line 10

@++
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
19 nov. 2007 à 17:02
Yo Rilou ! Ben c'est exactement ce que j'étais en train d'expliquer !
Bon, voici comment afficher le contenu du panier :
<?php
include_once('classe/panier.php');
$monPanier = new Panier();
$tab=$monPanier->showCart();
foreach($tab as $k => $v) {
echo $v['qte'].' '. $v['ref'].'
';
}
?>

J'ai pas testé ce code mais à priori ça devrait être ceci... ;)
mseh07 Messages postés 4 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 19 novembre 2007
19 nov. 2007 à 16:53
esque vous pouvez me donne le code qui permet de affichier le contenu de mon panier svp?
je pas bien compris cette notion svp
Merci
rilouteam Messages postés 7 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 19 novembre 2007
19 nov. 2007 à 16:37
A priori, c'est plutot :

foreach($tab as $ref => $data) ...

car tab est un tableau et non un objet !
--> Using $this when not in object

N'est ce pas nOOr ??

Eh PAUPIETTE !
mseh07 Messages postés 4 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 19 novembre 2007
19 nov. 2007 à 16:26
Merci pour votre reponse ,

mnt je veut affichier le contenu de mon panier :
voici mon script:
<?php
include_once('classe/panier.php');
$monPanier = new Panier();
$tab=$monPanier->showCart();
foreach($this->$tab as $ref => $data) {
echo $list['ref'][$i] = $ref;echo '
';
echo $list['qte'][$i] = $data['quantity'];
$i++;
}
?>

mais il affiche cet msg :

Fatal error: Using $this when not in object context in C:\wamp\www\klesoft04-09-07\Ordinateurs_consutlterpanier.php on line 445
la ligne 445 : c'est foreach ....
encors un peut d'aide svp
Merci encors.
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
19 nov. 2007 à 16:12
C'est pas une erreur, c'est bien un tableau qui est retourné par la méthode showCart (pardon, je me suis trompé dans mon exemple, c'était un print_r et pas un echo) en fait pour voir le contenu du panier il faut faire :

<?php
include_once('classe/panier.php');
$monPanier = new Panier();
echo '';
print_r($monPanier->showCart());
echo '

';
?>

Après, à toi de parser le tableau avec un foreach (par exemple) pour en faire ce que tu veux à l'affichage !
mseh07 Messages postés 4 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 19 novembre 2007
19 nov. 2007 à 15:54
Salut ,

un peut pb avec ce code :
l'osque je clique sur le lien consulter panier il m'affiche cet msg : " Array "
- la page consulterpanier.php contin ce code
<?php
include_once('classe/panier.php');
$monPanier = new Panier();
echo $monPanier->showCart();
?>
dou vient cet eurre svp ?
Merci
dens178 Messages postés 3 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 27 mars 2007
27 mars 2007 à 03:12
bien moi j'aimerais voir un exemple visuel une page vue d'un panier qui functionne bien et avec un code ke je pourais examiner
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
3 avril 2006 à 19:28
bonjour

j'ai trois problèmes.

je ne suis pas expert, seulement niveau moyen.mais j'avance.

je ne veux pas d'un cms, j'ai déjà un site en expansion,un forum et un blog, çà me suffit merci.

je ne souhaites pas être piraté donc, vù mon niveau en php(5), je ne joue pas avec les sessions.je prèfère un code pensé et écrit par un pro.c'est pour cette raison que je ne prend que des codes experts quand je bloque sur une fonction que j'aimerais mais ne peux écrire moi même de manière sécurisé(même si la plupart des scripts que l'on peux trouver sur cs ne le sont pas non plus, il n'ont pas eu le temps parait t'il...).est-ce que çà m'interdit cette merveilleuse possibilité d'ajouter un panier qu'il soit possible de télécharger à une galerie php existante?

cette galerie, je l'ai mise sur pied, avec ce que j'ai retenue en apprenant à coder en php5 avec l'aide de zend, de bons bouquins et de google et autres moteurs.seulement tout les paniers que j'ai vù et j'en ai vù des codes içi ou ailleurs, à l'exeption du votre, sont tous orientés business ou mal écrits.il y à bien, albulle, les classes me plaisent bien, elles sont librement adaptables mais elle contiennent des erreurs que je n'est pas pû corriger.j'en vient donc à mes questions.

1/j'inclu la classe comme suit :

include_once('classe/panier.php');

je crée une instance comme çà :

$panier_photo = new Panier();

le tout en haut de la page avant quoi que ce soit pour créer la session, jusque là pas de problèmes.le débogueur de zend m'indique bien un phpsessid.

j'ai créer une variable :

$ajout = $panier_photo->addItem($image,1);

ensuite, j'ai ce type de lien pour afficher l'image en taille réelle, celle que je veux ajouter au panier :

echo ("\n");

et celui pour le panier

echo "<li>ajout au panier</li>\n";

ce code n'affiche rien d'autre que le nom de la page.j'ai aussi tester çà

$ajout = $panier_photo->addItem();
$ajout = $panier_photo->addItem($imageDir/$image);

si vous le voulez, une suggestion serait la bienvenue.
rugbysolidarite Messages postés 4 Date d'inscription vendredi 16 septembre 2005 Statut Membre Dernière intervention 4 février 2006
4 févr. 2006 à 11:37
Merci beaucoup pour les infos.
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
4 févr. 2006 à 10:54
Pour utiliser cette classe, un niveau minimum est requis. Elle permet uniquement de "stocker" et gérer en permanence le "contenu" (de manière abstraite) d'un caddie. Pour l'utiliser vous devez l'installer sur un serveur PHP5, dans le dossier d'include par exemple, et l'appeler dans vos pages PHP.
Mais pour mettre en ligne plus rapidement et plus simplement votre boutique, je ne saurais vous recommander de télécharger d'installer un CMS (Content Management System) de type XOOPS (http://www.xoops.org), qui est très simple d'utilisation et qui propose des extensions de type boutique en ligne.
rugbysolidarite Messages postés 4 Date d'inscription vendredi 16 septembre 2005 Statut Membre Dernière intervention 4 février 2006
2 févr. 2006 à 22:40
Bonjour

je suis totalement novice en php donc ma question va vous paraitre forcément stupide ;-) grace à ce programme caddie comment fait on après pour le mettre sur un site ? (lien dans les pages, logo caddie, etc...) j'ai une petite boutique (elle a juste le nom pas la capacité lol) pour mon association caritative et je voulais mettre quelque chose de sympa comme ca sur le site.

merci de vos réponses
vince novice et moins encore
rilouteam Messages postés 7 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 19 novembre 2007
7 oct. 2005 à 16:57
Sérieux,
Ouais je pense que je vais m'en resservir la semaine prochaine pour un nouveau projet dont je te parlerais lundi :)
Sur toutes les sources de panier que j'ai trouvé c'est VRAIMENT la plus clair et la plus facile à modifier.

++ Noor
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
7 oct. 2005 à 16:42
Merci pour la casse Cyril... C'était du vite fait qu'on t'a dit bon sang ! J'y ai pensé juste après avoir posté ce code. En fait, je ne voulais pas utiliser le terme "Caddy" qui est une marque déposée (eh oui mon grand)... J'aurais du appeler cette classe Cart() !
Faites comme si vous n'aviez rien vu svp ! ^^

Sans dec', tu vas te servir de ce source pour un projet ?
Ca me ferait bien plaisir en tous cas !
rilouteam Messages postés 7 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 19 novembre 2007
7 oct. 2005 à 16:01
Par contre restons logique, soit on code en francais, soit en anglais, mais pas en franglais :)
panier -> caddy
voirPanier -> showCart
!
Non franchement j'aime bien ces codes clair que l'on peut continuer à sa sauce sans se prendre la tete...
Pas si petit que ça le littlewings !
rilouteam Messages postés 7 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 19 novembre 2007
7 oct. 2005 à 15:54
Merci pour l'info Littlewings,
Moi j'en aurai l'utilité la semaine prochaine pr un nouveau projet !
Bravo on en redemande des comme ça :)
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
6 oct. 2005 à 10:41
@FhX => c'est vrai que j'aurais dû traiter mes variables ainsi. A vrai dire, je voulais éviter de faire un unset sur une référence n'existant pas, mais c'est vrai que PHP ne doit même pas renvoyer de notice() dans ce cas là !
Merci du conseil !
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
3 oct. 2005 à 23:08
C'est la que la sérialisation par session est interessante ! Enfin, c'est mon avis :)
Fait aussi un peu plus d'effort au niveau du traitement des variables, genre :

public function addItem($refproduit="",$nb=1){
if ( $nb > 0 ) {
@$this->panier[$refproduit]['quantity'] += $nb;
} else {
unset ($this->panier[$refproduit]);
}
}
Par exemple :)
chezsteph1 Messages postés 3 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 29 novembre 2006
3 oct. 2005 à 10:25
Simple et claire.
je n'en ai pas l'utilité directe, mais je pense qu'elle va m'inspirer ...
Merci !
cs_littlewings Messages postés 32 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 22 octobre 2008
30 sept. 2005 à 16:48
OK, je pensais que les commentaires des méthodes seraient suffisamment explicites...

// création d'un objet de type Panier()
// sera stocké en variable de session, et donc accessible à tout moment par la suite (il faut réinstancier l'objet à chaque page quand même)

$monPanier = new Panier();

// je veux mettre trois bananes dans mon panier :

$monPanier->addItem("banane",3);

// je veux mettre 10 DVD dans mon panier :

$monPanier->addItem("DVD",10);

// finalement, je vais enlever deux bananes, une me suffira

$monPanier->removeItem("banane",2);

// combien me reste-t'il de bananes ?

echo $monPanier->showQuantity("banane");

// combien j'ai d'articles en tout dans mon panier ?
// (en ne mettant pas de paramètre, j'ai le total du nombre d'articles, toutes références confondues)

echo $monPanier->showQuantity();

// enfin, je vais passer mon nombre de DVD de 10 à 20

$nomPanier->setQuantity("DVD",20);

// alors, qu'est-ce que j'ai dans mon panier maintenant ?

echo $monPanier->showCart();

// voilà ! Une petite note svp ^^ !
bbcluny Messages postés 66 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 29 septembre 2008
30 sept. 2005 à 15:41
Salut,

peut on avoir un exemple d'utilisation de ta classe ?

Merci d'avance