Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASS PANIER CADDIE


Information sur la source

Catégorie :E-Commerce Classé sous : panier, caddie, classe Niveau : Initié Date de création : 14/02/2005 Date de mise à jour : 09/05/2006 10:10:21 Vu / téléchargé: 23 988 / 5 509

Note :
7,9 / 10 - par 10 personnes
7,90 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (146)
Ajouter un commentaire et/ou une note

Description

Petite classe, une de plus sur les caddies :
    - Gestion des articles
    - Des Frais de port
    - Des tarifs HT et TTC
 

Source

  • // Frais de port et livraison
  • function getLivraison()
  • function getTypeLivraison()
  • function ajoutPort($port, $typeport)
  • // Total Final TTC
  • function getTotalFinalTTC()
  • // Renvoie la quantite de l'article $numserie
  • function getQteArticle($numserie)
  • // Renvoie le prix de l'article $numserie
  • function getPrixArticle($numserie)
  • // Renvoie le montant HT de l'article $numserie
  • function getMontantArticle($numserie)
  • // Renvoie le montant TTC de l'article $numserie
  • function getMontantTTCArticle($numserie)
  • // Renvoie le montant TTC de l'article $numserie
  • function getMontantTVAArticle($numserie)
  • // Renvoie le nombre d'article contenus dans le Panier
  • function getNombreArticle()
  • // Renvoie le montant total HT
  • function getTotalHT()
  • // Renvoie le montant total TTC
  • function getTotalTTC()
  • // Renvoie le montant de la TVA
  • function getTotalTVA()
  • // Renvoie le montant de la TVA
  • function getTVA()
  • // Ajoute un article dans le Panier
  • function ajouterArticle($numserie, $quantite, $montantHT = 0)
  • // Supprime un article du Panier
  • function supprimerArticle($numserie)
  • // Met à jour la quantite d'un article sélectionné dans le Panier
  • function miseAJourQteArticle($numserie, $quantite)
  • // Calcule le montant Total HT et TTC du panier
  • function CalculTotal($prix)
  • // Calcule le montant Total HT et TTC par article
  • function CalculMontantArticle($numserie, $prix, $qte)
// Frais de port et livraison
function getLivraison()

function getTypeLivraison() 

function ajoutPort($port, $typeport)

// Total Final TTC
function getTotalFinalTTC()

// Renvoie la quantite de l'article $numserie
function getQteArticle($numserie)

// Renvoie le prix de l'article $numserie
function getPrixArticle($numserie) 

// Renvoie le montant HT de l'article $numserie
function getMontantArticle($numserie) 

// Renvoie le montant TTC de l'article $numserie
function getMontantTTCArticle($numserie) 

// Renvoie le montant TTC de l'article $numserie
function getMontantTVAArticle($numserie)

// Renvoie le nombre d'article contenus dans le Panier
function getNombreArticle()

// Renvoie le montant total HT
function getTotalHT() 

// Renvoie le montant total TTC
function getTotalTTC() 

// Renvoie le montant de la TVA
function getTotalTVA() 

// Renvoie le montant de la TVA
function getTVA() 

// Ajoute un article dans le Panier
function ajouterArticle($numserie, $quantite, $montantHT = 0)

// Supprime un article du Panier
function supprimerArticle($numserie) 

// Met à jour la quantite d'un article sélectionné dans le Panier
function miseAJourQteArticle($numserie, $quantite) 

// Calcule le montant Total HT et TTC du panier
function CalculTotal($prix) 

// Calcule le montant Total HT et TTC par article
function CalculMontantArticle($numserie, $prix, $qte)

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

16 février 2005 19:19:50 :
j
02 août 2005 16:07:10 :
Changement et suppression de fonctions qui gérait la TVA sur les frais de port (erreur réparée).
16 novembre 2005 17:06:27 :
Ajout d'1 exemple d'utilisation. Il faut simplement lancer le fichier liste_article.php Ceci n'est qu'un exemple rapidement codé, veuillez excuser les erreurs ou bugs et surtout la présentation. ^^
18 novembre 2005 10:59:22 :
Ajout de serialize et unserialize
09 mai 2006 10:10:22 :
Petite modification pour les erreurs lorsque l'on vidait le panier.

Commentaires et avis

signaler à un administrateur
Commentaire de fg85 le 14/02/2005 23:20:14

ça a l 'air de se tenir ...

--------------------------------
http://fg.logiciel.free.fr

signaler à un administrateur
Commentaire de harlock59 le 30/05/2005 09:50:31

j'imagine que dans la page ou sont les articles il faut mettre un include (panier.class.php), mais que doit on mettre sur le lien "ajouter au panier" d'un article?

signaler à un administrateur
Commentaire de Steph666 le 31/05/2005 15:21:38

Tu fais une page qui ne gère que la gestion des ajouts modifs suppression des articles et éventuellement le calcul des prix et frais de port en activant calculmontant, puis redirection vers la page appelante.
Ex de page 'jout_panier.php' :

include_once 'panier.class.php';

session_start();

if (!isset($_SESSION['panier'])) {
session_register("panier");
$_SESSION['panier'] = new Panier();
}


