php session 实现购物车
PHP Session 实现购物车的方法
使用 PHP 的 $_SESSION 超全局变量可以轻松实现购物车功能。以下是一个完整的实现方案:
初始化 Session 和购物车结构
在脚本的最开始处调用 session_start(),确保 Session 可用。购物车可以设计为关联数组,存储商品 ID、名称、价格和数量。
session_start();
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
添加商品到购物车
创建一个处理表单提交的代码块,将商品添加到购物车数组中。需要检查商品是否已存在,若存在则增加数量。

if (isset($_POST['add_to_cart'])) {
$product_id = $_POST['product_id'];
$product_name = $_POST['product_name'];
$product_price = $_POST['product_price'];
if (isset($_SESSION['cart'][$product_id])) {
$_SESSION['cart'][$product_id]['quantity'] += 1;
} else {
$_SESSION['cart'][$product_id] = [
'name' => $product_name,
'price' => $product_price,
'quantity' => 1
];
}
}
从购物车移除商品
提供从购物车中移除商品或减少数量的功能。当数量减至 0 时完全移除该商品项。
if (isset($_GET['remove_from_cart'])) {
$product_id = $_GET['remove_from_cart'];
if (isset($_SESSION['cart'][$product_id])) {
unset($_SESSION['cart'][$product_id]);
}
}
if (isset($_GET['decrease_quantity'])) {
$product_id = $_GET['decrease_quantity'];
if (isset($_SESSION['cart'][$product_id])) {
$_SESSION['cart'][$product_id]['quantity'] -= 1;
if ($_SESSION['cart'][$product_id]['quantity'] <= 0) {
unset($_SESSION['cart'][$product_id]);
}
}
}
显示购物车内容
遍历 $_SESSION['cart'] 数组显示所有商品,并计算总价。可以使用 HTML 表格来格式化输出。

$total = 0;
if (!empty($_SESSION['cart'])) {
echo '<table>';
echo '<tr><th>商品名称</th><th>单价</th><th>数量</th><th>小计</th><th>操作</th></tr>';
foreach ($_SESSION['cart'] as $id => $item) {
$subtotal = $item['price'] * $item['quantity'];
$total += $subtotal;
echo '<tr>';
echo '<td>'.$item['name'].'</td>';
echo '<td>'.$item['price'].'</td>';
echo '<td>'.$item['quantity'].'</td>';
echo '<td>'.$subtotal.'</td>';
echo '<td><a href="?decrease_quantity='.$id.'">-</a> | <a href="?remove_from_cart='.$id.'">移除</a></td>';
echo '</tr>';
}
echo '<tr><td colspan="3">总计</td><td>'.$total.'</td><td></td></tr>';
echo '</table>';
} else {
echo '购物车是空的';
}
清空购物车
提供一个清空整个购物车的功能,只需重置 $_SESSION['cart'] 数组。
if (isset($_GET['empty_cart'])) {
$_SESSION['cart'] = [];
header('Location: cart.php'); // 重定向避免重复提交
exit;
}
安全注意事项
始终验证和清理用户输入,防止 XSS 攻击。在显示用户提供的数据时使用 htmlspecialchars() 函数。
$product_name = htmlspecialchars($_POST['product_name']);
这个实现提供了购物车的基本功能,可以根据需求进一步扩展,如添加商品图片、持久化存储到数据库等。






