当前位置:首页 > 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实现拨号功能的方法 使用HTML5的tel协议 在Vue模板中直接使用<a>标签的tel:协议实现拨号功能。这种方法适用于移动端浏览器,点击后会调起系统的拨号界面。 <tem…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php session 实现购物车

php session 实现购物车

PHP Session 实现购物车的方法 初始化 Session 在 PHP 脚本的最开始调用 session_start() 函数,确保会话已启用。这通常在页面的顶部完成。 session_sta…

vue 实现单选功能

vue 实现单选功能

实现单选功能的方法 在Vue中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML单选按钮 通过v-model绑定数据,结合原生<input type="radio"&g…

php实现分享功能实现

php实现分享功能实现

实现PHP分享功能的方法 在PHP中实现分享功能可以通过多种方式完成,以下是一些常见的实现方法: 使用社交媒体分享按钮 社交媒体平台如Facebook、Twitter、LinkedIn等提供了现成…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…