$numserie    = isset($_REQUEST["numserie"]) ? $_REQUEST["numserie"] : "";
$qte         = isset($_REQUEST["qte"])      ? $_REQUEST["qte"]      : 0;
$origine     = isset($_REQUEST["origine"])  ? $_REQUEST["origine"]  : "";
$prix        = isset($_REQUEST["prix"])     ? $_REQUEST["prix"]     : 0;

if (!Empty($numserie) && $qte > 0) {
if ($prix > 0) {
$_SESSION['panier']->calculmontant = true;
$_SESSION['panier']->ajouterArticle($numserie, $qte, $prix);
} else $_SESSION['panier']->ajouterArticle($numserie, $qte);
if ($origine) {
Header("Location: $origine&ajout=oui");
exit;
}
}

Et lors de l'appel tu fais :
                ajout_panier.php?numserie=$numserie&qte=$qte&prix=$prix&origine=$origine

Ceci n'est qu'un exemple.

signaler à un administrateur
Commentaire de peterklm le 26/07/2005 00:46:34

Salut,
je trouve tes fonctions sont très bien faites, mais malheureusement tu developpes pas suffisamment le concept d'utilisation pour les débutant et et meme pour un bon amateur confirmé . Moi perso j'appreci ta façon de synthétiser tout ça , mais ça fait une semaine entière que je galère la dessus, je n'arrive meme pas à afficher quelque chose. j'ai plutôt des erreurs que du resultat genre :
Warning: 'unserialize_callback_func' defined (1) but not found in d:\easyphp\www\gestion_achat\achat.php on line 2.
une explication de plus serait bienvenue, suivant ton emploi du temps bien sûr.

signaler à un administrateur
Commentaire de Steph666 le 26/07/2005 10:03:31

Salut,

Partout où tu utilises la classe que ce soit session ou non, il faut faire un include de la classe, il semble peut-être que ce soit une référence à un objet non défini.
Mais si tu postais un bout de code se serait plus simple à voir que sorti de son contexte.

signaler à un administrateur
Commentaire de landrer le 16/09/2005 11:23:16

Salut,

Moi j'ai regarder ce code et je trouve que c'est tres clair , tres simple,
c'est assez bien gerer je trouve dans l'ensemble.
Sauf Que... le calcul du montant renvoie des resultat incohérents du à une
erreur de logique d'incrémentation .
// Calcule le montant Total HT et TTC du panier
function CalculTotal($prix) {
$this->totalHT  += $prix;
$this->totalTTC += $prix * (1 + ($this->TVA / 100));
}
il faut modifier l'appel de la  fonction CalculTotal() dans la fonction ajouterarticle() comme ceci

// Ajoute un article dans le Panier
function ajouterArticle($numserie, $quantite, $montantHT = 0) {
if (!empty($numserie)) {
if ($this->article[$numserie]) $this->article[$numserie]['qte'] += $quantite;
else {
$this->article[$numserie]['qte'] = $quantite;
$this->nbarticle++;
}
if (isset($this->calculmontant) && $this->calculmontant == true) {
$this->article[$numserie]['prix']      = $montantHT;
$this->CalculMontantArticle($numserie, $this->article[$numserie]['prix'], $quantite);
$this->CalculTotal(($this->article[$numserie]['prix']*$quantite));
}
}
}



signaler à un administrateur
Commentaire de khemi le 08/10/2005 20:13:15

Bonjour, j'aurais une question. Tu fais comment pour afficher ce qui se trouve dans le panier?
Je m'explique tu as mis 3 article dans le panier et tu voudrais tous les afficher ?
J'ai vu que tu peux sortir les données en fonction de leur numéro de série mais si tu ne le connais pas, tu fais comment ?

Sinon très bien fait cette classe ! Merci de l'avoir publié

signaler à un administrateur
Commentaire de Steph666 le 09/10/2005 15:57:06

Salut tu peux faire une boucle foreach ($tableau as $cle => $valeur) {}
avec $cle étant l'index et $valeur sa valeur.

signaler à un administrateur
Commentaire de objectifweb le 15/11/2005 13:39:47

Bonjour Steph666
Sans avoir l'habitude de travailler avec des classes (mea culpa) et cela aidera certainement d'autres qui n'osent pas abuser, tu as quelques lignes de codes permettant de relire le pannier en affichant le numéro de série et la quantité, on arrivera bien selon cela à afficher le prix etc...?

En te remerciant de ta patience envers des ignares ;)
Patrick

signaler à un administrateur
Commentaire de Steph666 le 16/11/2005 17:08:12

Je viens de rajouter un exemple assez basique permettant d'utiliser la classe.
J'espère que ce sera compréhensif.
Sinon n'hésitez pas à poser des questions et/ou poster des commentaires ^^.

Stéph.

signaler à un administrateur
Commentaire de objectifweb le 16/11/2005 18:15:23

Merci steph666, je vais jeter un oeil mais cela me semble beaucoup plus clair ;)

signaler à un administrateur
Commentaire de FhX le 17/11/2005 18:25:04

$_SESSION['panier'] = new Panier();

