Puisque j'aime les caddies, j'ai eu le plaisir

de retoucher ton code pour obtenir ça :
Class.Caddie.php
<?php
class Caddie
{
// propriétés privées et publiques
public $content = array();
// ajouter dans le caddie
function add($select)
{
// valider $select
if (! is_array($select)) return 2; // Données vides!
if (! isset($select["code"]) || trim($select["code"])=="") return 3; // Code manquant!
if (! isset($select["price"]) || trim($select["price"])=="" || $select["price"] <=0 ) return 4; // Prix manquant ou incorrect!
// correction automatique de la qte si absente ou <=0
if (! isset($select["qte"]) || trim($select["qte"])=="" || $select["qte"] <=0 ) $select["qte"] = 1;
// ajout : indexer le tableau content par le code du produit (clé primaire)
$code = strtolower(trim($select["code"])); // permet de garder l'unicité de la ligne panier
// ajouter le nouveau si n'existe pas déjà
if (! isset($this->content[$code])) {
// faire le dispatching des champs requis
$this->content[$code] = array("code"=>$code, "price"=>(float)$select["price"], "qte"=>(int)$select["qte"]);
return 1; // Ajout effectué
}
else return 0; // Existe déjà!
}
// retourner le contenu du caddie
function getContent()
{
return $this->content;
}
// calculer le montant d'un produit du caddie
function getPrice($code) // accès par clé primaire
{
if (isset($this->content[$code])){
return ((float)$this->content[$code]["price"]) * ((int)$this->content[$code]["qte"]);
}
else return null;
}
// retourner le nombre de produits dans le caddie
function getCount()
{
return count($this->content);
}
// supprimer un produit du caddie
function delete($code) // accès par clé primaire
{
if (isset($this->content[$code])) {
// suuprime la case indexée par $code
unset($this->content[$code]);
return 1; // Suppression effectuée.
}
else return 0; // Le produit n'existe pas!
}
// modifier les données d'un produit du caddie
function update($select) // accès par clé primaire
{
$code = $select["code"]; // le code n'est pas modifiable car c'est une clé d'accès
if (isset($this->content[$code])){
// trouver les champs à modifier
if (isset($select["price"]) && trim($select["price"])!="" && $select["price"] >0 ) $this->content[$code]["price"] = (float)$select["price"];
if (isset($select["qte"]) && trim($select["qte"])!="" && $select["qte"] >0 ) $this->content[$code]["qte"] = (int)$select["qte"];
//
return 1; // Modification effectuée.
}
else return 0; // Le produit n'existe pas!
}
// gestion des messages
function getMessage($action, $msgNumber, $msgLang="fr"){
// retourne le texte du message selon une action --> numéro du message --> langue (par défaut fr)
if (isset($this->messages[$action][$msgNumber][$msgLang])) return $this->messages[$action][$msgNumber][$msgLang];
else return $this->messages["unknown"][$msgLang];
}
// tableau des erreurs organisé par : action source de l'erreur --> code erreur --> langue --> texte de l'erreur
public $messages = array (
//-- Unknown Error --//
"unknown" => array(
"fr" => "Erreur inconnue!",
"en" => "Unknown Error!",
),
//-- action add --//
"add" => array(
"0" => array(
"fr" => "Le produit existe déjà!",
"en" => "Product Already Exists!",
),
"1" => array(
"fr" => "Ajout effectué.",
"en" => "Product Added Successfully.",
),
"2" => array(
"fr" => "Données vides!",
"en" => "No Data Given!",
),
"3" => array(
"fr" => "Code manquant!",
"en" => "Product Id Required!",
),
"4" => array(
"fr" => "Prix manquant ou incorrect!",
"en" => "Correct Price Required!",
),
),
//-- action delete --//
"delete" => array(
"0" => array(
"fr" => "Le produit n'existe pas!",
"en" => "Product Doesn't Exist!",
),
"1" => array(
"fr" => "Suppression effectuée.",
"en" => "Product Deleted Successfully.",
),
),
//-- action update --//
"update" => array(
"0" => array(
"fr" => "Le produit n'existe pas!",
"en" => "Product Doesn't Exist!",
),
"1" => array(
"fr" => "Modification effectuée.",
"en" => "Product Updated Successfully.",
),
),
);
}
?>
Main.Caddie.php
<?php
// activer la session
session_start();
// modèle de classe
require_once 'Class.Caddie.php';
// construction session
if (!isset($_SESSION['cart'])) {
// nouveau caddie
session_register("cart");
$var = new Caddie();
} else {
// caddie existant
$var = unserialize($_SESSION['cart']);
if ($var == "") $var = new Caddie();
}
// données de l'interface utilisateur
$type = isset($_REQUEST["type"]) ? $_REQUEST["type"] : "";
$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;
$lang = isset($_REQUEST["lang"]) ? $_REQUEST["lang"] : "fr";
// actions
if($type == 'add')
{
$ret = $var->add(array("code" => $numserie, "qte" => $qte, "price" => $prix));
//
echo $var->getMessage("add", $ret, $lang);
//
$_SESSION["cart"] = serialize($var);
}
elseif($type == 'delete')
{
$ret = $var->delete($numserie);
//
echo $var->getMessage("delete", $ret, $lang);
//
$_SESSION["cart"] = serialize($var);
}
elseif($type == 'update')
{
$ret = $var->update(array("code" => $numserie, "qte" => $qte, "price" => $prix));
//
echo $var->getMessage("update", $ret, $lang);
//
$_SESSION["cart"] = serialize($var);
}
elseif($type == 'display')
{
echo "<pre>"; print_r($var->getContent()); echo "</pre>";
}
// redirection vers l'origine
if ($origine) {
Header("Location: $origine");
exit;
}
?>
ps: J'ai intégré dans la classe un gestionnaire de messages multi-langues.