当前位置:首页 > 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请求将商品添加到购物车。需要验证商品是否存在和库存是否充足。

// 添加商品到购物车
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实现。

// 更新购物车数量
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防护。

php购物车功能实现

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

相关文章

用vue实现简易购物车

用vue实现简易购物车

实现步骤 创建一个Vue项目,确保已安装Vue CLI。可以通过以下命令初始化项目: vue create shopping-cart cd shopping-cart npm run serve…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的…

vue实现功能插件

vue实现功能插件

Vue 功能插件实现方法 插件基本结构 Vue 插件通常需要暴露一个 install 方法,该方法接收 Vue 构造函数作为参数。基本结构如下: const MyPlugin = { inst…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php 购物车实现session

php 购物车实现session

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

php秒杀功能的实现

php秒杀功能的实现

秒杀功能的核心设计 高并发场景下秒杀系统的核心在于解决超卖问题和性能瓶颈。需要结合缓存、队列、锁机制等技术实现。 数据库设计 商品表需包含库存字段,例如: CREATE TABLE `seck…