-2

ショッピングカートに複数の商品を追加すると、最初に挿入された商品データが重複します。showCart() の準備ステートメントも「何か問題があります」をエコーし​​ますが、データがまだ表示されている間、私のコードはかなり厄介に見えると思います。その言い訳は、私はそれが機能するようになったら、私はそれをきれいにするつもりです

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

まず、これは 2 つの別個のバグであり、他に何かが起こっていない限り、最初のスクリプトがどちらとも関係がないとは言えません。

バグ 1:"something went wrong"呼び出し中にスクリプトがエコーto showCart()する場合は、データベース接続とステートメントの準備をデバッグする必要があります。これらの列名または行名の一部が間違っていない限り、エラーは接続にある可能性が高くなります。DB エラー情報をエコーし​​て、何が起こっているかを確認してください。

バグ 2: カートを表示するときに商品データが重複する:

これを適切にデバッグするには、最初に製品をカートに追加する方法を確認する必要がありますが、そうすると、次の行に悪影響を与える可能性があります。

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

編集

実際には、2 番目のバグの原因はおそらくその行ではなく、DB 呼び出しが失敗した場合でも製品情報をエコーすることが原因である可能性があります。

于 2013-02-12T16:56:59.843 に答える