PHP购物车不显示众多产品

时间:2012-03-06 12:12:29

标签: php mysql cart shopping

我已经制作了一个php购物车,它显示了主屏幕上的所有产品,你可以点击它们并将它们添加到你的购物篮中,然后你就会被带到购物车屏幕。这只展示了一种产品,但是你已经添加了多少种不同的产品,即使它们都有不同的标题。总价格和数量工作,其唯一的产品名称没有。这是我的代码..

<?php
session_start();
include "connect.php";
include "header.php";

function viewcart(){
if (isset($_SESSION['cart'])){ //if shopping cart is not empty
    $cart = $_SESSION['cart']; //store the cart array into a variable then display the content
    echo "<table border=\"1\"><tr><th>Product Name</th><th>Quantity</th><th>Delete</th></tr>";
    foreach ($cart as $product=>$quantity){
        $q = "SELECT ID, Name FROM Products";
        $result = mysqli_query($_SESSION['conn'],$q);
        $row = mysqli_fetch_array($result);
        $product_id = $row[0];
        echo "<tr><td>$product</td><td>$quantity</td><td><a href=\"?action=delete&product=$product_id\">-</a></td></tr>";
        mysqli_free_result($result);
    }
    echo "</table>";
    subtotal($cart); //display the subtotal
} else { //if shopping cart is empty
    echo "<p>There is no product in your shopping cart.</p>";
}


}

function addproduct($product_id, $product_qty){

$q = "SELECT ID, Name FROM Products";
$result = mysqli_query($_SESSION['conn'],$q)
 or die("Error: ".mysqli_error($_SESSION['conn']));
$row = mysqli_fetch_array($result);
$product_name = $row[1]; //get the product name from product id because it is better to display name than id in the cart
if (isset($_SESSION['cart'])){ //if shopping cart is not empty
    $cart = $_SESSION['cart'];
    if (array_key_exists($product_name, $cart)){ //if the product exists, update quantity
        $cart[$product_name] += $product_qty;
    } 
    else { //otherwise, add new product-quantity pair to the array
        $cart[$product_name]=$product_qty;
    }
$_SESSION['cart'] = $cart; //write the updated array back to session variable
}
else { //if shopping cart is empty
    $cart = array($product_name=>$product_qty); //add product and quantity to the shopping cart
    $_SESSION['cart'] = $cart; //write the updated array back
}
mysqli_free_result($result);
}

function deleteproduct($product_id, $product_qty){

$q = "SELECT Name FROM Products";
$result = mysqli_query($_SESSION['conn'],$q);
$row = mysqli_fetch_array($result);
$product_name = $row['Name'];
if (isset($_SESSION['cart'])){ //if shopping cart is not empty
    $cart = $_SESSION['cart'];
    if (array_key_exists($product_name, $cart)){ //if the product exists, update quantity
        $cart[$product_name] -= $product_qty;
        if ($cart[$product_name] == 0){ //if the quantity is 0, delete the key
            unset($cart[$product_name]);
        }
    }
    else { //exception
        echo "<p>Error!</p>";
    }
    $_SESSION['cart'] = $cart; //write the updated array back to session variable
} else {
    echo "<p>Error!</p>";
}
mysqli_free_result($result);
}

function emptycart(){

if (isset($_SESSION['cart'])){ //if shopping cart is not empty
    unset($_SESSION['cart']);
}
else {
    echo "<p>Error!</p>";
}
}


function subtotal($cart){ //calculate the total value of products in the shopping cart
$total = 0; //initialise total
if (!empty($cart)){
    foreach ($cart as $product => $quantity){
        $q = "SELECT ID, Price FROM Products";
        $result = mysqli_query($_SESSION['conn'],$q);
        $row = mysqli_fetch_array($result);
        $price = $row['Price'];
        $total += $price * $quantity;
    }
    echo "<p>Total: $total | <a href=\"?action=empty\">Empty cart</a></p>";
} else {
    unset($_SESSION['cart']); //do not need to keep an empty cart, so delete it
    echo "<p>There is no product in your shopping cart.</p>";
}
}


if (isset($_GET['action'])){

if ($_GET['action']=='view'){

    viewcart();

} elseif ($_GET['action']=='add'){
    if (isset($_GET['product'])){
        $product_id = $_GET['product'];
        $product_qty = 1; //default product value
        addproduct($product_id, $product_qty);
        viewcart();
        echo "<p><a href=\"javascript:history.go(-1)\">back</a></p>";
    } else {
        echo "<p>There is an error! Are you trying to attack this little poor shopping cart?</p>";
    }
} elseif ($_GET['action'] == 'delete'){
    if (isset($_GET['product'])){
        $product_id = $_GET['product'];
        $product_qty = 1; //default product value
        deleteproduct($product_id, $product_qty);
        viewcart();
    }
    else {
        echo "<p>There is an error! </p>";
    }
} elseif ($_GET['action']=='empty'){
    emptycart();
    viewcart();
} 

else {
    echo "<p>There is an error! </p>";
}
}
else {
    echo "<p>There is an error! </p>";
}


include "footer.php";

?>

1 个答案:

答案 0 :(得分:0)

您的查询中有拼写错误。可能是您想要提取产品的产品ID,但实际上选择表中的所有内容。

$q = "SELECT ID, Name FROM Products";

更新它,阅读下面的示例,并检查这是否解决了问题

$q = "SELECT ID, Name FROM `Products` WHERE name='$product' ";

之后您正在阅读结果

$row = mysqli_fetch_array($result);

我希望你知道,这样$row只能从表中获得第一行。