当我将多个产品添加到购物车时,它会复制首次插入的产品数据。 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[] = '€'.$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>€'.$price.'</td>';
$output[]='<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
$output[]='<td>€'.($price * $qty).'</td>';
$total += $price * $qty;
$output[]='</tr>';
}
$output[] = '<div id="total">';
$output[] = '<p>Grand total: <strong>€'.$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);
}
答案 0 :(得分:0)
首先,这是两个独立的错误,除非有其他事情发生,否则你不会告诉我们第一个脚本与之相关。
错误1:如果您的脚本在调用"something went wrong"
期间回显to showCart()
,那么您应该调试数据库连接并准备好您的语句。除非其中一些列名或行名错误,否则错误很可能出现在您的连接中。尝试回显数据库错误信息,看看发生了什么。
错误2:显示购物车时重复的产品数据:
要正确调试这个,我们首先需要看看你如何将产品添加到购物车,但是你这样做可能是负面地与这条线互动:
foreach ($items as $item) {
$contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
}
修改强>
实际上可能不是导致第二个错误的那一行,即使数据库调用失败,也可能是你回应产品信息的事实。