CLASS PANIER CADDIE

Messages postés
370
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
13 avril 2007
- - Dernière réponse :  stephane - 10 mai 2019 à 22:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/source/29499-class-panier-caddie

Afficher la suite 
tgwada
Messages postés
1
Date d'inscription
jeudi 8 octobre 2009
Statut
Membre
Dernière intervention
2 avril 2010
-
Bonjour, désolé de faire ressortir ce vieux forum mais j'ai un problême en ce qui concerne les frais de port.

il reste a 0 alors que j'ai effectuer toutes les modifs de merci51

est ce que qqlun peut m'aider?

merci d'anvance
cs_JessicaRabbit
Messages postés
1
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
27 octobre 2010
-
Bonjour!
Je déterre ce sujet en espérant que l'on pourra me répondre.
Devant réaliser un panier d'achat pour un site internet, j'ai repris le code donné ici, en y apportant des modifications. D'ailleurs, merci pour ce code qui m'a beaucoup aidé étant donné que je n'avais aucune notion de la poo (je débute seulement en php).

Le site de vente sur lequel je travaille (je suis en stage) propose différentes catégories de prix, selon les articles, et selon la quantité demandée (tarifs dégressifs).
De la page liste_articles, on va sur une page de description de l'article, sur laquelle on peut choisir la quantité. Le prix unitaire varie alors. C'est à ce stade là, lorsque l'on clique sur "ajouter au panier" que les données sont envoyées dans "ajout_panier.php" puis dans panier.class, pour être affichée ensuite dans "consultation.php".
Arrivé dans consultation.php, l'affichage est ok et les modifications de prix unitaires se font bien, mais j'ai deux problèmes.
Déjà, le message "Notice: Undefined index: prixUni in C:\wamp\www\Panier\panier.class.php on line 143" s'affiche (puis disparait si l'on clique sur "actualiser" dans la page) et ensuite, aucune modification n'est faite au niveau du prix total HT et TTC du panier. J'aimerai obtenir un peu d'aide, ça fait un moment que je bloque là-dessus et je ne trouve pas de réponses.

Voilà mon code:
*****************************************************************
"ajout_panier.php"
*****************************************************************
<?php

/** Fichier : ajout_panier.php
Fonction : formulaire d'ajout d'article au panier **/

/** includes **/
include_once 'panier.class.php';

/** session **/
session_start();

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

//affectations variables
$nom = isset($_REQUEST["nom"]) ? $_REQUEST["nom"] : "";
$qte = isset($_REQUEST["qte"]) ? $_REQUEST["qte"] : 0;
$origine = isset($_REQUEST["origine"]) ? $_REQUEST["origine"] : "";
$prix = isset($_REQUEST["prix"]) ? $_REQUEST["prix"] : 0;
$cat_prix = isset($_REQUEST["cat_prix"]) ? $_REQUEST["cat_prix"] : "";

//programme principal
if (!Empty($nom) && $qte > 0)
{
if ($prix > 0)
{
$var->calculmontant = true;
$var->ajouterArticle($nom, $prix, $qte, $cat_prix);
}
else
{
//normalement quand cette fonction est appelée
//le prix unitaire de l'article est sauvegardé.
$var->ajouterArticle($nom, $prix, $qte, $cat_prix);
}
$_SESSION["panier"] = serialize($var);
}
if ($origine)
{
Header("Location: $origine");
exit;
}
?>

************************************************************
panier.class.php
************************************************************
<?php

/** Fichier : panier.class.php
Fonction : classe de gestion de panier **/

