当前位置:首页 > 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']]);
}

结账处理

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

php购物车功能实现

// 结账处理
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 分页功能实现 在 Vue 中实现分页功能通常需要结合后端 API 或前端数据分页逻辑。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在 Vue 组件中处理分页逻辑。…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

vue实现粘贴功能

vue实现粘贴功能

实现粘贴功能的基本方法 在Vue中实现粘贴功能通常涉及监听paste事件,并处理剪贴板数据。以下是一个基础实现示例: <template> <div @paste="handl…

vue实现置顶功能

vue实现置顶功能

实现置顶功能的基本思路 在Vue中实现置顶功能通常涉及对数据列表的操作,通过调整数组元素的顺序或添加标识属性来实现。以下是几种常见方法: 方法一:通过数组排序实现 利用数组的sort方法,根据元素的…

vue实现监控功能

vue实现监控功能

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、生命周期钩子、自定义指令或第三方库的集成。以下是几种常见实现方式: 数据监控 通过 Vue 的 watch 属性监听数据变…