php购物车实现流程
PHP 购物车实现流程
数据库设计
创建必要的数据库表,通常包括products(商品表)、users(用户表)和cart(购物车表)。商品表存储商品信息,用户表存储用户信息,购物车表关联用户和商品。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2),
description TEXT
);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(255)
);
CREATE TABLE cart (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
product_id INT,
quantity INT,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
用户登录与会话管理
用户登录后,使用PHP的session机制保存用户ID,确保购物车数据与用户关联。
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// 验证用户信息
$_SESSION['user_id'] = $user_id; // 假设验证通过
}
商品展示 从数据库中查询商品信息并展示在页面上,通常使用循环输出商品列表。

$sql = "SELECT * FROM products";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo "<div class='product'>
<h3>{$row['name']}</h3>
<p>价格: {$row['price']}</p>
<form method='post' action='add_to_cart.php'>
<input type='hidden' name='product_id' value='{$row['id']}'>
<input type='number' name='quantity' value='1' min='1'>
<button type='submit'>加入购物车</button>
</form>
</div>";
}
添加商品到购物车 处理用户提交的表单数据,将商品添加到购物车表中。
session_start();
if (isset($_SESSION['user_id']) && isset($_POST['product_id'])) {
$user_id = $_SESSION['user_id'];
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
// 检查是否已存在
$sql = "INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE quantity = quantity + VALUES(quantity)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iii", $user_id, $product_id, $quantity);
$stmt->execute();
}
购物车页面展示 查询购物车表中的数据,并计算总价。

session_start();
if (isset($_SESSION['user_id'])) {
$user_id = $_SESSION['user_id'];
$sql = "SELECT p.id, p.name, p.price, c.quantity
FROM cart c
JOIN products p ON c.product_id = p.id
WHERE c.user_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$total = 0;
while ($row = $result->fetch_assoc()) {
$subtotal = $row['price'] * $row['quantity'];
$total += $subtotal;
echo "<div class='cart-item'>
<p>{$row['name']} x {$row['quantity']} = {$subtotal}</p>
<a href='remove_from_cart.php?product_id={$row['id']}'>移除</a>
</div>";
}
echo "<p>总价: {$total}</p>";
}
移除商品 从购物车中删除指定商品。
session_start();
if (isset($_SESSION['user_id']) && isset($_GET['product_id'])) {
$user_id = $_SESSION['user_id'];
$product_id = $_GET['product_id'];
$sql = "DELETE FROM cart WHERE user_id = ? AND product_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $user_id, $product_id);
$stmt->execute();
header("Location: cart.php");
}
结算功能 结算时清空购物车或生成订单,具体逻辑根据需求实现。
session_start();
if (isset($_SESSION['user_id'])) {
$user_id = $_SESSION['user_id'];
$sql = "DELETE FROM cart WHERE user_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user_id);
$stmt->execute();
echo "结算成功,购物车已清空";
}





