2012-05-18 25 views
0

下午,購物車給出相同的產品PHP

我有一個網上商店購物車一些困難。在我的cartArr(從我的數據庫中獲得產品ID的數組)中,我購買了我的產品的正確ID。我的產品頁面上也有一個購物車,這個購物車具有計數我的cartArr中的正確數量的物品(迄今爲止非常好)。

當我想展示我的產品時,他只顯示我點擊過的最後一個產品*次我買了東西。邏輯,因爲他不記得我的會議陣列。

我知道我的問題是什麼,但我無法弄清楚如何解決它。

/*Shoppingcart.php*/ 
<?php 

$id = ''; 

    if(isset($_POST['shoppingCart']['btnSubmit'])) 
     { 
      $id = $_POST['shoppingCart']['id']; 

      $productDAO = new ProductDAO(); 
      $result = $productDAO->getProductById($id); 

       if(in_array($id,$_SESSION['cartArr'])) 
      { 
       array_push($_SESSION['cartArr'], $id); 

      echo '<pre>'; 
      print_r('Hallo'); 
      echo '</pre>'; 

      } 
     } 

$smarty -> assign('arrProducts',$result); 
$smarty -> assign('id',$id); 
$smarty -> assign('cartArr',$_SESSION['cartArr']); 
$smarty -> assign('product',$result) 

/*Shoppingcart.tpl*/ 
{foreach $cartArr as $item} 
    <div class="winkelkarItem"> 
     <img src="{$arrProducts.image}" class="winkelkarImgPosition" 
      alt="chimay" title="chimay"/> 

     <ul class="winkelkarBeschrijving"> 
      <li>{$arrProducts.naam}</li> 
      <li>{$arrProducts.prijs}&euro;</li> 
      <li><input class="winkelkarAmmount" type="text" value="2"/></li> 
      <li>7.08&euro;</li> 
     </ul> 
    </div> 
{/foreach} 

/*SQL statement to get my products out of my database in a seperate file ProductDAO*/ 

public function getProductById($id) 
    { 
     try 
     { 
      $sql = 'SELECT * 
        FROM tblProduct 
        WHERE id = :id'; 
      $stmt = $this->dbh->prepare($sql); 
      $stmt->bindValue(':id',$id); 
      $stmt->execute(); 
      $result = $stmt->fetch(); 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 

     return $result; 
    } 
?> 

Thx提前爲所有人提供幫助。

簡稱: Arrproducts已經進入我的會議 海槽的foreach我需要讓我的項目@ shoppingcart.tpl 我點擊了產品的ID在cartArr。

Thx!

回答

0

在第一時間,

if(in_array($id,$_SESSION['cartArr'])) { 
    array_push($_SESSION['cartArr'], $id); 
} 

如果$id$_SESSION['cartArr'],你爲什麼推別的時間?



在第二時間,在「購物車」你的最後插入的產品$result(陣列取出的)和你的「購物車」,是在存儲於會話ID的數組。
因此,在您的模板Shoppingcart.tpl中,當您循環使用$cartArr時,$item是您的「產品」的ID,而不是包含您的「產品」數據的變量。然後,在您的foreach循環中,您將$arrProducts.attribute,但$arrProducts對應於您的最後一個項目。

所以,你必須得到循環通過每個ID的數據:
(我不知道Smarty模板語法,而是試着去理解我的意思)

  {$productDAO = new ProductDAO();} 
      {foreach $cartArr as $item_id} 
       {$item = $productDAO->getProductById($item_id);} 
       <div class="winkelkarItem"> 
        <img src="{$item.image}" class="winkelkarImgPosition" alt="chimay" title="chimay"/> 

        <ul class="winkelkarBeschrijving"> 
         <li>{$item.naam}</li> 
         <li>{$item.prijs}&euro;</li> 
         <li><input class="winkelkarAmmount" type="text" value="2"/></li> 
         <li>7.08&euro;</li> 
        </ul> 
       </div> 

      {/foreach} 


編輯:
另一種解決方案,構造另一個數組,每個「產品」的數據,並將它傳遞給你tpl。

在 「Shoppingcart.php」:

$productDAO = new ProductDAO(); 
$items_datas = array(); 
foreach($_SESSION['cartArr'] as $item_id) { 
    $items_datas[] = $productDAO->getProductById($item_id); 
} 
$smarty->assign("items_datas",$items_datas); 

在你 「Shoppingcart.tpl」:

  {foreach $items_datas as $item} 

       <div class="winkelkarItem"> 
        <img src="{$item.image}" class="winkelkarImgPosition" alt="chimay" title="chimay"/> 

        <ul class="winkelkarBeschrijving"> 
         <li>{$item.naam}</li> 
         <li>{$item.prijs}&euro;</li> 
         <li><input class="winkelkarAmmount" type="text" value="2"/></li> 
         <li>7.08&euro;</li> 
        </ul> 
       </div> 

      {/foreach} 
+0

首播時間:它必須是如果(!in_array ...)當然。這是這樣的,但我想看看我的$ _session ['cartArr']是什麼,所以我刪除了「!」忘了把它放回去.. –

+0

我明白你的意思是順便說一句,但我以前都做過。我知道我需要進入我的tpl文件,但我只是沒有做到這一點(不知道方式,以上解決方案無法正常工作。) –

+0

@WarreBuysse好的,我編輯了我的文章 – jbrtrnd