购物车实现 php
购物车实现(PHP)
购物车是电商网站的核心功能之一,以下是基于PHP实现购物车功能的几种方法,包括会话存储和数据库存储方案。

基于会话(Session)的购物车
使用PHP的$_SESSION存储购物车数据,适合小型网站或临时存储。

// 启动会话
session_start();
// 添加商品到购物车
function addToCart($productId, $quantity = 1) {
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
if (isset($_SESSION['cart'][$productId])) {
$_SESSION['cart'][$productId] += $quantity;
} else {
$_SESSION['cart'][$productId] = $quantity;
}
}
// 从购物车移除商品
function removeFromCart($productId) {
if (isset($_SESSION['cart'][$productId])) {
unset($_SESSION['cart'][$productId]);
}
}
// 更新商品数量
function updateCart($productId, $quantity) {
if (isset($_SESSION['cart'][$productId])) {
$_SESSION['cart'][$productId] = $quantity;
}
}
// 获取购物车内容
function getCart() {
return $_SESSION['cart'] ?? [];
}
基于数据库的购物车
适用于需要持久化存储的场景(如用户登录后)。
// 数据库连接(假设使用MySQL)
$db = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');
// 添加商品到购物车
function addToCart($userId, $productId, $quantity = 1) {
global $db;
$stmt = $db->prepare("INSERT INTO cart (user_id, product_id, quantity)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE quantity = quantity + ?");
$stmt->execute([$userId, $productId, $quantity, $quantity]);
}
// 从购物车移除商品
function removeFromCart($userId, $productId) {
global $db;
$stmt = $db->prepare("DELETE FROM cart WHERE user_id = ? AND product_id = ?");
$stmt->execute([$userId, $productId]);
}
// 更新商品数量
function updateCart($userId, $productId, $quantity) {
global $db;
$stmt = $db->prepare("UPDATE cart SET quantity = ? WHERE user_id = ? AND product_id = ?");
$stmt->execute([$quantity, $userId, $productId]);
}
// 获取购物车内容
function getCart($userId) {
global $db;
$stmt = $db->prepare("SELECT * FROM cart WHERE user_id = ?");
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
购物车页面示例
结合HTML展示购物车内容。
// 显示购物车内容
function displayCart() {
$cart = getCart(); // 或 getCart($userId) 如果是数据库方案
if (empty($cart)) {
echo "购物车为空";
return;
}
echo "<table border='1'>";
echo "<tr><th>商品ID</th><th>数量</th><th>操作</th></tr>";
foreach ($cart as $productId => $quantity) {
echo "<tr>";
echo "<td>$productId</td>";
echo "<td>$quantity</td>";
echo "<td><a href='remove.php?id=$productId'>移除</a></td>";
echo "</tr>";
}
echo "</table>";
}
注意事项
- 安全性:对用户输入进行验证和过滤,防止SQL注入或XSS攻击。
- 性能:频繁操作数据库时考虑批量更新或缓存优化。
- 扩展性:商品信息通常需要关联查询(如名称、价格),需设计合理的数据库表结构。
数据库表结构示例
CREATE TABLE cart (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY (user_id, product_id)
);






