购物车中的总价

时间:2014-02-15 00:16:08

标签: php shopping-cart

我想添加到购物车相同的项目,我想计算两个项目的价格,但它只显示0,但如果我删除此行$ price = $ price * $ each_item ['数量'];它显示了一个项目的正确价格,但后来我看不到总价格,这里是PHP代码

$cartOutput="";
if(!isset($_SESSION["cart_array"])|| count($_SESSION["cart_array"])<1){
$cartOutput="<h2 align='center'>Your shopping cart is empty</h2>";
}else{
$i=0;
foreach($_SESSION["cart_array"] as $each_item){
    $i++;
    $item_id= $each_item['item_id'];
    $sql = mysql_query("SELECT * FROM products WHERE id='$item_id' LIMIT 1");
    while($row=mysql_fetch_array($sql)){

        $product_name = $row["product_name"];
        $price = $row["price"];

    }
    $price = $price*$each_item['quantity'] ;// this is the line I was talking about
    $cartOutput .= "<h2>Cart Item $i</h2>";
    $cartOutput .= "Item ID: " . $each_item['item_id']."<br>";
    $cartOutput .= "Item Quantity: " . $each_item['quantity'] ."<br>";
    $cartOutput .= "Product Name: " . $product_name ."<br>";
    $cartOutput .= "Product Price: " . $price . "<br>";

}

}

4 个答案:

答案 0 :(得分:1)

这是非常弱的代码。

您不检查购物车的价值。你认为它是数字,整数,不错的代码,不是用户黑客等。

只要它已经设定,你似乎很开心,而不是&lt; 1 如果值为“hello you”或1,000,000,000(在另一个脚本或用户hack中出错),您的脚本会发生什么?

你运行一个循环foreach($_SESSION["cart_array"] as $each_item - 会话中的每个值都是一个数组吗? (即$each_item是一个数组)

不检查您的购物车阵列是否足以使代码完整,但在mysql查询中使用它也会造成麻烦。
验证,消毒!

您的错误日志文件中是否有错误? mysql查询是否会产生任何错误?

当您回显所有变量并打印数组时,会发生什么?mysql查询中的num行? 回声显示PHP实际使用的数据,从那里您可以看到问题所在。

mysql查询是否返回任何内容?你的代码假定它确实如此,如果没有,那么你就没有价值 这^^可能是你的问题!

e.g。

$price = $row["price"]; - 假设查询失败。

然后你跑:
$price = $price*$each_item['quantity']; - 0 *任何= 0

在您将$item_id设置为= $each_item['item_id']后回复,因为我认为这将是根本原因。 如果没有,如上所述,回显所有内容,以便您可以在代码中找到问题。无论如何,这应该作为开发的一部分来完成,以确保一切顺利。

此外,您应该阅读有关使用mysqli或PDO,并停止使用旧的折旧mysql_函数。特别是因为你没有进行任何安全检查...

答案 1 :(得分:0)

确保 $ each_item ['quantity'] 不为空。

如果您想在购物车中添加新商品,那么原始商品数量为0. $ price * 0 = 0.

您是否在会话中更新项目数量?

试试这个:

$price = $price * ($each_item['quantity'] > 0 ? $each_item['quantity'] : 1);

答案 2 :(得分:0)

你知道答案。

你说这行是导致行的问题

 $price = $price*$each_item['quantity']

如果你删除它,你就得到了价格。如果包含此项,则为零。 这意味着$ each_item ['quantity']为零:)

尝试打印该值,您可以自行修复。

顺便说一下,你不需要一个while循环!!

答案 3 :(得分:0)

价格即将出现空白,然后确保数据库中的数据正常。意思是,根本没有退货价格。在我看来这个:

$price = $row["price"];

是你的问题专栏