Ah ?!
J'imagine pas la tête du serveur quand il doit faire mumuse avec la session avec un objet à l'intérieur :)

Nonon, c'est pas du tout comme ca qu'il faut faire !

<?php // Pour créer un panier et l'enregistrer en session
$var = new Panier();
// Prog
$_SESSION['panier'] = serialize($var);
?>
<?php // Pour récupérer un panier existant en session
if ( isset($_SESSION['panier']) ) {
     $var = unserialize($_SESSION['panier']);
}
?>
<?php //Pour coupler les deux !
$var = ( isset($_SESSION['panier']) ) ? unserialize($_SESSION['panier'] : new Panier;

// Programme
$_SESSION['panier'] = serialize($var);
?>
On ne fait jamais traverser un objet en session comme ca :)

signaler à un administrateur
Commentaire de Steph666 le 18/11/2005 10:09:54

Ok J'en prends note, je change ça dès que possible.

Stéph.

signaler à un administrateur
Commentaire de TrasherDemon le 25/11/2005 11:07:34

Salut,

Efficace ce code rien à redire ;-)

Deux petites remarques néanmoins, concernant les fichiers exemples :
1) php semble ne pas aimer la sérialisation d'objets null (cas getNombreArticle() <= 0)
dans le fichier consultation_panier.php, j'ai remplacé
$_SESSION["panier"] = serialize($page->panier);
par
if(isset($_SESSION['panier'])) $_SESSION["panier"] = serialize($page->panier);
et j'ai ajouté
unset($_SESSION["panier"]);
dans la condition if ($page->panier->getNombreArticle() <= 0)
2) selon la doc de php, il n'est pas recommandé d'utiliser session_register avec $_SESSSION (cf http://fr2.php.net/manual/fr/function.session-register.php).

Le premier point peut causer un bug (dans mon cas l'impossibilité d'ajouter un article au panier après avoir vidé ce dernier), la seconde ne pose visiblement pas de problème majeur.

Bon travail Steph666 :-)

signaler à un administrateur
Commentaire de FhX le 25/11/2005 14:29:25

"php semble ne pas aimer la sérialisation d'objets null (cas getNombreArticle() <= 0)" Un objet null ? Ca veut dire quelque chose ca ?! lol

Une variable est soit de type objet, soit de type null. Certainement pas les 2 en même temps :) C'est comme si je te disais qu'une chaine est de type double.

signaler à un administrateur
Commentaire de TrasherDemon le 25/11/2005 14:50:53

Je me suis effectivement mal exprimé :-)
C'est la valeur de l'objet qui vaut null

Dans le cas où le nombre d'articles est <=0 ; le code suivant est exécuté $page->panier = null; (d'où "l'objet null"...), cet objet est ensuité sérialisé... Lors de l'appel à unserialize, ce n'est pas un objet correct qui ressort de tout ca.

J'espère m'être mieux exprimé cette fois...

signaler à un administrateur
Commentaire de FhX le 25/11/2005 16:13:33

Voui, mais tu as faux :)
Un attribut de classe peut être déclaré de type null et etre ensuite sérialisé.

$this->panier = null;
A la sérialisation, tu obtiens une chaine type :
a:1{s:9:NULL}.
a:1 représentant l'objet en cours.
s:9 représentant $this->panier. (peut être une autre pair de lettre/chiffre)
NULL sa valeur :)

Et ca marche pourtant très bien, vu que je l'utilise moi même.
Attention, un objet n'a pas de valeur propre !!! Ce sont ses attributs de classes qui le peuvent !

Lorsque tu unserialises la chaine pour la reconvertir en objet, ca marche très bien. Encore faut-il ne pas avoir oublier d'avoir inclu le fichier de classe au risque de se retrouver avec une classe de type stdClass. Autrement dit une classe vide :o

signaler à un administrateur
Commentaire de TrasherDemon le 25/11/2005 17:50:57

Je comprends (our je pense comprendre) ce que tu dis FHX...

Néanmoins, lorsque j'utilise la classe exemple telle quelle, la valeur enregistrée pour l'objet panier n'est pas du type a:1{s:9:NULL}. Lorsque je fait un print_r($_SESSION), j'obtiens [panier] => N;
Je n'arrive pas à comprendre ce qu'est ce N
Merci beaucoup pour tes explication en tous cas :)

signaler à un administrateur
Commentaire de lOeil le 08/01/2006 18:48:04

Merci pour ce code.
Cependant j'obtient une erreur des que j'ouvre liste_article.php
-> Fatal error: Call to a member function on a non-object in c:\program files\programmation\easyphp1-8\easyphp1-8\www\panier\liste_article.php on line 126

Quelqu'un pourrait m'aider s'il vous plait ? =)

signaler à un administrateur
Commentaire de Steph666 le 08/01/2006 22:08:35

Salut,
Je n'ai pas la version 1.8 d'easyPhp, je vais bientôt l'installer ^^.
Je crois que cette version utilise php5, et la classe en question ne doit pas être adaptée pour.
Quand j'aurais le temps, où si quelqu'un en a le courage, je l'adapterais.

Stéph.

signaler à un administrateur
Commentaire de FhX le 09/01/2006 00:36:01

