当前位置:首页 > PHP

php商城购物车实现

2026-04-03 12:25:21PHP

数据库设计

购物车功能通常需要与数据库交互存储商品信息、用户选择和数量。常见的数据表结构如下:

cart表字段示例:

  • cart_id: 购物车记录ID(主键)
  • user_id: 用户ID(关联用户表)
  • product_id: 商品ID(关联商品表)
  • quantity: 商品数量
  • created_at: 创建时间
  • updated_at: 更新时间

添加商品到购物车

通过表单或AJAX提交商品ID和数量,后端处理数据并存入数据库:

php商城购物车实现

// 接收参数
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'] ?? 1; // 默认数量为1

// 验证商品是否存在(需连接数据库查询)
// ...

// 插入或更新购物车记录
$sql = "INSERT INTO cart (user_id, product_id, quantity) 
        VALUES (:user_id, :product_id, :quantity)
        ON DUPLICATE KEY UPDATE quantity = quantity + :quantity";
$stmt = $pdo->prepare($sql);
$stmt->execute([
    ':user_id' => $_SESSION['user_id'],
    ':product_id' => $product_id,
    ':quantity' => $quantity
]);

显示购物车列表

查询当前用户的购物车记录并关联商品表获取详细信息:

$sql = "SELECT c.*, p.name, p.price, p.image 
        FROM cart c 
        JOIN products p ON c.product_id = p.product_id
        WHERE c.user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':user_id' => $_SESSION['user_id']]);
$cart_items = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 计算总价
$total = array_reduce($cart_items, function($sum, $item) {
    return $sum + ($item['price'] * $item['quantity']);
}, 0);

更新购物车数量

通过AJAX实现实时修改商品数量:

php商城购物车实现

$cart_id = $_POST['cart_id'];
$new_quantity = $_POST['quantity'];

// 验证数量有效性
if ($new_quantity > 0) {
    $sql = "UPDATE cart SET quantity = :quantity WHERE cart_id = :cart_id AND user_id = :user_id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':quantity' => $new_quantity,
        ':cart_id' => $cart_id,
        ':user_id' => $_SESSION['user_id']
    ]);
    echo json_encode(['success' => true]);
} else {
    echo json_encode(['error' => 'Invalid quantity']);
}

删除购物车商品

实现移除单件商品的功能:

$cart_id = $_POST['cart_id'];

$sql = "DELETE FROM cart WHERE cart_id = :cart_id AND user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
    ':cart_id' => $cart_id,
    ':user_id' => $_SESSION['user_id']
]);

// 返回剩余商品数量
$count = $pdo->query("SELECT COUNT(*) FROM cart WHERE user_id = {$_SESSION['user_id']}")->fetchColumn();
echo json_encode(['count' => $count]);

非登录用户购物车(Session实现)

对于未登录用户,可使用Session临时存储购物车数据:

// 添加商品
if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = [];
}

$product_id = $_POST['product_id'];
if (isset($_SESSION['cart'][$product_id])) {
    $_SESSION['cart'][$product_id] += $quantity;
} else {
    $_SESSION['cart'][$product_id] = $quantity;
}

// 读取购物车
$cart_items = [];
foreach ($_SESSION['cart'] as $product_id => $quantity) {
    // 需查询商品表获取完整信息
    $product = getProductById($product_id);
    $cart_items[] = [
        'product_id' => $product_id,
        'quantity' => $quantity,
        'name' => $product['name'],
        'price' => $product['price']
    ];
}

安全性注意事项

  1. 对所有用户输入参数进行过滤和验证
  2. 使用预处理语句防止SQL注入
  3. 检查用户权限确保只能操作自己的购物车
  4. 对敏感操作(如删除)添加CSRF令牌保护

标签: 购物车商城
分享给朋友:

相关文章

php购物车功能的实现

php购物车功能的实现

实现购物车功能的基本方法 使用PHP实现购物车功能可以通过会话(Session)或数据库存储购物车数据。以下是两种常见方法的详细说明。 使用Session存储购物车数据 PHP的$_SESSION可…

vue:实现商城分类

vue:实现商城分类

实现商城分类的步骤 在Vue中实现商城分类功能,可以通过组件化设计和状态管理来实现。以下是具体的实现方法。 创建分类组件 创建一个独立的分类组件,用于展示商城的分类列表。可以使用v-for指令动态渲…

vue实现商城左侧导航

vue实现商城左侧导航

实现商城左侧导航的步骤 使用Vue实现商城左侧导航需要结合组件化开发、状态管理和样式设计。以下是具体实现方法: 数据结构设计 左侧导航通常需要分类数据,建议使用嵌套数组结构: data() {…

react实现商城建站

react实现商城建站

技术选型与初始化 使用 create-react-app 快速初始化项目,搭配 TypeScript 提升代码健壮性。核心依赖包括: React Router:管理路由(如商品详情、购物车页)。…

php商城 设计与实现

php商城 设计与实现

PHP商城设计与实现的关键步骤 需求分析与规划 明确商城类型(B2B/B2C)、目标用户群体及核心功能模块。基础功能需包含用户注册登录、商品展示、购物车、订单管理、支付接口集成、后台管理。扩展功能可考…

php实现商城秒杀

php实现商城秒杀

PHP实现商城秒杀的核心逻辑 商城秒杀的核心在于高并发场景下的库存控制和数据一致性。PHP可通过以下方案实现: 数据库设计优化 创建独立的秒杀商品表,包含字段如id、product_id、stock…