购物车实现 php
购物车实现(PHP)
数据库设计
创建数据库表存储购物车数据,通常需要用户ID、商品ID、数量等字段。示例SQL:
CREATE TABLE cart (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
添加商品到购物车
通过表单提交商品ID和数量,插入到数据库。

<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['product_id'])) {
$productId = $_POST['product_id'];
$quantity = $_POST['quantity'] ?? 1;
$userId = $_SESSION['user_id'] ?? 0;
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)");
$stmt->execute([$userId, $productId, $quantity]);
header("Location: cart.php");
}
?>
显示购物车内容
查询数据库并显示当前用户的购物车商品。
<?php
session_start();
$userId = $_SESSION['user_id'] ?? 0;
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("SELECT products.name, products.price, cart.quantity
FROM cart
JOIN products ON cart.product_id = products.id
WHERE cart.user_id = ?");
$stmt->execute([$userId]);
$cartItems = $stmt->fetchAll(PDO::FETCH_ASSOC);
$total = 0;
foreach ($cartItems as $item) {
$total += $item['price'] * $item['quantity'];
}
?>
<ul>
<?php foreach ($cartItems as $item): ?>
<li><?= $item['name'] ?> - <?= $item['price'] ?> x <?= $item['quantity'] ?></li>
<?php endforeach; ?>
</ul>
<p>Total: <?= $total ?></p>
更新购物车商品数量
通过AJAX或表单提交更新购物车中商品的数量。

<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['update'])) {
$productId = $_POST['product_id'];
$quantity = $_POST['quantity'];
$userId = $_SESSION['user_id'] ?? 0;
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE user_id = ? AND product_id = ?");
$stmt->execute([$quantity, $userId, $productId]);
header("Location: cart.php");
}
?>
删除购物车商品
从购物车中移除指定商品。
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['delete'])) {
$productId = $_POST['product_id'];
$userId = $_SESSION['user_id'] ?? 0;
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("DELETE FROM cart WHERE user_id = ? AND product_id = ?");
$stmt->execute([$userId, $productId]);
header("Location: cart.php");
}
?>
使用Session实现临时购物车
对于未登录用户,可以使用Session存储购物车数据。
<?php
session_start();
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['product_id'])) {
$productId = $_POST['product_id'];
$quantity = $_POST['quantity'] ?? 1;
$_SESSION['cart'][$productId] = $quantity;
header("Location: cart.php");
}
?>
<ul>
<?php foreach ($_SESSION['cart'] as $productId => $quantity): ?>
<li>Product <?= $productId ?> - Quantity <?= $quantity ?></li>
<?php endforeach; ?>
</ul>
注意事项
- 确保对用户输入进行验证和过滤,防止SQL注入。
- 考虑使用事务处理确保数据一致性。
- 对于高并发场景,可以采用Redis等缓存技术优化性能。
- 实现购物车持久化,将Session购物车数据与数据库同步。