print_r() et serialize() sont deux fonctions différentes :)

signaler à un administrateur
Commentaire de NeOtEcK le 13/01/2006 11:39:27

petite question, je tente depuis 2 jours d'adapter ce code à ma base mysql

en effet j'ai une table 'produit', et j'aimerais pouvoir enregistrer mon panier dans une table CA (chiffre d'affaire) mais le seul probleme c'est que lors de l'enregistrement il faudrait que chaque produit soit enregistré séparément, quelqu'un pourrait-il m'aider ?

Merci d'avance

signaler à un administrateur
Commentaire de lelapinou_69 le 13/02/2006 18:29:42

Hello NeOtEcK. J'essaie moi aussi de mettre ce script en liaison avec une BDD Mysql. Mais par contre, lorsque j'introduit le code de connexion, la page générée par php est vide. Il n'y a meme pas de source quand je fais l'affichage des sources via le browser.
Aurais tu une idée.

signaler à un administrateur
Commentaire de Steph666 le 14/02/2006 10:01:18

Bonjour,

Pour y voir un peu plus clair, si vous pouviez mettre un bout de code ou détailler un peu plus vos problèmes, je pourrais y jeter un coup d'oeil à l'occasion.

Stéph.

signaler à un administrateur
Commentaire de lelapinou_69 le 14/02/2006 12:54:17

Mille merci, mais je débugg ligne par ligne, et je trouve petit à petit d'où vient mon soucis. Par contre c'est pas une mince affaire que de l'intégrer à la gestion d'une BDD. un coup ça marche, un coup ça marche plus, argh, je m'arrache le peu de cheveux qu'il me reste...

signaler à un administrateur
Commentaire de Steph666 le 15/02/2006 13:11:20

Salut,
Hésitez pas à poster les bugs trouvés, ça servira à tout le monde.
Quant au ça marche et ça marche pas, j'aimerais plus d'explications, parce que là tu m'inquiètes ^^.

L'exemple d'utilisation de la classe filé avec, est très sommaire par rapport à l'utilisation de la classe elle même. Il ne faut pas le prendre tel quel et le réutiliser, il est juste là pour illustrer l'utilisation partielle de la classe. C'était pour répondre à une attente de certaines personnes, et non pour reproduire un système de gestion de panier complet.

La classe en elle-même me semble assez complète pour permettre un système de gestion plus poussé.
Normalement ça pose aucun problème pour ce qui est de l'insertion, je m'en sers et je n'ai pas eu de soucis particulier.

Stéph.

signaler à un administrateur
Commentaire de stouph24 le 23/02/2006 01:34:54

salut et félicitations pour ces sources.
formé à java le commence l'objet en php
j'attaque un site de vente en ligne en relation avec une base mysql et un paiement final par paypal.
j'espere profiter de vos lumieres et vous faire partager mon code :
création d'une classe article, génération dynamique des objets articles etc...

une première question : pourquoi dans ajout_panier.php tu récupères les les variables  $numserie etc... dans $_REQUEST[] plutôt que dans $_POST[] ?

stouph

signaler à un administrateur
Commentaire de Steph666 le 23/02/2006 09:25:58

Salut et merci,

Dans le cas que tu précises il aurait d'ailleurs fallu mettre $_GET étant donnée que les variables sont récupérées d'un lien.

Stéph

signaler à un administrateur
Commentaire de lelapinou_69 le 23/02/2006 13:44:13

Hello steph. voilà j'avais écris plus haut que "parfois cela marchait et que parfois cela ne marchait pas". il se trouve que j'essaie d'inclure une donnée dans le tablea 'ARTICLE', c'est la désignation. Alors vous allez certainement me prendre pour un gros nul, mais ce n'est pas grave, je profite du forum pour poser ma question; donc quand j'ajoute la désignation, que j'appelle '$ref' mon lien ajout du panier est ainsi : ajout_panier.php?numserie='.$row['id_art'].'&ref='.$row['des_art'].'&qte=1&prix='.$row['prix_art'].'&origine....;
à savoir que dans $row['des_art'] il y a une chaine de caractère, avec des espaces, cela semble poser poblème sur mon lien, il ne s'éxécute pas, et du coup lorsque je clique, cela revient sur une page blanche.
La je bute sérieusement. C'est possible que je me sois tellement acharné que je ne vois pas l'évidence, mais, j'ai besoin d'un coup de main.
Merci beaucoup.
Merci aussi pour le script.

Je tiens à préciser que c pour ma formation personnelle que je fais ça et non pour un client. Je le dis car ça sèche sec sur le forum des fois.
Cordialement.

signaler à un administrateur
Commentaire de lelapinou_69 le 23/02/2006 14:13:46

Merci à tous ceux qui ont bien rit avec mon message. Je ris encore. je disais bien qu'à force d'acharbement, je ne voyais pas l'évidence, et c'est ce qui se passait. il se trouve que la chaine de caractère dans $row['des_art'] était tout simplement celle ci : Ecran TFT 15" YAMADA. voilà, je vous laisse rire, et ce sera normal (pour les autres qui ne voient pas ce que c'est, et il va y en avoir des comme moi) c'est la double-cote, argh argh.
Merci à tous, et à bientot pour d'autre aventures.

signaler à un administrateur
Commentaire de merci51 le 27/02/2006 11:36:32

bonjour et merci et bravo

je suis débutant depuis longtemps en php et une class caddie clair c'est bien !!!

Mais j'ai juste mis l'exemple en local

la page 'liste_article.php' s'affiche parfaitement

et quand j'ajoute un article , HOP:

[code]
Notice: Undefined index: Reference2 in c:\easyphp1-8\www\panier\panier.class.php on line 146

Notice: Undefined index: montantHT in c:\easyphp1-8\www\panier\panier.class.php on line 191

Notice: Undefined index: montantTTC in c:\easyphp1-8\www\panier\panier.class.php on line 192

Warning: Cannot modify header information - headers already sent by (output started at c:\easyphp1-8\www\panier\panier.class.php:146) in c:\easyphp1-8\www\panier\ajout_panier.php on line 51
[/code]

alors j'ai un peu honte mais ....
pourquoi?

Merci

signaler à un administrateur
Commentaire de Steph666 le 27/02/2006 15:30:24

Bonjour,

Je pense qu'il faut rajouter un 'isset' sur l'existence de la variable à la ligne 146, pour qu'il n'y ait plus d'erreur. Je mettrais ça à jour le plus rapidement possible dès que j'en aurais l'occasion.

En attendant, essaye de remplacer à la ligne 146 :

ça :
   if ($this->article[$numserie]) $this->article[$numserie]['qte'] += $quantite;

par ça :
   if (isset($this->article[$numserie])) $this->article[$numserie]['qte'] += $quantite;

et dis moi si c bon.

Stéph.

signaler à un administrateur
Commentaire de merci51 le 27/02/2006 21:51:43

Le probleme viens du faite, et je ne suis pas le seul je crois, c'est que je fesait tourner le script en local sous easyphp 1-8 .

pour le remplacement de la ligne 146 , ta solution fonctionne (en local) , car sur un serveur j'ai aucune erreur , le script tourne TRES BIEN !!!!

En local , je suis aussi tombé sur la même erreur que  "l0eil":
"-> Fatal error: Call to a member function on a non-object in c:\program files\programmation\easyphp1-8\easyphp1-8\www\panier\liste_article.php on line 126 "


Voilà ....
Merci à toi, j'essayerais de faire bon usage de ton script.
mais il me reste encore bien du travail sur les class ...

signaler à un administrateur
Commentaire de merci51 le 08/03/2006 11:20:31

Bonjour c'est encore moi ...

Aprés quelques tentatives je bloque maintenant sur un nouveau probleme.

J'ai connecter la page liste article sur une base , ça marche

mais en faite quand je clic sur avouter un article

j'ai un affreux message :"
Fatal error: Call to undefined function: ajouterarticle() in c:\easyphp1-8\www\xxxxx\teamwear\ajout_panier.php on line 45
"

J'ai pas touché la page "ajout_panier.php" ce qui me rend du coup des plus perplexe??..!!!!

Alors la je planche je galere je rale je cherche et maintenant j'appel "A L'AIDE"

Si quelqu'un à une idée....
Merci

signaler à un administrateur
Commentaire de merci51 le 08/03/2006 14:38:07

suite...  ;)
Je me fais les questions et les reponses    