class Panier
{
var $article; // Tableau des articles du Panier
var $nbarticle; // Nombre d'articles dans le Panier
var $totalHT; // Montant total HT du Panier
var $totalTTC; // Montant total TTC du Panier
var $TVA; // Montant TVA
var $calculmontant; // Active le calcul du montant ou non

/** Constructeur initialise le tableau d'articles et le montant total du Panier **/function Panier($actif false, $tva 19.6)
{
$this->article = array();
$this->nbarticle = 0;
$this->totalHT = 0;
$this->totalTTC = 0;
$this->TVA = $tva;
$this->calculmontant = $actif;
}

/** Destructeur**/
function destroy()
{
unset ($this->article);
unset ($this->nbarticle);
unset ($this->totalHT);
unset ($this->totalTTC);
unset ($this->TVA);
unset ($this->calculmontant);
}

/**FONCTION APPELEE DS DESCRIPTION_ARTICLE **/

/** Envoie dans le panier la quantité pour chaque article lorsque l'on clique sur "Ajouter au Panier"**/
function getNombreArticle()
{
return ($this->nbarticle);
}

/**FONCTIONS APPELEES DANS CONSULTATION_PANIER**/

/** Affiche le prix à l'unité de chaque article dans le panier (sans catégorie prix)**/
function getPrixArticle($nomArticle)
{
if (isset($this->article[$nomArticle]['prix']))
return ($this->article[$nomArticle]['prix']);
else return 0;
}

/** Affiche dans le panier la quantité pour chaque article **/
function getQteArticle($nomArticle)
{
if (isset($this->article[$nomArticle]['qte']))
return ($this->article[$nomArticle]['qte']);
else return 0;
}

/** Affiche dans le panier le montant de la TVA (19,6%)**/
function getTVA()
{
return (sprintf("%.2f", $this->TVA));
}

/** Renvoie le montant de l'article $nomArticle**/
function getMontantArticle($nomArticle)
{
if (isset($this->calculmontant) && $this->calculmontant == true)
return (sprintf("%.2f", $this->article[$nomArticle]['montantTTC']));
else return 0;
}

/** Renvoie le total final HT **/
function getTotalFinalHT()
{
if (isset($this->calculmontant) && $this->calculmontant == true)
return (sprintf("%.2f", ($this->totalHT)));
else return 0;
}

/** Renvoie le total final de la TVA **/
function getTotalFinalTVA()
{
if (isset($this->calculmontant) && $this->calculmontant == true)
return (sprintf("%.2f", (($this->totalHT) * ($this->TVA / 100))));
else return 0;
}

/** Renvoie le total final TTC: le montant final du panier, tva incluse**/
function getTotalFinalTTC()
{
if (isset($this->calculmontant) && $this->calculmontant == true)
return (sprintf("%.2f", ($this->totalTTC)));
else return 0;
}

/** Supprime un article du Panier **/
function supprimerArticle($nomArticle)
{
if (!empty($nomArticle) && $this->article[$nomArticle])
{
if (isset($this->calculmontant) && $this->calculmontant == true)
$this->CalculTotal(- $this->article[$nomArticle]['montantTTC']);
unset($this->article[$nomArticle]);
$this->nbarticle--;
}
}

/** Met à jour la quantité d'un article sélectionné dans le Panier
function setQteArticle($nomArticle, $quantite)
{
if (!empty($nomArticle) && $this->article[$nomArticle])
{
if ($quantite <=0) // si qte nulle ou négative
{
$this->supprimerArticle($nomArticle);
}
else
{
//place la nouvelle qte dans l'article.
$this->article[$nomArticle]['qte'] = $quantite;
}
}
}

/** Récupère le prix unitaire de l'article en fonction de sa quantité courante
function getPrixUniArticle($nomArticle)
{
return $this->article[$nomArticle]['prixUni'];
}

/** définit le prix unitaire de l'article en fonction de la qte et de cat_prix
function setPrixUniArticle($nomArticle,$newQte)
{
if (isset($this->article[$nomArticle]['prix']))
{
/**ouverture d'une connexion**/
include("connexion.php");
$cat_prix = $this->article[$nomArticle]['cat_prix'];
$resultats=$bdd->query("SELECT PRIX_NIVEAU1, PRIX_NIVEAU2, PRIX_NIVEAU3, BORNE_INF1, BORNE_SUP1, BORNE_INF2, BORNE_SUP2, BORNE_INF3 FROM categorie_prix WHERE categorie_prix.CAT_PRIX LIKE '$cat_prix'");
$resultats->setFetchMode(PDO::FETCH_OBJ);

//on détermine le prix unitaire en fonction de la qte.
while($donnees = $resultats->fetch())
{
if($newQte >= $donnees->BORNE_INF1 && $newQte <= $donnees->BORNE_SUP1)
{
$prixU = $donnees->PRIX_NIVEAU1;
}
else if($newQte >= $donnees->BORNE_INF2 && $newQte <= $donnees->BORNE_SUP2)
{
$prixU = $donnees->PRIX_NIVEAU2;
}
else if($newQte >= $donnees->BORNE_INF3)
{
$prixU = $donnees->PRIX_NIVEAU3;
}
}
$resultats->closeCursor();

//mise à jour du prix unitaire.
$this->article[$nomArticle]['prixUni'] = $prixU;
}
}

