2013-03-16 5 views
0

Когда элемент добавлен в корзину, предполагается, что будет отображаться идентификатор элемента и количество этого элемента. В этом случае из сеанса анализируется только количество. Идентификатор элемента не отображается. Также, когда добавляется другой предмет, тележка должна отображать второй элемент с отдельным количеством.PHP - Корзина, проблема с сеансом

<?php 
session_start(); 


?> 
<?php 
if (isset($_POST['pid'])) { 
    $pid = $_POST['pid']; 
    $wasFound = false; 
    $i = 0; 

    if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1){ 
     $_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1)); 
    } else { 
     foreach ($_SESSION["cart_array"] as $each_item) { 
      $i++; 
      while (list($key, $value) = each($each_item)) { 
       if ($key == "item_id" && $value == $pid) { 
       array_splice($_SESSION["cart_array"], $i-1, 1,array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1))); 
       $wasFound = true; 
       } 
      } 
     } 
     if ($wasFound == false) { 
     array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1)); 
    } 
    } 
} 
?> 
<?php 
if (isset($_GET['cmd']) && $_GET['cmd'] == "emptycart") { 
    unset($_SESSION["cart_array"]); 
} 
?> 
<?php 
$cartOutput = ""; 
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) { 
    $cartOutput = "<h2 align='center'>Your shopping cart is empty</h2>"; 
} else { 
    $i = 0; 
    foreach ($_SESSION["cart_array"] as $each_item) { 
     $i++; 
     $cartOutput .= "<h2>Cart item $i</h2>"; 
     while (list($key, $value) = each ($each_item)) { 
      $cartOutput .= "key:$value<br />"; 
     } 
    } 
} 
?> 

любые предложения? Thanks

ответ

0

Вот некоторые довольно странные манипуляции массивом, которые у вас там есть. Вы должны быть в состоянии сделать все, что нужно с одной foreach цикла:

foreach ($_SESSION["cart_array"] as $item_key => $each_item) { 
     if ($each_item['item_id'] == $pid) 
     { 
      $_SESSION["cart_array"][$item_key]['quantity']++; 
     } 
     $wasFound = true; 
    } 

В случае, если это не знакомо, foreach ($foo as $key => $value) нормальный способ делать то, что вы написали, как while(list($key, $value) = each($foo)) и $foo++ это стенография для $foo = $foo + 1 ,

Вы можете сделать это еще проще, если вы используете идентификаторы продуктов в качестве ключей массива корзины покупок; таким образом, вы можете просто задать PHP, если ключ существует, например:

if (array_key_exists($pid, $_SESSION['cart_array'])) 
{ 
    $_SESSION['cart_array'][$pid]['quantity']++; 
} 
else 
{ 
    $_SESSION['cart_array'][$pid] = array('item_id' => $pid, 'quantity' => 1); 
} 
Смежные вопросы