c'est encore sous easyphp1-8 qu'il y a des erreurs

Mais sur mon serveur , CA MARCHE !!!!

par contre quand on supprime tout les articles du panier
LA c'est le drame

concretement la page "ajout_panier.php" reste blanche

et il ne se passe plus rien ...

Si je suis penible il faut le dire :)

à bientôt

je cherche encore .... mais moi et les class c'est du sport


signaler à un administrateur
Commentaire de lelapinou_69 le 08/03/2006 17:44:16

pour résoudre ton dernier POST. il y a un bout de code qui test si tu as des articles dans le panier. Trouve ce bout de code, et insère dessus un lien hypertext sur la page liste_article.php. Je bosse avec le même script, et j'ai rencontré quelques soucis semblables. Mis celui ci n'est pas grand chose.
Sinon vérifie bien le paramètrage de ton fichier php.ini qui se trouve dans Easyphp\Apache, car j'utilise aussi Easyphp et je n'ai eu aucun soucis en local.
Mets bien ta variable de déclaration des globales à 'On' et change le paramètrage de l'affichage de tes erreurs, car en local, tu as généralement des warnings, que tu n'as pas sur les servers webs.
Voilà, en espèrant avoir contribué.
Merci au créateur du script, ça nous aide beaucoup pour se lancer.

signaler à un administrateur
Commentaire de merci51 le 08/03/2006 20:59:29

Merci

C'est de ce code dont tu parles ?
(page consultation_panier.php)

if ($page->panier->getNombreArticle() <= 0) {
$page->panier->destroy();
$page->panier = null;
}

Si oui ... tu pourrais etre plus clair

faire un Header("Location:liste_article.php.");  ??

Merci

signaler à un administrateur
Commentaire de merci51 le 08/03/2006 21:12:08

