当前位置:首页 > PHP

php商城购物车实现

2026-01-29 06:16:37PHP

PHP 商城购物车实现

数据库设计

购物车功能通常需要与数据库交互,存储用户选择的商品信息。以下是一个简单的购物车表设计:

CREATE TABLE `cart` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

添加商品到购物车

通过 PHP 处理用户添加商品到购物车的请求,需要验证用户登录状态和商品信息。

<?php
session_start();
require_once 'db_config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['product_id'])) {
    $productId = $_POST['product_id'];
    $quantity = isset($_POST['quantity']) ? (int)$_POST['quantity'] : 1;

    if (!isset($_SESSION['user_id'])) {
        echo json_encode(['status' => 'error', 'message' => '请先登录']);
        exit;
    }

    $userId = $_SESSION['user_id'];

    // 检查商品是否已存在购物车
    $stmt = $pdo->prepare("SELECT * FROM cart WHERE user_id = ? AND product_id = ?");
    $stmt->execute([$userId, $productId]);
    $existingItem = $stmt->fetch();

    if ($existingItem) {
        // 更新数量
        $newQuantity = $existingItem['quantity'] + $quantity;
        $updateStmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE id = ?");
        $updateStmt->execute([$newQuantity, $existingItem['id']]);
    } else {
        // 新增记录
        $insertStmt = $pdo->prepare("INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)");
        $insertStmt->execute([$userId, $productId, $quantity]);
    }

    echo json_encode(['status' => 'success', 'message' => '商品已添加到购物车']);
}
?>

显示购物车内容

从数据库获取当前用户的购物车信息并显示。

<?php
session_start();
require_once 'db_config.php';

if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

$userId = $_SESSION['user_id'];
$stmt = $pdo->prepare("
    SELECT p.id, p.name, p.price, p.image, c.quantity 
    FROM cart c 
    JOIN products p ON c.product_id = p.id 
    WHERE c.user_id = ?
");
$stmt->execute([$userId]);
$cartItems = $stmt->fetchAll();
$total = 0;

foreach ($cartItems as $item) {
    $total += $item['price'] * $item['quantity'];
}
?>

<!-- HTML 显示购物车内容 -->
<div class="cart-container">
    <?php foreach ($cartItems as $item): ?>
    <div class="cart-item">
        <img src="<?= htmlspecialchars($item['image']) ?>" alt="<?= htmlspecialchars($item['name']) ?>">
        <h3><?= htmlspecialchars($item['name']) ?></h3>
        <p>价格: <?= $item['price'] ?> 元</p>
        <p>数量: <?= $item['quantity'] ?></p>
        <p>小计: <?= $item['price'] * $item['quantity'] ?> 元</p>
        <button class="remove-item" data-id="<?= $item['id'] ?>">删除</button>
    </div>
    <?php endforeach; ?>
    <div class="cart-total">
        <h3>总计: <?= $total ?> 元</h3>
    </div>
</div>

更新购物车数量

通过 AJAX 实现购物车商品数量的增减。

// 前端 JavaScript 代码
$(document).on('click', '.update-quantity', function() {
    var productId = $(this).data('id');
    var newQuantity = $(this).siblings('.quantity-input').val();

    $.ajax({
        url: 'update_cart.php',
        method: 'POST',
        data: {
            product_id: productId,
            quantity: newQuantity
        },
        success: function(response) {
            location.reload();
        }
    });
});
// update_cart.php
<?php
session_start();
require_once 'db_config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['product_id'], $_POST['quantity'])) {
    $productId = $_POST['product_id'];
    $quantity = (int)$_POST['quantity'];
    $userId = $_SESSION['user_id'];

    if ($quantity <= 0) {
        // 删除商品
        $stmt = $pdo->prepare("DELETE FROM cart WHERE user_id = ? AND product_id = ?");
        $stmt->execute([$userId, $productId]);
    } else {
        // 更新数量
        $stmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE user_id = ? AND product_id = ?");
        $stmt->execute([$quantity, $userId, $productId]);
    }

    echo json_encode(['status' => 'success']);
}
?>

删除购物车商品

实现从购物车中移除商品的功能。

<?php
session_start();
require_once 'db_config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['product_id'])) {
    $productId = $_POST['product_id'];
    $userId = $_SESSION['user_id'];

    $stmt = $pdo->prepare("DELETE FROM cart WHERE user_id = ? AND product_id = ?");
    $stmt->execute([$userId, $productId]);

    echo json_encode(['status' => 'success', 'message' => '商品已移除']);
}
?>

会话存储实现

对于不需要持久化存储的简单购物车,可以使用 PHP 会话(Session)来存储购物车数据。

<?php
session_start();

// 添加商品到会话购物车
if (isset($_POST['product_id'])) {
    $productId = $_POST['product_id'];

    if (!isset($_SESSION['cart'])) {
        $_SESSION['cart'] = [];
    }

    if (isset($_SESSION['cart'][$productId])) {
        $_SESSION['cart'][$productId]++;
    } else {
        $_SESSION['cart'][$productId] = 1;
    }
}

// 显示会话购物车内容
if (isset($_SESSION['cart']) && !empty($_SESSION['cart'])) {
    foreach ($_SESSION['cart'] as $productId => $quantity) {
        // 这里可以查询数据库获取商品详情
        echo "商品ID: $productId, 数量: $quantity <br>";
    }
}
?>

安全考虑

实现购物车功能时需要注意以下安全事项:

  • 验证用户身份,防止未授权访问
  • 对用户输入进行过滤和验证
  • 使用预处理语句防止 SQL 注入
  • 对输出内容进行转义,防止 XSS 攻击
  • 重要操作如结算需要 CSRF 保护

性能优化

对于大型商城,购物车功能可能需要考虑以下优化:

  • 使用 Redis 等缓存技术存储购物车数据
  • 实现延迟加载,分批加载购物车商品
  • 对数据库查询进行优化,添加适当索引
  • 实现客户端本地存储临时购物车数据

以上代码和方案可以根据实际项目需求进行调整和扩展,构建完整的商城购物车功能。

php商城购物车实现

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

相关文章

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…

vue实现商城开发

vue实现商城开发

Vue 商城开发核心实现步骤 技术栈选择 Vue 3 + Pinia(状态管理) Vue Router(路由管理) Axios(HTTP请求) Vant/Element Plus(UI组件库) V…

vue实现慕淘商城

vue实现慕淘商城

Vue 实现慕淘商城的关键步骤 项目初始化与配置 使用 Vue CLI 创建项目,安装必要依赖(Vue Router、Vuex、Axios)。配置基础路由和全局样式,引入 UI 库如 Element…

php商城 设计与实现

php商城 设计与实现

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

php用session实现购物车

php用session实现购物车

使用 PHP Session 实现购物车 初始化 Session 确保在脚本的最开始调用 session_start(),以便使用 Session 功能。通常放在 PHP 文件的开头。 <?p…

php如何实现购物车

php如何实现购物车

实现购物车功能的方法 PHP实现购物车功能可以通过多种方式,以下是几种常见的方法: 使用Session存储购物车数据 Session是服务器端存储用户数据的机制,适合临时存储购物车信息。在PHP中…