产品在shoppingcart中重复

时间:2013-02-12 14:19:58

标签: php mysqli shopping-cart

当我将多个产品添加到购物车时,它会复制首次插入的产品数据。 showCart()中的prepare语句也回显'有些错误',而数据仍然显示,我想我的代码看起来很讨厌。借口,当我开始运作时,我打算清理它

public function displayProduct()
            {
                if($product = $this->db->query("SELECT id, title, description, price FROM trips ORDER BY id"))
                {

                        while ($row = $product->fetch_assoc())
                                {
                            $output[] = '<div class="reisbox">';
                                    $output[] = '<div id="reis_insidebox1">';
                            $output[] = '<div class="reis_textbox">';
                                $output[] = '<h2>'.ucfirst($row['title']).'</h2>';
                                            $output[] = '<article>';
                                                $output[] = ucfirst($row['description']);
                                            $output[] = '</article>';
                                    $output[] = '</div>';

                                    $output[] = '<div class="rightboxx">';
                                $output[] = '<div class="reis_price_box">';
                                            $output[] = '<div class="reis_price_box_text">';
                                                $output[] = '&euro;'.$row['price'];
                                        $output[] = '</div>';

                                        $output[] = '<div class="more_box">';
                                            $output[] = '<a href="index.php?page=reis"><p>Lees meer..</p></a>';
                                        $output[] = '</div>';
                                    $output[] = '</div>';
                                    $output[] = '</div>';
                                    $output[]='<br />';
                                    $output[] = '<div id="add">';
                                        $output[]='<a href="index.php?page=cart.php&action=add&id='.$row['id'].'">Add to cart</a>';
                                    $output[] = '</div>';
                                        $output[] = '<div class="review_box">';
                                    $output[] = '<div class="review_text">Review</div>';

                                    $output[] = '<div class="review_textbox"> Fantastische ontvangst met kleine attenties. Fantastisch ontbijt,. Goede bedden en ruime zitgelegenheid in de serre.</div>';

                                    $output[] = '<div class="star_box"></div>';

                                    $output[] = '<div class="review_linkbox">';
                                        $output[] = '<a href="review1.php">Schrijf review</a>';
                                    $output[] = '</div>';
                                $output[] = '</div>';
                                $output[] = '</div>';


                    }
                    echo implode($output);
                }

public function showCart() {
        $cart = $_SESSION['cart'];
        if ($cart) {
            $items = explode(',',$cart);
            $contents = array();
            foreach ($items as $item) {
                $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
            }
            $output[]='<div id="contents">';
            $output[] = '<form action="index.php?page=cart.php&action=update" method="post" id="cart">';
            $output[]='<table id="table_cart">';
            $output[]='<thead>';
            $output[]='<tr>';
            $output[]='<th scope="col"></th>';
            $output[]='<th scope="col">Informatie</th>';
            $output[]='<th scope="col">Prijs</th>';
            $output[]='<th scope="col">Aantal</th>';
            $output[]='<th scope="col">Prijs Totaal</th>';
            $output[]='</tr>';
            $output[]='</thead>';
            foreach ($contents as $id=>$qty)
            {
                $sql = 'SELECT id, title, description, price FROM trips WHERE id = ?';
                if($result = $this->db->prepare($sql))
                {
                    $result->bind_param('i', $id);
                    $result->execute();
                    $result->bind_result($id, $title, $description, $price);
                    $result->fetch();
                }
                else
                {
                    echo "something went wrong";
                }
                $output[]='<tr>';
                $output[]='<td><a href="index.php?page=cart.php&action=delete&id='.$id.'" class="r"><p>Remove</p></a></td>';
                $output[]='<td>'.$title.'</td>';
                $output[]='<td>&euro;'.$price.'</td>';
                $output[]='<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
                $output[]='<td>&euro;'.($price * $qty).'</td>';
                $total += $price * $qty;
                $output[]='</tr>';


            }
            $output[] = '<div id="total">';
            $output[] = '<p>Grand total: <strong>&euro;'.$total.'</strong></p>';
            $output[] = '<button type="submit">Update cart</button>';
            $output[] = '</div">';
            $output[] = '</table>';
            $output[]='</form>';
            $output[] = '</div">';
        } else {
            $output[] = '<p>You shopping cart is empty.</p>';
            $output[] = '<p><a href="index.php?page=reizen.php">terug naar reizen</a></p>';
        }
        return implode('',$output);
    }

1 个答案:

答案 0 :(得分:0)

首先,这是两个独立的错误,除非有其他事情发生,否则你不会告诉我们第一个脚本与之相关。

错误1:如果您的脚本在调用"something went wrong"期间回显to showCart(),那么您应该调试数据库连接并准备好您的语句。除非其中一些列名或行名错误,否则错误很可能出现在您的连接中。尝试回显数据库错误信息,看看发生了什么。

错误2:显示购物车时重复的产品数据:

要正确调试这个,我们首先需要看看你如何将产品添加到购物车,但是你这样做可能是负面地与这条线互动:

foreach ($items as $item) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
        }

修改

实际上可能不是导致第二个错误的那一行,即使数据库调用失败,也可能是你回应产品信息的事实。