2013-02-19 44 views
3

我有以下問題。合併PHP購物車中的值

我在PHP會話中存儲購物車,然後加載它以顯示購物車中的物品。

問題是,目前,我看到每個項目沒有合併,這意味着如果一個項目在購物車中添加了兩次,它將顯示兩次。

我該如何合併itemId的結果?

if(is_array($_SESSION['cart'])) 
      { 
    $max=count($_SESSION['cart']); 
    for($i=0;$i<$max;$i++) 
{ 
    $pid=$_SESSION['cart'][$i]['itemId']; 
    $q=$_SESSION['cart'][$i]['qty']; 
    if($q==0) continue; 
    $query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem"); 
    $query2-> bindValue (':idItem',$pid); 
    $query2->execute(); 
    $row2 = $query2->fetch(PDO::FETCH_ASSOC); 
        ?> 
      <div class="checkoutItems">  
      <span class='itemNameChck'><?php echo $row2['name']; ?> </a></span> 
      <span class="itemQtyChck"><?php echo $row2['price']; ?> </span> 
      <span class="itemQtyChck"><?php echo $q; ?> </span> 
      <span class="itemQtyChck"><?php $totalPerItem = $q * $row2['price']; echo $totalPerItem; ?> </span> 
      </div> 
      <?php 
      } 
      } 

這是我如何將商品加入購物車:

function addtocart($pid,$q) 
    { 

     if($pid<1 or $q<1) return; 
     if(is_array($_SESSION['cart'])) 
      { 

       $max=count($_SESSION['cart']); 
       $_SESSION['cart'][$max]['itemId']=$pid; 
       $_SESSION['cart'][$max]['qty']=$q; 
       $max=count($_SESSION['cart']); 
      } 
      else 
      { 
       $_SESSION['cart']=array(); 
       $_SESSION['cart'][0]['itemId']=$pid; 
       $_SESSION['cart'][0]['qty']=$q; 
       $max=count($_SESSION['cart']); 

      } 
     //} 
    } 

感謝

+1

當將項目添加到購物車,你應該確認它是否已經存在,如果是這樣,添加的量爲上述項目,而不是添加項目。 – legrandviking 2013-02-19 21:38:13

+0

另一種選擇可能是通過itemId而不是索引($ i)爲它們編制索引。這樣,重複是不可能的。 – adomnom 2013-02-19 21:42:01

+0

@legrandviking - 剛剛添加了添加項目的功能。我確實檢查數組是否存在... – samyb8 2013-02-19 21:43:55

回答

4

在我看來 - 你必須擺脫包含購物車項目索引ID的。

//    I mean this 
//     || 
//     || 
//    \/
//     \/ 
$_SESSION['cart'][$max]['qty']=$q; 

只要把itemId那裏,你添加項目之前 - 檢查數組的該元素設置。

您編寫了這段代碼,它每次都向數組添加新元素,現在您要整合。對我來說沒有意義。只有在必要時才添加新元素。否則,只需更新數量。

在我看來你的車應該是這樣的:

$_SESSION['cart'][$itemid]['qty']=$q; 

// example how to store other attributes 
$_SESSION['cart'][$itemid]['name']="Rubber duck"; 
$_SESSION['cart'][$itemid]['color']="Yellow"; 
$_SESSION['cart'][$itemid]['size']="XXL"; 
$_SESSION['cart'][$itemid]['price']="1000"; 

然後,加入項目時,你可以檢查是否與itemid的購物車項目包含任何元素。

if isarray($_SESSION['cart'][$itemid]) // when exists - add to previous quantity 
    $_SESSION['cart'][$itemid]['qty']= $_SESSION['cart'][$itemid]['qty'] + $q; 
else         // else - set quantity 
    $_SESSION['cart'][$itemid]['qty'] = $q; 

這只是一個草案/想法,但我希望它能幫助你。

+0

這會很好地工作 – legrandviking 2013-02-19 22:09:07

0

像這樣的東西應該做的伎倆

function addtocart($pid,$q) 
{ 
if($pid<1 or $q<1) return; 

for($i=0;$i> count($_SESSION['cart']);$i++) 
{ 
    if($_SESSION['cart'][$i]["item_id"] == $pid) 
    { 
     $_SESSION['cart'][$i]['qty'] += $q 
     return; 
    } 
} 


if(is_array($_SESSION['cart'])) 
{ 

    $max=count($_SESSION['cart']); 
    $_SESSION['cart'][$max]['itemId']=$pid; 
    $_SESSION['cart'][$max]['qty']=$q; 
    $max=count($_SESSION['cart']); 
} 
else 
{ 
    $_SESSION['cart']=array(); 
    $_SESSION['cart'][0]['itemId']=$pid; 
    $_SESSION['cart'][0]['qty']=$q; 
    $max=count($_SESSION['cart']); 

} 

}