-2

当我将多个产品添加到购物车时,它会复制第一次插入的产品数据。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);
    }
4

1 回答 1

0

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

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

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

为了正确调试这一点,我们首先需要了解您如何将产品添加到购物车,但很可能您这样做会与此行产生负面交互:

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

编辑

实际上,它可能不是导致第二个错误的那条线,它可能是即使数据库调用失败,您也会回显产品信息的事实。

于 2013-02-12T16:56:59.843 回答