0

下午,

我的网上商店购物车有些困难。在我的 cartArr (具有从我的数据库中获取的产品 ID 的数组)中,有我购买的产品的正确 ID。我的 productspage 上还有一个购物车,其中计算了我的 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 中。

谢谢!

4

1 回答 1

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 的数据:(
我不确定 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}


编辑:
另一种解决方案,用每个“产品”的数据构造另一个数组,并将其传递给您。

在“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}
于 2012-05-18T13:08:53.800 回答