RE ... lelapinou_69, je me permet une question ...

J'ai lu (plus haut) que tu passais les designation de l'article au panier ; j'y songe aussi pour eviter un autre appel a la base et je me demandais si il fallait faire des changements à : panier.class.php, en faite je rame sur les class...

je tatonne.

tu pourrais me mettre sur une piste, merci

signaler à un administrateur
Commentaire de lelapinou_69 le 08/03/2006 23:41:42

La marche à suivre et simple. Lorsque tu cliques sur le lien pour ajouter un article, il y a des variables que tu envoie, au fichier ajout_article.php, hé bien là dessus tu dois ajouter une nouvelle variable :
voici comment je fais :
- Fichier liste_article (lien pour ajouter) : ajut de la variable $reference
###########################################################################################
<a href="ajout_panier.php?numserie='.$row['id_art'].'&reference='.$row['des_art'].'&qte=1&prix='.$row['prix_art'].'&origine=liste_article.php?" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'Image29\',\'\',\'images/acheter_b.gif\',1)"><img src="images/acheter.gif" name="Image29" width="75" height="24" hspace="5" border="0"></a><a href="#" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'Image30\',\'\',\'images/detail_b.gif\',1)"><img src="images/detail.gif" name="Image30" width="75" height="24" border="0"></a>
###########################################################################################

- fichier ajout_article :
###########################################################################################
/*************************************************************************************************
**                               affectations variables                                         **
*************************************************************************************************/
$numserie = isset($_REQUEST["numserie"]) ? $_REQUEST["numserie"] : "";
$ref   = isset($_REQUEST["reference"])? $_REQUEST["reference"]: "";
$qte      = isset($_REQUEST["qte"])      ? $_REQUEST["qte"]      : 0;
$origine  = isset($_REQUEST["origine"])  ? $_REQUEST["origine"]  : "";
$prix     = isset($_REQUEST["prix"])     ? $_REQUEST["prix"]     : 0;


/*************************************************************************************************
**                                  programme principal                                         **
*************************************************************************************************/

if (!Empty($numserie) && $qte > 0) {
if ($prix > 0) {
$var->calculmontant = true;
$var->ajouterArticle($numserie, $ref, $qte, $prix);
} else $var->ajouterArticle($numserie, $qte);

$_SESSION["panier"] = serialize($var);
}
###########################################################################################

-fichier class_panier
###########################################################################################
// Ajoute un article dans le Panier
function ajouterArticle($numserie, $ref, $quantite, $montantHT = 0) {
if (!empty($numserie)) {
if ($this->article[$numserie])
{
$this->article[$numserie]['qte'] += $quantite;
$this->article[$numserie]['reference'] = $ref;
}
else
{
$this->article[$numserie]['qte'] = $quantite;
$this->article[$numserie]['reference'] = $ref;
$this->nbarticle++;
}
if (isset($this->calculmontant) && $this->calculmontant == true) {
$this->article[$numserie]['prix']      = $montantHT;
$this->CalculMontantArticle($numserie, $this->article[$numserie]['prix'], $quantite);
$this->CalculTotal(($this->article[$numserie]['prix']*$quantite));
}
}
}

// Renvoie la référence de l'article $numserie (fonction à créer, enfin c une méthode)
function getRefArticle($numserie) {
if (isset($this->article[$numserie]['reference'])) return ($this->article[$numserie]['reference']);
else return 'inconnu';
}
###########################################################################################

- fichier consultation_panier :
###########################################################################################
//pour l'affichage de la référence
<td align="left">'.$page->panier->getRefArticle($numserie).'</td>
###########################################################################################

voilà, j'espère que cela peut t'aider.
tu peux voir ce que cela donne sur www.carbo-cleaner.com, le site est encore en travaux, alors pardonne les éventuelles erreurs.

signaler à un administrateur
Commentaire de merci51 le 09/03/2006 00:08:53

Merci beaucoup

j'y etais presque...

Mais je prend note

par contre j'ai visité ton site et j'ai un bug sur le menu

"On Mouse Out" les rubriques disapaissent et le cadre centrale deviens blanc.

teste sous IE

Voila sinon c'est bien

Par contre comment tu vas faire le multilang

moi je fais deja en français anglais et c'est pas simple
prenant en compte € et $
les tarifs en $ sont HT

ce qui entraine des mmigraines ....

Merci encore

signaler à un administrateur
Commentaire de lelapinou_69 le 09/03/2006 00:20:00

j'ai vu que sous IE cela disparait, et je ne sais pas pourquoi. aucune idée là dessus?? pour l'instant je fais tout sur firefox, je verrais ensuite.
Pour le multilang pas encore réfléchis, je me suis déjà bien cassé la tête avec ce que j'ai fais. Mais j'ai le temps là alors je me penche pour le moment pour la réalisation complète de la commande.
Bye

signaler à un administrateur
Commentaire de ginyy le 21/03/2006 00:48:01

Bonjour,

Merci pour le prog vraiment super bien fait. Cela dit, je rencontre certain bug sur le fichier liste_article:

