php购物车实现原理
PHP购物车实现原理
购物车功能通常基于会话(Session)或数据库存储实现,以下是核心实现方法:
基于Session的购物车
使用PHP的$_SESSION超全局变量临时存储用户选择的商品信息,适合小型电商场景。
// 启动Session
session_start();
// 添加商品到购物车
if (isset($_POST['add_to_cart'])) {
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
$_SESSION['cart'][$product_id] = [
'quantity' => $quantity,
'price' => $_POST['price'],
'name' => $_POST['product_name']
];
}
// 移除商品
if (isset($_GET['remove_item'])) {
unset($_SESSION['cart'][$_GET['remove_item']]);
}
数据库持久化购物车
对于需要长期存储的场景,可将购物车数据存入数据库:
// 数据库表结构示例
CREATE TABLE cart (
cart_id INT AUTO_INCREMENT,
user_id INT,
product_id INT,
quantity INT,
added_at TIMESTAMP,
PRIMARY KEY (cart_id)
);
// 添加商品到数据库
$stmt = $pdo->prepare("INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)");
$stmt->execute([$user_id, $product_id, $quantity]);
购物车功能组件
-
商品添加
通过表单提交商品ID、数量等信息,验证后存入Session或数据库。 -
数量修改
更新Session数组或执行SQL更新:$_SESSION['cart'][$product_id]['quantity'] = $new_quantity; // 或 $pdo->prepare("UPDATE cart SET quantity=? WHERE user_id=? AND product_id=?") ->execute([$new_quantity, $user_id, $product_id]); -
计算总价
遍历购物车项进行累加:$total = 0; foreach ($_SESSION['cart'] as $item) { $total += $item['price'] * $item['quantity']; }
安全注意事项
- 对所有输入数据进行过滤和验证
- 使用预处理语句防止SQL注入
- Session需设置适当过期时间
- 敏感操作(如删除)需进行CSRF防护
扩展功能建议
- 结合Cookie实现未登录用户的临时购物车
- 使用AJAX实现无刷新操作
- 添加商品库存验证逻辑
- 实现优惠券折扣计算模块
以上方法可根据实际项目需求组合使用,Session方案适合快速开发,数据库方案则提供更好的数据持久性和统计分析能力。







