2013-03-16 4 views
0

항목이 장바구니에 추가되면 항목 ID와 해당 항목의 수량이 표시됩니다. 이 경우 수량 만 세션에서 파싱됩니다. 항목 ID가 표시되지 않습니다. 또한 다른 항목이 추가되면 카트에는 별도의 수량으로 두 번째 항목이 표시되어야합니다.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 />"; 
     } 
    } 
} 
?> 

제안 사항? 감사합니다.

답변

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에 대한 짧은 손으로 일을의 일반적인 방법입니다 .

제품 ID를 장바구니 배열의 키로 사용하면이 작업을 훨씬 간단하게 만들 수 있습니다. 그런 식으로 열쇠가 존재하면 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); 
}