Shoppingcart提供相同的产品PHP

时间:2012-05-18 12:49:15

标签: php shopping-cart webshop

下午,

我的购物车对于网上商店有些困难。在我的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;
    }
?>

提前获取所有帮助。

短: Arrproducts必须进入我的会话 通过foreach我需要制作我的物品@ shoppingcart.tpl 我点击的产品的ID在cartArr。

THX!

1 个答案:

答案 0 :(得分:0)

第一次,

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

如果$id位于$_SESSION['cartArr'],为什么要再推一次?



第二次,“shoppingCart”中您最后插入的项目是$result(已获取数组),而您的“shoppingCart”位于会话中存储的ID数组中。 因此,在您的模板Shoppingcart.tpl中,当您循环$cartArr时,$item是您的“产品”的ID,而不是包含“产品”数据的变量。然后,在foreach循环中,您放置$arrProducts.attribute,但$arrProducts对应于您的上一个项目。

所以你必须得到循环中传递的每个id的数据:
(我不确定聪明的模板语法,但试着理解我的意思)

            {$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}