/**Met à jour le prix d'un article sélectionné dans le Panier selon la qte
/**@param $nomArticle : l'article en question.
/**@param $newQte : la nouvelle quantitée.
function setPrixTotArticle($nomArticle,$newQte)
{
//mise à jour de la qte :
$this->setQteArticle($nomArticle, $newQte);

//mise à jour du prix unitaire :
$this->setPrixUniArticle($nomArticle,$newQte);

$prixU = $this->article[$nomArticle]['prixUni'];

//mise à jour du prix total de l'article :
$this->CalculMontantArticle($nomArticle, $prixU, $newQte);
}

/**FONCTIONS APPELEES DANS AJOUT_PANIER **/

/** Ajoute un article dans le Panier**/
function ajouterArticle($nomArticle, $prix =0, $quantite, $cat_prix)
{
if (!empty($nomArticle))
{
if (isset($this->article[$nomArticle]))
$this->article[$nomArticle]['qte'] += $quantite;
else
{
$this->article[$nomArticle]['qte'] = $quantite;
$this->nbarticle++;
}

//nouvelle qte :
$newQte = $this->article[$nomArticle]['qte'];

//mise à jour du prix unitaire :
$this->setPrixUniArticle($nomArticle,$newQte);

//mise à jour du prix total de l'article.
$this->setPrixTotArticle($nomArticle,$newQte);

if (isset($this->calculmontant) && $this->calculmontant == true)
{
$this->article[$nomArticle]['prix'] = $prix;
$this->CalculMontantArticle($nomArticle, $this->article[$nomArticle]['prix'], $quantite);
$this->CalculTotal($this->article[$nomArticle]['prix']*$quantite);
$this->CalculMontantArticle($nomArticle, $prix, $qte);
}
}
$this->article[$nomArticle]['cat_prix'] = $cat_prix;

//mise à jour du prix total de l'article :
$this->CalculMontantArticle($nomArticle, $prixU, $newQte);

}

/**Affiche Catégorie Prix**/
function getcat_prix($nomArticle)
{
return ($this->article[$nomArticle]['cat_prix']);
}

/** Calcule le montant Total HT et TTC du panier**/
function CalculTotal($prix)
{
$this->totalTTC += $prix;
$this->totalHT += $prix / (1 + ($this->TVA / 100));
}

/** Calcule le montant Total HT et TTC par article**/
function CalculMontantArticle($nomArticle, $prix, $qte)
{
$this->article[$nomArticle]['montantTTC'] = $prix * $qte;
$this->article[$nomArticle]['montantHT'] = $prix * $qte / (1 + ($this->TVA / 100));
}
}
?>
*********************************************************
consultation_article.php
*********************************************************
<?php

/** Fichier : consultation_panier.php
Fonction : formulaire de consultation du panier**/

/** includes **/
include_once 'panier.class.php';

/** session **/
session_start();

/** déclarations variables **/
$contenu = "";
$page = null;

/** affectations variables **/
$page->maj = isset($_POST["maj_x"]) ? $_POST["maj_x"] : "";$page->base ((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] "on") ? "https" : "http")."://".$_SERVER["HTTP_HOST"];
$page->dirname = dirname($_SERVER["SCRIPT_NAME"]);
$page->query = isset($_SERVER["QUERY_STRING"]) ? "?".$_SERVER["QUERY_STRING"]."" : "";$page->protocol (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] "on") ? "https" : "http";
$page->action = $page->protocol."://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"].$page->query;
$page->panier = isset($_SESSION['panier']) ? unserialize($_SESSION['panier']) : "";

