<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简易购物车</title>
<script src="jquery.min.js"></script>
<script>
$(document).ready(function(){
//获取重量,得出小计与总计
//change(),元素值发生改变触发
$(".quantity").change(function(){
var quantity = $(this).val();
var price = $(this).closest("tr").find(".price").text();
var subtotal = quantity * price;
if(quantity<0){
//closest查找tr里的小计
$(this).closest("tr").find(".subtotal").text("输入错误");
}
else{
$(this).closest("tr").find(".subtotal").text(subtotal.toFixed(2));
}
updateTotal();
});
$(".addToCart").click(function(){
$(this).css("color","red");
var itemID = $(this).attr("data-item");
var quantity = $(this).closest("tr").find(".quantity").val();
var price = $(this).closest("tr").find(".price").text();
var subtotal = quantity * price;
//向php发送请求,提交数据
$.post("addToCart.php", {itemID: itemID, quantity: quantity,subtotal:subtotal},function(response){console.log(response);
});
});
function updateTotal(){
var total = 0;
$(".subtotal").each(function(){
var subtotal = parseFloat($(this).text());
if(!isNaN(subtotal)){
total += subtotal;}
});
$.post("addToCart.php", {total:total},function(response){console.log(response);});
$("#total").text(total);
}
});
</script>
<style type="text/css">
.c1 {width: 40px;height: 40px;}
</style>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>商品</th>
<th>单价</th>
<th>重量(kg)</th>
<th>小计</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td><img class="c1" src="sc/xlh.jpg">西兰花</td>
<td class="price">9.3</td>
<td><input type="number" class="quantity" value="0" min="0"></td>
<td class="subtotal">0</td>
<td><button class="addToCart" data-item="1">加入购物车</button>
</td>
</tr>
<tr>
<td><img class="c1" src="sc/hg.jpg">黄瓜</td>
<td class="price">3.2</td>
<td><input type="number" class="quantity" value="0" min="0"></td>
<td class="subtotal">0</td>
<td><button class="addToCart" data-item="2">加入购物车</button></td>
</tr>
<tr>
<td><img class="c1" src="sc/xhs.jpg">西红柿</td>
<td class="price">2.7</td>
<td><input type="number" class="quantity" value="0" min="0"></td>
<td class="subtotal">0</td>
<td><button class="addToCart" data-item="3">加入购物车</button></td>
</tr>
<tr>
<td><img class="c1" src="sc/ym.jpg">玉米</td>
<td class="price">1.1</td>
<td><input type="number" class="quantity" value="0" min="0"></td>
<td class="subtotal">0</td>
<td><button class="addToCart" data-item="4">加入购物车</button></td>
</tr>
<tr>
<td><img class="c1" src="sc/wj.jpg">莴苣</td>
<td class="price">5.1</td>
<td><input type="number" class="quantity" value="0" min="0"></td>
<td class="subtotal">0</td>
<td><button class="addToCart" data-item="5">加入购物车</button></td>
</tr>
</tbody>
</table>
<h2>总计: <span id="total">0</span></h2>
<div id="cart"></div>
<a href="addToCart.php">去结算</a>
</body>
</html>
以上是我的购物车HTML,下面是我存在错误的PHP代码。
<?php
session_start();
$itemID=$_POST['itemID'];
$quantity=$_POST['quantity'];
$subtotal=$_POST['subtotal'];
if(isset($_SESSION['cart'][$itemID])){
// 如果存在,更新数量和小计
$_SESSION['cart'][$itemID]['quantity'] = $quantity;
$_SESSION['cart'][$itemID]['subtotal'] = $subtotal;
}
else
{
// 否则,将新项目添加到购物车
$_SESSION['cart'][$itemID] = array('itemID' => $itemID, 'quantity' => $quantity, 'subtotal' => $subtotal);
}
$total = 0;
// 遍历购物车中的每个项目,计算总金额
if(isset($_SESSION['cart']) && !empty($_SESSION['cart'])){
foreach($_SESSION['cart'] as $item){
$total += $item['subtotal'];
}
echo "总计:" . $total;
} else {
echo "<h2>购物车为空</h2>";
}
print_r($_SESSION['cart']);
?>
错误:HTML算出的总计与PHP输出的不符合,PHP总计输出错误。
第一次php总计输出正确,但html刷新后,重量看起来为0,实际上第一次输入的还没消失,仍保留上次输入的量。
如果在第一次输入的框内再次输入,第二次输入值会替换第一次输入值。
如果第二次没有再次输入,框内重量看起来为0,实际上仍是第一次的重量。
应该怎么才能使PHP输出的总计正确?