2013-02-12 125 views
-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); 
    } 
+1

這將需要逐步調試。究竟發生了什麼問題? – 2013-02-12 14:21:08

+0

出於好奇,你爲什麼要將所有的輸出添加到數組中,而只是將它「內爆」爲一個字符串?這比簡單地連接輸出效率要低得多。基本上,用'$ output。='替換'$ output [] ='並刪除'implode' – 2013-02-12 14:21:13

+0

感謝您的建議:) – user2065001 2013-02-12 14:30:08

回答

0

首先,這是兩個不同的錯誤,而且除非有別的事情上你沒有告訴我們第一個劇本與兩者無關。

錯誤1:如果您的腳本在呼叫to showCart()期間迴響"something went wrong"那麼您應該調試數據庫連接並準備好語句。除非某些列名稱或行名稱錯誤,否則錯誤很可能在您的連接中。嘗試回顯數據庫錯誤信息以查看發生了什麼。顯示購物車當複製產品數據:

錯誤2

要正確調試這一點,我們就需要看你如何在第一時間將產品添加到購物車,但很可能不過你這樣做與互動此行負:

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

編輯

其實這可能不是該行造成第二個錯誤,它可能是你呼應即使DB調用失敗產品信息的事實。

相關問題