/** programme principal **/
print '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Consultation Panier</title>
</head>

<form name="form1" method="post" action="'.$page->action.'" enctype="application/x-www-form-urlencoded">';
if ($page->maj) maj($page);
$contenu .= Affichages($page);
print $contenu.'
</form>

</html>';

$_SESSION["panier"] = serialize($page->panier);

/** affichage principal **/
function Affichages(&$page)
{
if ($page->panier == "" || (is_object($page->panier) && $page->panier->getNombreArticle() <= 0))
return '
<center>Votre panier est vide
</center>';

$out = '

<center>

<fieldset>
Votre Panier

Articles |
cat Prix |
Prix Unitaire (TTC) |
Quantité |
Prix Total par article (TTC) |
Supprimer |
';

foreach ($page->panier->article as $nomArticle => $val)
{
print_r($val);
$out .= '

----

'.$nomArticle.',
panier->getcat_prix($nomArticle).'"/>,
'.$page->panier->getPrixUniArticle($nomArticle).' €,
<table cellpadding="0" cellspacing="2" border="0">
----, panier->getQteArticle($nomArticle).'\" size=\"4\" /></td>

</td>

<td align="center" class="intitule">'.$page->panier->getMontantArticle($nomArticle).' €</td>
<td align="center" class="intitule"></td>
</tr>';
}

$out .= '

<tr>
<td colspan="6">
<hr width="50%" /></td>
</tr>
<tr>
<td colspan="5" align="right" class="titrecell"> Total HT : </td>
<td align ="right" class= "intitule">'.$page->panier->getTotalFinalHT().' €</td>
</tr>
<tr>
<td colspan="5" align="right" class="titrecell"> TVA ('.$page->panier->getTVA().' %)
:</td>
<td align ="right" class= "intitule">'.$page->panier->getTotalFinalTVA().' €</td>
</tr>
<tr>
<td colspan="5" align="right" class="titrecell"> Total TTC : </td>
<td align ="right" class="intitule">'.$page->panier->getTotalFinalTTC().' €</td>
</tr>
<tr>
<td colspan="6" align="center"></td>
</tr>
<tr>
<td colspan="6"><hr width="50%" /></td>
</tr>
<tr>
<td colspan="2" align="center">

</td>
<td colspan="6" align="center">

</td>
</tr>
<tr>
<td colspan="6">
<hr width="50%" /></td>
</tr>
</table>
</fieldset>
</center>';
return $out;
}