Fatal error: Call to a member function on a non-object in /homepages/43/d146767742/htdocs/indeco/web/Pages_Front/Panier/liste_article.php on line 83

Voici la partie concernée:
if (isset($_SESSION['panier'])) {
$page->panier = unserialize($_SESSION['panier']);

if ($page->panier->getNombreArticle() > 0) {
$out .= '
<br /><br />
<center><a href="consultation_panier.php">Voir mon Panier</a></center>';
}  
}

J'espère que vous pourrez m'aider à debugger ça. Merci.

signaler à un administrateur
Commentaire de ginyy le 21/03/2006 02:33:12

C'est encore me ;)

J'ai essayé de vider le cache et c'est bon c'est reparti...
Maintenant j'ai un autre problème. C'est quand je veux transformer mon panier 'user' en panier 'membres'. Je fais une page consultation2_panier ou j'insere ma session utilisateur. Et la je me retrouve avec:
Fatal error: Call to undefined function: affichages() in /homepages/43/d146767742/htdocs/indeco/web/Pages_Front/Panier/consultation2_panier.php on line 50

Le code:
if ($page->maj) maj($page);

$contenu .= Affichages($page);

Le debut de mon fichier:
session_start();

if (isset($_SESSION['logged']) && $_SESSION['logged'] == true)
{      
   echo 'Bonjour<b>'.$_SESSION['nom_particulier'].',</b> [ <a href="../Particuliers/deconnexion.php">Se déconnecter</a> ]<br />';
....
Fin du prog
}
else{echo 'vous devez etre connecté..';
}

J'ai l'impression qu'il aime pas les doubles sessions. D'ailleurs peut-on utiliser une même session_start() pour le panier et les membres?

Merci de votre aide :)

signaler à un administrateur
Commentaire de lelapinou_69 le 21/03/2006 09:19:14

j'ai eu ce soucis également. Et je ne sais pas pourquoi. Mais d'après un admin de chez mon hébergeur, cela dépend de la position de ta ligne session_start(), c'est bidon, mais toutes mes 'session_start()' je les ai mis en première ligne de code, et après plus de soucis. Je sais c'est bidon, mais cela a régler mon problème.

signaler à un administrateur
Commentaire de peterklm le 21/03/2006 10:09:40

Salut,
l'exemple donné plus haut suscite bien mmon attention, On m'a tjrs dit qu'il faut serializer la session pour rendre le code soit plus leger ou plus efficace...(je ne sais pas trop à quoi ça sert la serialization). De plus dans l'exemple ci dessus je vois que le programmeur a serializé la session panier et à aucun moment il n'a utilisé la fonction unserialize qui marche en parallele à serialisz.

Mon appel ici est pour savoir à quoi ça sert exactement la serialization.
Quand faut il le faire.

merci pour une reponse.

signaler à un administrateur
Commentaire de FhX le 21/03/2006 13:26:07

Juste comme ca :)

Toutes données envoyées en session est automatiquement serialisé/déserialisé via le moteur interne de PHP.
Utiliser serialize() et unserialize() pour des variables en session ne sert que pour être vraiment sur.

La sérialization permet de transformer une tableau ou un objet ou n'importe quoi en une chaine exploitable et qui puisse être passé en paramètre d'URL ou autre facilement.

signaler à un administrateur
Commentaire de peterklm le 21/03/2006 15:21:27

slt,
oui, je comprends un peu mieux maintenat, mais je suis entrain de mettre en fonction cette class panier, sans pour autant utiliseer la fonction serialize(), et ma foie ça marche nickel en local pour l'instant.
dois je avoir recours à la serialisation ou je laisse comme ça. quel est l'enjeu de mon code.

merci

signaler à un administrateur
Commentaire de corsonr le 05/04/2006 12:52:13

hello, je trouve code tres bien et bravo a l'auteur. J'ai une petite question: lorsque l'on ajoute un produit dans la panier (consultation_panier.php) seule la référence du produit est listée, et je souhaiterais récupérer le nom exact du produit sélectionné (depuis ma base)... je passe donc la variable dans le lien <a href="ajout_panier.php?numserie='.$row['id_art'].'&reference='.$row['des_art'].'&qte=1&prix... et je rajoute le bout de code suivant dans ajout_article.php:

$nom = isset($_REQUEST["nom"])  ? $_REQUEST["nom"]  : "";

dans le fichier de classe (panier.class.php) je rajoute une fonction:
// Renvoie le nom de l'article $numserie
function getNomArticle($numserie) {
return ($this->article[$numserie]['nom']);
}

et dans consultation_panier.php pour afficher la valeur je mets:
'.$page->panier->getNomArticle($numserie).' dans la variable $out...

et bien entendu ca ne fonctionne pas....

quelqu'un saurait-il me donner un coup de pouce pour en fait passer une variable (nom) supplémentaire dans le lien ajouter pour la récupérer et l'afficher dans le panier ?

merci par avance



signaler à un administrateur
Commentaire de corsonr le 05/04/2006 14:36:41

hello, bon alors j'ai trouvé la solution: INFO pour ceux qui veulent d'autres parametres dans le panier:

Pour ajouter le nom du produit:

-> dans panier.class.php
-------------------------------------------------------------------------------------------

