当前位置:首页 > PHP

php实现购买

2026-02-15 01:28:45PHP

PHP实现购买功能的基本流程

创建数据库表存储商品和订单信息 通常需要商品表(products)和订单表(orders)两个主要表结构。商品表包含id、name、price、stock等字段,订单表包含order_id、user_id、product_id、quantity、total_price、status等字段。

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

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    total_price DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

实现前端购买表单

创建HTML表单让用户选择商品和数量,提交到PHP处理页面。表单应包含商品选择下拉菜单和数量输入框。

<form action="process_purchase.php" method="post">
    <select name="product_id" required>
        <?php
        $products = $db->query("SELECT * FROM products WHERE stock > 0");
        while($product = $products->fetch_assoc()) {
            echo "<option value='{$product['id']}'>{$product['name']} - \${$product['price']}</option>";
        }
        ?>
    </select>

    <input type="number" name="quantity" min="1" required>

    <button type="submit">购买</button>
</form>

处理购买逻辑的PHP代码

创建process_purchase.php文件处理表单提交,验证库存并创建订单记录。

<?php
session_start();
require 'db_connection.php';

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $product_id = $_POST['product_id'];
    $quantity = $_POST['quantity'];
    $user_id = $_SESSION['user_id'];

    // 获取商品信息
    $stmt = $db->prepare("SELECT * FROM products WHERE id = ? FOR UPDATE");
    $stmt->bind_param("i", $product_id);
    $stmt->execute();
    $product = $stmt->get_result()->fetch_assoc();

    // 检查库存
    if($product['stock'] < $quantity) {
        die("库存不足");
    }

    // 计算总价
    $total_price = $product['price'] * $quantity;

    // 开始事务
    $db->begin_transaction();

    try {
        // 更新库存
        $update = $db->prepare("UPDATE products SET stock = stock - ? WHERE id = ?");
        $update->bind_param("ii", $quantity, $product_id);
        $update->execute();

        // 创建订单
        $insert = $db->prepare("INSERT INTO orders (user_id, product_id, quantity, total_price) VALUES (?, ?, ?, ?)");
        $insert->bind_param("iiid", $user_id, $product_id, $quantity, $total_price);
        $insert->execute();

        $db->commit();
        header("Location: order_success.php?order_id=".$db->insert_id);
    } catch(Exception $e) {
        $db->rollback();
        die("购买失败: ".$e->getMessage());
    }
}
?>

支付集成(以支付宝为例)

集成第三方支付接口,如支付宝或微信支付,完成支付流程。

// 支付宝支付示例
function createAlipayOrder($order_id, $total_price, $subject) {
    require_once 'alipay/config.php';
    require_once 'alipay/pagepay/service/AlipayTradeService.php';
    require_once 'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';

    $payRequestBuilder = new AlipayTradePagePayContentBuilder();
    $payRequestBuilder->setBody("商品购买");
    $payRequestBuilder->setSubject($subject);
    $payRequestBuilder->setOutTradeNo($order_id);
    $payRequestBuilder->setTotalAmount($total_price);
    $payRequestBuilder->setProductCode("FAST_INSTANT_TRADE_PAY");

    $aop = new AlipayTradeService($config);
    $response = $aop->pagePay($payRequestBuilder, $config['return_url'], $config['notify_url']);

    return $response;
}

订单状态管理

实现订单状态更新和查询功能,包括支付成功后的回调处理。

// 支付成功回调处理
function handlePaymentCallback($order_id, $payment_status) {
    global $db;

    $status_map = [
        'TRADE_SUCCESS' => 'paid',
        'TRADE_FINISHED' => 'completed',
        'TRADE_CLOSED' => 'cancelled'
    ];

    if(isset($status_map[$payment_status])) {
        $stmt = $db->prepare("UPDATE orders SET status = ? WHERE order_id = ?");
        $stmt->bind_param("si", $status_map[$payment_status], $order_id);
        $stmt->execute();

        // 发送订单确认邮件
        sendOrderConfirmation($order_id);
    }
}

安全注意事项

实施必要的安全措施保护购买流程,防止常见攻击。

php实现购买

验证所有输入数据,使用预处理语句防止SQL注入。对敏感操作如库存修改使用数据库事务确保数据一致性。支付接口使用HTTPS加密传输,存储的支付信息需符合PCI DSS标准。实现CSRF防护,在关键表单添加令牌验证。

标签: php
分享给朋友:

相关文章

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…