function maj(&$page)
{
foreach ($_POST as $cle => $valeur)
{
if (preg_match("/suppr_(.*)/", $cle, $res))
$page->panier->supprimerArticle($res[1]);
if (preg_match("/qte_(.*)/", $cle, $res))
{
//ici on appel la nouvelle fonction qui change le prix de l'article.
$page->panier->setPrixTotArticle($res[1], $valeur);
}
}

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

Voilà pour l'essentiel, j'espère avoir été assez claire sur mon problème.
Merci d'avance.
dpk1
Messages postés
11
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
2 avril 2012
-
bonjour à tous
je suis débutant et se script et toutes ces explications sont merveilleux

spécial dédicace à Steph666 et à lelapinou_69

car j'ai lu toute la page et l'on comprend vraiment beaucoup de chose.

Il est très tard à l'heure ou je vous écrit mais j'ai tout petit souci qui me freeze les cheveux

je récupère mes donnée via une base de donnée et je voudrais affiche l'image correspondant au panier.

j'ai bien lueet re-lu le commentaire de corsonr le 05/04/2006 14:36:41 je fais un var_dump mais l'image ne s'affiche.

avez vous une idée
dpk1
Messages postés
11
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
2 avril 2012
-
re-bonjour

voici ma variable propalarticle";N;

string(485) "O:6:"Panier":9:{s:7:"article";a:1:{s:23:"1589526272_49f3364a23_o";a:5:{s:3:"qte";s:1:"1";s:4:"prix";s:5:"11.50";s:9:"montantHT";d:11.5;s:10:"montantTTC";d:13.7539999999999995594635038287378847599029541015625;s:13:"propalarticle";N;}}s:9:"nbarticle";i:1;s:7:"totalHT";d:11.5;s:8:"totalTTC";d:13.7539999999999995594635038287378847599029541015625;s:3:"TVA";d:19.60000000000000142108547152020037174224853515625;s:13:"calculmontant";b:1;s:4:"port";i:0;s:8:"typeport";i:0;s:7:"portTVA";i:0;}"
slt, svp j'ai besoin d' aide. je suis vraiment nul, bon un peut.
voilà déjà deux jour que j'essaie d'afficher la liste de mes produits dans ma table products et je n'arrive pas vraiment à un bon résultat,

elle m'affiche juste un produit et le dernier de ma table products
svp comment afficher tout les produits de ma table products

dans : $out='

la page *liste_article*

<?php

include_once 'panier.class.php';
//include_once 'connect.php';
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('ecomm', $base) ;

session **

session_start();


/*************************************************************************************************
    • déclarations variables **
                                                                                                                                                                                                  • /

$contenu = "";
$page = null;


/*************************************************************************************************
    • affectations variables **
                                                                                                                                                                                                  • /

$page->base = ((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http")."://".$_SERVER["HTTP_HOST"];
$page->dirname = dirname($_SERVER["SCRIPT_NAME"]);
$page->basename = basename($_SERVER["SCRIPT_NAME"]);
$page->origine = $page->base.$page->dirname."/".$page->basename.(isset($_SERVER["QUERY_STRING"]) ? "?".$_SERVER["QUERY_STRING"] : "");
$page->query = isset($_SERVER["QUERY_STRING"]) ? "?".$_SERVER["QUERY_STRING"]."" : "";
$page->protocol = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http";
$page->action = $page->protocol."://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"].$page->query;

//avec ISSET
//Si la variable $_POST['truc'] existe, alors $truc = $_POST['truc'] sinon elle vaut NULL
$truc = isset($_POST['truc']) ? $_POST['truc'] : NULL;

//ou avec !EMPTY()
//Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc'] sinon elle vaut NULL
$truc = !empty($_POST['truc']) ? $_POST['truc'] : NULL;
/*************************************************************************************************
    • programme principal **
                                                                                                                                                                                                  • /

print '
<html>
<head>
<title>Liste Article</title>
</head>
<body>

<form name="form1" method="post" action="'.$page->action.'" enctype="application/x-www-form-urlencoded">';
$contenu .= Affichages($page, $html);


print $contenu.'


</form>
</body>
</html>';




/*************************************************************************************************
    • fonctions **
                                                                                                                                                                                                  • /

// affichage principal
function Affichages(&$page, &$html) {

$sql ='SELECT * FROM products';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while($data = mysql_fetch_array($req)){

$out = '

<table border="0" cellspacing="0" cellpadding="0" width="80%" align="center">
<tr>
<td align="left"><b>Désignation</b></td>
<td align="left"><b>Référence</b></td>
<td align="right"><b>P.U. (HT)</b></td>
<td align="right"><b>P.U. (TTC)</b></td>
<td align="middle"><b>Panier</b></td>
</tr>
<tr>
<td align="left"><img src="imgs/'.$data['img'].'.png"width="50" height="50"/></td>
<td align="left">'.$data['name'].'</td>
<td align="right">'.$data['description'].'</td>
<td align="right">'.$data['price'].'€</td>
<td align="right">181.79 €</td>
<select name="couleur_p_1"><option value="noir">black</option> </select>


<td align="middle"><input type="text" name="qte_1" value="1" size="4" />
 <a href="#" onclick="document.location.href=\'ajout_panier.php?numserie='.$data['id'].'&couleur=\'+document.form1.couleur_p_1.options[document.form1.couleur_p_1.selectedIndex].value+\'&qte=\'+document.form1.qte_1.value+\'&prix='.$data['price'].'&name='.$data['name'].'&origine=liste_article.php?\'">Ajout Panier</a>
</td>
</tr>
</table>';

}
if (isset($_SESSION['panier'])) {
$page->panier = unserialize($_SESSION['panier']);

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

return $out;
}
?>
Commenter la réponse de fg85

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.