php商城购物车实现
数据库设计
购物车功能通常需要与数据库交互存储商品信息、用户选择和数量。常见的数据表结构如下:
cart表字段示例:
cart_id: 购物车记录ID(主键)user_id: 用户ID(关联用户表)product_id: 商品ID(关联商品表)quantity: 商品数量created_at: 创建时间updated_at: 更新时间
添加商品到购物车
通过表单或AJAX提交商品ID和数量,后端处理数据并存入数据库:

// 接收参数
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'] ?? 1; // 默认数量为1
// 验证商品是否存在(需连接数据库查询)
// ...
// 插入或更新购物车记录
$sql = "INSERT INTO cart (user_id, product_id, quantity)
VALUES (:user_id, :product_id, :quantity)
ON DUPLICATE KEY UPDATE quantity = quantity + :quantity";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':user_id' => $_SESSION['user_id'],
':product_id' => $product_id,
':quantity' => $quantity
]);
显示购物车列表
查询当前用户的购物车记录并关联商品表获取详细信息:
$sql = "SELECT c.*, p.name, p.price, p.image
FROM cart c
JOIN products p ON c.product_id = p.product_id
WHERE c.user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':user_id' => $_SESSION['user_id']]);
$cart_items = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 计算总价
$total = array_reduce($cart_items, function($sum, $item) {
return $sum + ($item['price'] * $item['quantity']);
}, 0);
更新购物车数量
通过AJAX实现实时修改商品数量:

$cart_id = $_POST['cart_id'];
$new_quantity = $_POST['quantity'];
// 验证数量有效性
if ($new_quantity > 0) {
$sql = "UPDATE cart SET quantity = :quantity WHERE cart_id = :cart_id AND user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':quantity' => $new_quantity,
':cart_id' => $cart_id,
':user_id' => $_SESSION['user_id']
]);
echo json_encode(['success' => true]);
} else {
echo json_encode(['error' => 'Invalid quantity']);
}
删除购物车商品
实现移除单件商品的功能:
$cart_id = $_POST['cart_id'];
$sql = "DELETE FROM cart WHERE cart_id = :cart_id AND user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':cart_id' => $cart_id,
':user_id' => $_SESSION['user_id']
]);
// 返回剩余商品数量
$count = $pdo->query("SELECT COUNT(*) FROM cart WHERE user_id = {$_SESSION['user_id']}")->fetchColumn();
echo json_encode(['count' => $count]);
非登录用户购物车(Session实现)
对于未登录用户,可使用Session临时存储购物车数据:
// 添加商品
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
$product_id = $_POST['product_id'];
if (isset($_SESSION['cart'][$product_id])) {
$_SESSION['cart'][$product_id] += $quantity;
} else {
$_SESSION['cart'][$product_id] = $quantity;
}
// 读取购物车
$cart_items = [];
foreach ($_SESSION['cart'] as $product_id => $quantity) {
// 需查询商品表获取完整信息
$product = getProductById($product_id);
$cart_items[] = [
'product_id' => $product_id,
'quantity' => $quantity,
'name' => $product['name'],
'price' => $product['price']
];
}
安全性注意事项
- 对所有用户输入参数进行过滤和验证
- 使用预处理语句防止SQL注入
- 检查用户权限确保只能操作自己的购物车
- 对敏感操作(如删除)添加CSRF令牌保护






