0

午後、

ウェブショップのショッピングカートに問題があります。私の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 にあります。

どうも!

4

1 に答える 1

0

初めて、

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

$idが にある場合$_SESSION['cartArr']、もう一度押すのはなぜですか?



2 回目では、「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}


EDIT :
別の解決策として、各「製品」のデータを含む別の配列を作成し、それを 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}
于 2012-05-18T13:08:53.800 に答える