php购物车功能的实现
PHP 购物车功能实现
数据库设计
创建必要的数据库表存储商品和购物车信息。通常需要 products 表和 cart 表。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2),
description TEXT,
image VARCHAR(100)
);
CREATE TABLE cart (
id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT,
quantity INT,
user_id INT,
FOREIGN KEY (product_id) REFERENCES products(id)
);
添加商品到购物车
通过表单或按钮将商品添加到购物车,使用 PHP 处理数据并存储到数据库或 Session。
session_start();
if (isset($_POST['add_to_cart'])) {
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
if (isset($_SESSION['cart'][$product_id])) {
$_SESSION['cart'][$product_id] += $quantity;
} else {
$_SESSION['cart'][$product_id] = $quantity;
}
}
显示购物车内容
从 Session 或数据库获取购物车数据,并显示商品信息和总价。

session_start();
if (!empty($_SESSION['cart'])) {
foreach ($_SESSION['cart'] as $product_id => $quantity) {
$sql = "SELECT * FROM products WHERE id = $product_id";
$result = mysqli_query($conn, $sql);
$product = mysqli_fetch_assoc($result);
echo "商品名称: " . $product['name'] . "<br>";
echo "单价: " . $product['price'] . "<br>";
echo "数量: " . $quantity . "<br>";
echo "小计: " . ($product['price'] * $quantity) . "<br><br>";
}
}
更新购物车数量
提供输入框或按钮让用户修改商品数量,并更新 Session 或数据库。
session_start();
if (isset($_POST['update_cart'])) {
foreach ($_POST['quantity'] as $product_id => $quantity) {
if ($quantity <= 0) {
unset($_SESSION['cart'][$product_id]);
} else {
$_SESSION['cart'][$product_id] = $quantity;
}
}
}
删除购物车商品
提供删除按钮,从购物车中移除指定商品。

session_start();
if (isset($_GET['remove_item'])) {
$product_id = $_GET['remove_item'];
unset($_SESSION['cart'][$product_id]);
}
计算购物车总价
遍历购物车数据,计算商品总价并显示。
session_start();
$total = 0;
if (!empty($_SESSION['cart'])) {
foreach ($_SESSION['cart'] as $product_id => $quantity) {
$sql = "SELECT price FROM products WHERE id = $product_id";
$result = mysqli_query($conn, $sql);
$product = mysqli_fetch_assoc($result);
$total += $product['price'] * $quantity;
}
}
echo "总价: " . $total;
结账功能
将购物车数据写入订单表,清空购物车并跳转到支付或订单确认页面。
session_start();
if (isset($_POST['checkout'])) {
$user_id = $_SESSION['user_id'];
$order_date = date('Y-m-d H:i:s');
$sql = "INSERT INTO orders (user_id, order_date, total) VALUES ('$user_id', '$order_date', '$total')";
mysqli_query($conn, $sql);
$order_id = mysqli_insert_id($conn);
foreach ($_SESSION['cart'] as $product_id => $quantity) {
$sql = "INSERT INTO order_items (order_id, product_id, quantity) VALUES ('$order_id', '$product_id', '$quantity')";
mysqli_query($conn, $sql);
}
unset($_SESSION['cart']);
header("Location: order_confirmation.php");
}
注意事项
- 使用
session_start()确保 Session 可用。 - 对用户输入进行验证和过滤,防止 SQL 注入。
- 考虑使用 AJAX 提升用户体验,避免页面刷新。
- 对于大型项目,建议使用框架(如 Laravel)或现成的购物车库。