modifier la fonction suivante:
// Ajoute un article dans le Panier
function ajouterArticle($numserie, $quantite, $montantHT = 0, $nom) {
if (!empty($numserie)) {
if ($this->article[$numserie]) $this->article[$numserie]['qte'] += $quantite;
else {
$this->article[$numserie]['qte'] = $quantite;
$this->nbarticle++;
}
if (isset($this->calculmontant) && $this->calculmontant == true) {
$this->article[$numserie]['prix']      = $montantHT;
$this->CalculMontantArticle($numserie, $this->article[$numserie]['prix'], $quantite);
$this->CalculTotal($this->article[$numserie]['montantHT']);
}
}
$this->article[$numserie]['nom'] = $nom; // CODE A RAJOUTER
}

et créer la fonction d'appel du nom:
// Renvoie le nom de l'article $numserie
function getNomArticle($numserie) {
return ($this->article[$numserie]['nom']);
}

-> dans ajout_panier.php
-------------------------------------------------------------------------------------------

rajouter dans l'affectation des variables la ligne:
$nom      = isset($_REQUEST["nom"])      ? $_REQUEST["nom"]      : "";

et rajouter la variable $nom lors de l'appel de la fonction dans le programme principal

if (!Empty($numserie) && $qte > 0) {
if ($prix > 0) {
$var->calculmontant = true;
$var->ajouterArticle($numserie, $qte, $prix, $nom); // LA VARIABLE EST RAJOUTEE ICI
} else $var->ajouterArticle($numserie, $qte);

$_SESSION["panier"] = serialize($var);
}
if ($origine) {
Header("Location: $origine");
exit;
}

-> dans liste_article.php
-------------------------------------------------------------------------------------------
rajouter dans le lien d'insertion le code suivant
&nom='.$r1["nom"].'

et voila !

signaler à un administrateur
Commentaire de cacim7 le 10/04/2006 14:27:49

au secours jai ce message la lorsque je supprime tou ce que jai dans le panier:
Fatal error: Call to undefined function: ajouterarticle() in c:\program files\easyphp1-8\www\telephone\ajout_panier.php on line 45

signaler à un administrateur
Commentaire de corsonr le 13/04/2006 10:55:49

Hello, le script fonctionne tres bien en local mais sur mon hébergeur j'ai au moment de recalculer le prix global ce message d'erreur:

Parse error: parse error, unexpected T_VARIABLE in /var/www/vhosts/backup/reseler12/www.monsite.com/htdocs/cgi-bin/php-cgi on line 3646

étonnant non ? quelqu'un aurait-il eu ce pb ? je pense que cela vient soit de serialize() soit de $_REQUEST
merci de me donner un coup de main si connaissez la solution !

signaler à un administrateur
Commentaire de cacim7 le 13/04/2006 16:30:01

salu CORSONR jai une question;

comment tu fait pour récupérer le total et le mettre dans une table mysql?merci

signaler à un administrateur
Commentaire de Spheerys le 14/04/2006 13:58:48

============================
au secours jai ce message la lorsque je supprime tou ce que jai dans le panier:
Fatal error: Call to undefined function: ajouterarticle() in c:\program files\easyphp1-8\www\telephone\ajout_panier.php on line 45
============================

J'ai le même problème que toi corsonr, mais lorsque j'ajoute un article au panier... je n'arrive décidément pas à m'en dépatouiller :(

signaler à un administrateur
Commentaire de SAaD44 le 07/05/2006 03:27:29

Bonsoir et félicitation pour ce code.
Tout de fois je garde ma note en réserve car j'ai un problème (pour changer un peu ...).
Voila, je peux ajouter des articles dans le panier, je peux en supprimer, je peux en modifier la quantité, bref je peux tout faire mais... une seule fois!

C'est-à-dire que si je remplis, puis je vide le panier et enfin que je tente de le reremplir, j'obtiens une page blanche.
J'ai pu trouver où le code bloqué dans la page "ajout_article.php" grâce à des "echo".
C'est ici :
$var->calculmontant = true;
$var->ajouterArticle($numserie, $qte, $prix);


En espérant que l'on puisse me venir en aide, car ça va vraiment m'aider pour mon site si il y a un panier de dispo.

Bye

signaler à un administrateur
Commentaire de Steph666 le 09/05/2006 18:49:09

Petite modif,
pour éviter le bug lors du vidage du panier.

Stéph.

signaler à un administrateur
Commentaire de phildart2000 le 06/06/2006 01:46:05

Salut,

Merci pour ce script, mais... moi ça marche presque nickel :(

En effet, lorsque je suis dans la page liste_article.php et que je clique sur ajouter
au panier ça marche. Mais si je clique sur un autre ajouter au panier il m'affiche un message d erreur.

Mais l'article est bien rajouter au panier...


----------------Voici le messsage d'erreur----------------------


Notice: Undefined index: Reference4 in c:\program files\easyphp1-8\www\source\phpcs_source_29499\panier\panier.class.php on line 146

Notice: Undefined index: montantHT in c:\program files\easyphp1-8\www\source\phpcs_source_29499\panier\pa