当前位置:首页 > PHP

php购物车功能实现

2026-02-27 14:16:17PHP

数据库设计

创建必要的数据库表存储商品和购物车信息。商品表(products)通常包含id、name、price、stock等字段,购物车表(cart)包含user_id、product_id、quantity等字段。

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10,2),
    stock INT
);

CREATE TABLE cart (
    user_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (user_id, product_id)
);

添加商品到购物车

通过表单或AJAX请求将商品添加到购物车。需要验证商品是否存在和库存是否充足。

php购物车功能实现

// 添加商品到购物车
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['product_id'])) {
    $productId = (int)$_POST['product_id'];
    $quantity = isset($_POST['quantity']) ? (int)$_POST['quantity'] : 1;

    // 验证商品信息
    $pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');
    $stmt = $pdo->prepare("SELECT * FROM products WHERE id = ?");
    $stmt->execute([$productId]);
    $product = $stmt->fetch();

    if ($product && $product['stock'] >= $quantity) {
        if (!isset($_SESSION['cart'][$productId])) {
            $_SESSION['cart'][$productId] = 0;
        }
        $_SESSION['cart'][$productId] += $quantity;
        // 可选的数据库存储
        $stmt = $pdo->prepare("INSERT INTO cart VALUES (?, ?, ?) 
            ON DUPLICATE KEY UPDATE quantity = quantity + VALUES(quantity)");
        $stmt->execute([$_SESSION['user_id'], $productId, $quantity]);
    }
}

显示购物车内容

从session或数据库读取购物车数据并展示商品列表和总价。

// 显示购物车内容
session_start();
if (!empty($_SESSION['cart'])) {
    $pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');
    $total = 0;

    foreach ($_SESSION['cart'] as $productId => $quantity) {
        $stmt = $pdo->prepare("SELECT * FROM products WHERE id = ?");
        $stmt->execute([$productId]);
        $product = $stmt->fetch();

        if ($product) {
            $subtotal = $product['price'] * $quantity;
            $total += $subtotal;
            echo "{$product['name']} - {$product['price']} x $quantity = $subtotal<br>";
        }
    }
    echo "总价: $total";
}

更新购物车数量

提供修改商品数量的功能,通常通过表单或AJAX实现。

php购物车功能实现

// 更新购物车数量
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['product_id'])) {
    $productId = (int)$_POST['product_id'];
    $quantity = (int)$_POST['quantity'];

    if ($quantity > 0) {
        $_SESSION['cart'][$productId] = $quantity;
        // 更新数据库
        $pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');
        $stmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE user_id = ? AND product_id = ?");
        $stmt->execute([$quantity, $_SESSION['user_id'], $productId]);
    } else {
        unset($_SESSION['cart'][$productId]);
        // 从数据库删除
        $stmt = $pdo->prepare("DELETE FROM cart WHERE user_id = ? AND product_id = ?");
        $stmt->execute([$_SESSION['user_id'], $productId]);
    }
}

清空购物车

提供清空购物车的功能,移除所有商品。

// 清空购物车
session_start();
if (isset($_POST['empty_cart'])) {
    $_SESSION['cart'] = array();
    // 清空数据库记录
    $pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');
    $stmt = $pdo->prepare("DELETE FROM cart WHERE user_id = ?");
    $stmt->execute([$_SESSION['user_id']]);
}

结账处理

将购物车内容转为订单,减少库存数量。

// 结账处理
session_start();
if (!empty($_SESSION['cart'])) {
    $pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');
    try {
        $pdo->beginTransaction();

        // 创建订单
        $stmt = $pdo->prepare("INSERT INTO orders (user_id, total, created_at) VALUES (?, ?, NOW())");
        $stmt->execute([$_SESSION['user_id'], $total]);
        $orderId = $pdo->lastInsertId();

        // 添加订单商品
        foreach ($_SESSION['cart'] as $productId => $quantity) {
            $stmt = $pdo->prepare("INSERT INTO order_items (order_id, product_id, quantity, price) 
                SELECT ?, id, ?, price FROM products WHERE id = ?");
            $stmt->execute([$orderId, $quantity, $productId]);

            // 更新库存
            $stmt = $pdo->prepare("UPDATE products SET stock = stock - ? WHERE id = ?");
            $stmt->execute([$quantity, $productId]);
        }

        $pdo->commit();
        $_SESSION['cart'] = array();
        echo "订单创建成功";
    } catch (Exception $e) {
        $pdo->rollBack();
        echo "订单创建失败: " . $e->getMessage();
    }
}

以上代码展示了PHP购物车的基本功能实现,可根据实际需求进行调整和扩展。使用session存储购物车数据适合小型应用,大型应用建议结合数据库存储。注意处理并发问题和添加适当的安全措施如CSRF防护。

标签: 购物车功能
分享给朋友:

相关文章

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

vue的艾特功能实现

vue的艾特功能实现

Vue 中的 @ 功能实现 Vue 中的 @ 符号是 v-on 指令的简写,用于绑定事件监听器。以下是具体实现方式: 基本语法 <button @click="handleClick">…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vite…

vue实现注册功能

vue实现注册功能

前端实现注册功能 在Vue中实现注册功能通常需要结合表单验证、HTTP请求和状态管理。以下是一个基于Vue 3和Element Plus的完整实现方案: 模板部分 <template>…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…