php实现买书
PHP实现买书功能
在PHP中实现买书功能通常涉及数据库操作、表单处理和支付集成。以下是实现买书功能的关键步骤:
数据库设计 创建书籍表和订单表是基础。书籍表应包含id、书名、价格、库存等字段,订单表需要记录用户ID、书籍ID、数量、总价和订单状态。
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
book_id INT NOT NULL,
quantity INT NOT NULL,
total_price DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending'
);
书籍展示页面 从数据库获取书籍列表并展示给用户,通常需要查询数据库并将结果循环输出。
$conn = new mysqli("localhost", "username", "password", "bookstore");
$result = $conn->query("SELECT * FROM books WHERE stock > 0");
while($row = $result->fetch_assoc()) {
echo "<div class='book'>";
echo "<h3>".$row['title']."</h3>";
echo "<p>价格: ".$row['price']."</p>";
echo "<form method='post' action='add_to_cart.php'>";
echo "<input type='hidden' name='book_id' value='".$row['id']."'>";
echo "<input type='number' name='quantity' min='1' max='".$row['stock']."'>";
echo "<button type='submit'>加入购物车</button>";
echo "</form>";
echo "</div>";
}
购物车功能 使用Session存储用户选择的书籍和数量,实现临时购物车功能。
session_start();
if(isset($_POST['book_id']) && isset($_POST['quantity'])) {
$book_id = $_POST['book_id'];
$quantity = $_POST['quantity'];
if(!isset($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}
$_SESSION['cart'][$book_id] = $quantity;
}
订单处理 从购物车生成订单,减少库存,并处理支付流程。
$conn = new mysqli("localhost", "username", "password", "bookstore");
$conn->begin_transaction();
try {
$user_id = $_SESSION['user_id'];
$total = 0;
foreach($_SESSION['cart'] as $book_id => $quantity) {
$book = $conn->query("SELECT * FROM books WHERE id = $book_id FOR UPDATE")->fetch_assoc();
if($book['stock'] < $quantity) {
throw new Exception("库存不足");
}
$subtotal = $book['price'] * $quantity;
$total += $subtotal;
$conn->query("UPDATE books SET stock = stock - $quantity WHERE id = $book_id");
$conn->query("INSERT INTO orders (user_id, book_id, quantity, total_price)
VALUES ($user_id, $book_id, $quantity, $subtotal)");
}
$conn->commit();
unset($_SESSION['cart']);
echo "订单创建成功";
} catch(Exception $e) {
$conn->rollback();
echo "错误: ".$e->getMessage();
}
支付集成 根据需求集成支付宝、微信支付或PayPal等支付网关,通常需要调用支付API并处理回调。
// 支付宝支付示例
$alipay = new AlipayService($appid, $privateKey, $alipayPublicKey);
$params = [
'out_trade_no' => uniqid(),
'total_amount' => $total,
'subject' => '图书购买'
];
$payUrl = $alipay->createOrder($params);
header("Location: ".$payUrl);
订单状态更新 处理支付回调,更新订单状态为已支付。
if(verifyAlipayCallback($_POST)) {
$out_trade_no = $_POST['out_trade_no'];
$conn->query("UPDATE orders SET status = 'paid' WHERE id = $out_trade_no");
echo "success";
}
实现完整的买书功能还需要考虑用户认证、输入验证、错误处理和界面设计等方面。根据实际需求,可能还需要添加优惠券、积分、物流跟踪等附加功能。







