2010-06-28 6 views
2

J'ai fait un PHP POO Panier classe comme thisPHP POO Panier affichage classe

print_r($_SESSION["cart"]); 

le résultat est:

Array ([1] => 1 [3] => 2)

Comment puis-je imprimer cette session, comme un "vrai" panier? exemple:

echo "Your basket: "; 
echo "ItemID: ".$cartid." Itemnumber:".$cartnumber; 

Le ajoutant au panier partie:

if (isset($_POST['submit'])) 
{ 
$cart= new Cart(); 
$cart->add($_POST['id'],2); 
$item= $cart->getCart(); 
$_SESSION["cart"]=$cart; 
} 
+0

BTW, il semble que vous avez accepté ma réponse pendant que j'ajoutais à l'explication. Vérifiez-le pour une amélioration nécessaire à la classe. –

Répondre

0
  1. $ _SESSION est juste un tableau.
  2. Un tableau est stocké dans $ _SESSION ['cart'].
  3. Vous semblez écraser ce tableau, avec uniquement l'élément nouvellement ajouté.

À titre d'exemple, ce code:

if (isset($_POST['submit'])) 
{ 
$cart= new Cart(); 
$cart->add($_POST['id'],2); 
$item= $cart->getCart(); 
$_SESSION["cart"]=$cart; 
} 

peut être changé pour:

if (isset($_POST['submit'])) 
{ 
$_SESSION["cart"][$_POST['id']] = 2; 
} 

Maintenant, il va simplement ajouter au tableau stocké dans $ _SESSION [ 'panier' ] Remarquez qu'il n'utilise pas le chariot du tout.

Essayez:

if (isset($_POST['submit'])) 
{ 
$cart= new Cart($_SESSION["cart"]); // this should bring in the previous items 
$cart->add($_POST['id'],2); // what is this magic number '2'? Quantity? But where is it from? 
$_SESSION["cart"] = $cart->getCart(); 
} 

Edit: plus d'explications.

Le constructeur de la classe panier accepte un paramètre qui stocke en interne:

private $cart; 

function __construct($cart="") { 
    $this->cart = $cart; 
} 

En toute honnêteté, cela devrait être un peu plus intelligent:

private $cart; 

function __construct($cart = array()) { 
    if (is_array($cart)) 
    { 
     $this->cart = $cart; 
    } 
    else 
    { 
     // maybe print some error, informing the developer that he's using the cart class incorrectly 
     // or better yet, trigger a PHP warning: 
     trigger_error('Cart class constructor expects an array parameter',  E_USER_WARNING); 
    } 
} 

Cette garde de changement contre fournir quoi que ce soit, mais un tableau au constructeur. Notez qu'il peut toujours recevoir un tableau que la classe ne comprend pas, par ex. un tableau multidimensionnel. Dans ce cas, la classe de chariot ne détruira pas les données existantes dans le tableau, sauf si un identifiant d'article correspond à l'une des clés du tableau d'origine.

+0

Apparemment, certaines personnes n'aiment pas cette réponse. Ce serait bien de savoir pourquoi ils se sentent comme ça. –

0
<?php 

function printCart($cartid, $cartnumber) { 
    echo "ItemID: ".$cartid." Itemnumber:".$cartnumber; 
    echo "<br />"; 
} 

$a = array(1 => 1, 3 => 2); 

array_walk($a, 'printCart'); 

Voir array_walk.

0

La façon dont le code dans ce tutoriel est la configuration est que l'index du tableau est l'ID de l'élément et la valeur est la quantité, donc quelque chose comme ça devrait le faire:

echo 'Your basket:<br>'; 
foreach ($_SESSION['cart'] as $id => $quantity) { 
    echo 'ItemID:' . $id . ' Itemnumber: ' . $quantity . '<br>'; 
} 
+0

J'ai essayé cette solution, mais celle-ci affichait uniquement l'ID le plus récent – Dodjs

+0

C'est parce que vous écrasez les informations précédemment stockées dans $ _SESSION. Il semble que vous ne compreniez pas comment utiliser cette classe de panier.De ma lecture rapide de cette page liée, l'information stockée dans $ _SESSION est juste un tableau. La classe cart est utilisée pour gérer ce tableau. –