php购物车功能实现
数据库设计
购物车功能通常需要设计数据库表来存储商品和用户信息。常见的表包括:
products表:存储商品信息,如商品ID、名称、价格、库存等。users表:存储用户信息,如用户ID、用户名、密码等。cart表:存储购物车信息,如购物车ID、用户ID、商品ID、数量等。
示例SQL创建表语句:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL
);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL
);
CREATE TABLE cart (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
添加商品到购物车
通过PHP处理表单提交,将商品添加到购物车。需要检查商品是否已存在,若存在则更新数量,否则插入新记录。

<?php
session_start();
require 'db_connection.php';
if (isset($_POST['add_to_cart'])) {
$product_id = $_POST['product_id'];
$user_id = $_SESSION['user_id'];
$quantity = $_POST['quantity'];
// 检查商品是否已在购物车
$stmt = $pdo->prepare("SELECT * FROM cart WHERE user_id = ? AND product_id = ?");
$stmt->execute([$user_id, $product_id]);
$existing_item = $stmt->fetch();
if ($existing_item) {
// 更新数量
$new_quantity = $existing_item['quantity'] + $quantity;
$stmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE id = ?");
$stmt->execute([$new_quantity, $existing_item['id']]);
} else {
// 插入新记录
$stmt = $pdo->prepare("INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)");
$stmt->execute([$user_id, $product_id, $quantity]);
}
header("Location: cart.php");
}
?>
显示购物车内容
从数据库中查询购物车内容,并显示商品详细信息。
<?php
session_start();
require 'db_connection.php';
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare("
SELECT cart.id, products.name, products.price, cart.quantity
FROM cart
JOIN products ON cart.product_id = products.id
WHERE cart.user_id = ?
");
$stmt->execute([$user_id]);
$cart_items = $stmt->fetchAll();
$total = 0;
foreach ($cart_items as $item) {
$total += $item['price'] * $item['quantity'];
}
?>
<ul>
<?php foreach ($cart_items as $item): ?>
<li>
<?php echo htmlspecialchars($item['name']); ?> -
$<?php echo htmlspecialchars($item['price']); ?> x
<?php echo htmlspecialchars($item['quantity']); ?> =
$<?php echo htmlspecialchars($item['price'] * $item['quantity']); ?>
<a href="remove_from_cart.php?id=<?php echo $item['id']; ?>">Remove</a>
</li>
<?php endforeach; ?>
</ul>
<p>Total: $<?php echo $total; ?></p>
从购物车移除商品
处理移除商品的请求,从数据库中删除对应的记录。

<?php
session_start();
require 'db_connection.php';
if (isset($_GET['id'])) {
$cart_id = $_GET['id'];
$user_id = $_SESSION['user_id'];
// 验证购物车项属于当前用户
$stmt = $pdo->prepare("DELETE FROM cart WHERE id = ? AND user_id = ?");
$stmt->execute([$cart_id, $user_id]);
}
header("Location: cart.php");
?>
更新购物车商品数量
通过表单提交更新购物车中商品的数量。
<?php
session_start();
require 'db_connection.php';
if (isset($_POST['update_cart'])) {
$cart_id = $_POST['cart_id'];
$quantity = $_POST['quantity'];
$user_id = $_SESSION['user_id'];
// 验证购物车项属于当前用户
$stmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE id = ? AND user_id = ?");
$stmt->execute([$quantity, $cart_id, $user_id]);
header("Location: cart.php");
}
?>
会话存储实现
如果不使用数据库,可以使用PHP的$_SESSION来存储购物车数据。
<?php
session_start();
if (isset($_POST['add_to_cart'])) {
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
if (isset($_SESSION['cart'][$product_id])) {
$_SESSION['cart'][$product_id] += $quantity;
} else {
$_SESSION['cart'][$product_id] = $quantity;
}
header("Location: cart.php");
}
?>
安全注意事项
- 对所有用户输入使用
htmlspecialchars或预处理语句来防止XSS和SQL注入。 - 验证用户权限,确保用户只能操作自己的购物车。
- 在处理购物车操作时,检查商品库存是否充足。






