当前位置:首页 > PHP

php 购物车实现

2026-01-13 13:32:54PHP

数据库设计

购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(用户ID)、product_id(商品ID)、quantity(数量)、created_at(创建时间)。

CREATE TABLE cart (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

添加商品到购物车

通过表单或AJAX请求将商品ID和用户ID提交到后端处理。PHP脚本接收数据后,检查商品是否已存在购物车中。若存在则更新数量,否则插入新记录。

<?php
// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');

// 获取用户ID和商品ID
$userId = $_POST['user_id'];
$productId = $_POST['product_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'] + 1;
    $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 (?, ?, 1)");
    $insertStmt->execute([$userId, $productId]);
}

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

显示购物车内容

查询购物车表并关联商品表获取详细信息,如商品名称、价格等。通过循环输出HTML内容展示购物车列表。

php 购物车实现

<?php
$userId = $_SESSION['user_id']; // 假设用户已登录
$stmt = $pdo->prepare("
    SELECT cart.*, products.name, products.price 
    FROM cart 
    JOIN products ON cart.product_id = products.id 
    WHERE cart.user_id = ?
");
$stmt->execute([$userId]);
$cartItems = $stmt->fetchAll();

foreach ($cartItems as $item) {
    echo "<div class='cart-item'>";
    echo "<h3>{$item['name']}</h3>";
    echo "<p>Price: {$item['price']}</p>";
    echo "<p>Quantity: {$item['quantity']}</p>";
    echo "</div>";
}
?>

更新购物车数量

通过AJAX请求传递商品ID和新的数量值。PHP脚本验证数据后更新数据库。

<?php
$cartId = $_POST['cart_id'];
$newQuantity = $_POST['quantity'];

// 验证数量大于0
if ($newQuantity > 0) {
    $stmt = $pdo->prepare("UPDATE cart SET quantity = ? WHERE id = ?");
    $stmt->execute([$newQuantity, $cartId]);
    echo json_encode(['success' => true]);
} else {
    echo json_encode(['success' => false, 'message' => 'Invalid quantity']);
}
?>

删除购物车商品

通过传递购物车项ID删除指定记录。PHP脚本执行DELETE操作。

php 购物车实现

<?php
$cartId = $_POST['cart_id'];
$stmt = $pdo->prepare("DELETE FROM cart WHERE id = ?");
$stmt->execute([$cartId]);
echo json_encode(['success' => true]);
?>

计算总价

在显示购物车时,通过SQL查询或PHP循环计算所有商品的总价。

<?php
$total = 0;
foreach ($cartItems as $item) {
    $total += $item['price'] * $item['quantity'];
}
echo "<p>Total: {$total}</p>";
?>

会话存储(无数据库方案)

对于无需持久化的场景,可使用$_SESSION临时存储购物车数据。适合小型或临时购物车需求。

<?php
session_start();
if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = [];
}

// 添加商品
$_SESSION['cart'][$productId] = [
    'quantity' => ($_SESSION['cart'][$productId]['quantity'] ?? 0) + 1
];
?>

标签: 购物车php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…