php实现借书
实现借书功能的基本步骤
使用PHP实现借书功能需要结合数据库操作和业务逻辑处理。以下是关键步骤:
数据库设计
创建必要的数据库表结构:
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(255),
isbn VARCHAR(20),
available_copies INT DEFAULT 1,
total_copies INT DEFAULT 1
);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE
);
CREATE TABLE borrow_records (
id INT AUTO_INCREMENT PRIMARY KEY,
book_id INT,
user_id INT,
borrow_date DATE,
return_date DATE,
status ENUM('borrowed', 'returned') DEFAULT 'borrowed',
FOREIGN KEY (book_id) REFERENCES books(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
连接数据库
建立数据库连接:
$host = 'localhost';
$dbname = 'library';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
借书功能实现
处理借书逻辑的核心代码:
function borrowBook($pdo, $userId, $bookId) {
// 检查书籍是否可借
$stmt = $pdo->prepare("SELECT available_copies FROM books WHERE id = ?");
$stmt->execute([$bookId]);
$book = $stmt->fetch();
if (!$book || $book['available_copies'] < 1) {
return "Book not available for borrowing";
}
// 开始事务
$pdo->beginTransaction();
try {
// 减少可用副本数
$stmt = $pdo->prepare("UPDATE books SET available_copies = available_copies - 1 WHERE id = ?");
$stmt->execute([$bookId]);
// 创建借阅记录
$borrowDate = date('Y-m-d');
$stmt = $pdo->prepare("INSERT INTO borrow_records (book_id, user_id, borrow_date, status) VALUES (?, ?, ?, 'borrowed')");
$stmt->execute([$bookId, $userId, $borrowDate]);
$pdo->commit();
return "Book borrowed successfully";
} catch (Exception $e) {
$pdo->rollBack();
return "Error borrowing book: " . $e->getMessage();
}
}
还书功能实现
配套的还书功能:
function returnBook($pdo, $recordId) {
// 获取借阅记录
$stmt = $pdo->prepare("SELECT book_id FROM borrow_records WHERE id = ? AND status = 'borrowed'");
$stmt->execute([$recordId]);
$record = $stmt->fetch();
if (!$record) {
return "Invalid borrow record";
}
$pdo->beginTransaction();
try {
// 更新书籍可用数量
$stmt = $pdo->prepare("UPDATE books SET available_copies = available_copies + 1 WHERE id = ?");
$stmt->execute([$record['book_id']]);
// 更新借阅记录状态
$returnDate = date('Y-m-d');
$stmt = $pdo->prepare("UPDATE borrow_records SET return_date = ?, status = 'returned' WHERE id = ?");
$stmt->execute([$returnDate, $recordId]);
$pdo->commit();
return "Book returned successfully";
} catch (Exception $e) {
$pdo->rollBack();
return "Error returning book: " . $e->getMessage();
}
}
安全考虑
实现借书功能时需注意:
- 使用预处理语句防止SQL注入
- 事务处理确保数据一致性
- 输入验证和错误处理
- 适当的权限控制
前端界面示例
简单的HTML表单示例:
<form action="borrow.php" method="post">
<label for="user_id">User ID:</label>
<input type="number" id="user_id" name="user_id" required>
<label for="book_id">Book ID:</label>
<input type="number" id="book_id" name="book_id" required>
<button type="submit">Borrow Book</button>
</form>
处理表单的borrow.php:
require_once 'db_connection.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$userId = filter_input(INPUT_POST, 'user_id', FILTER_VALIDATE_INT);
$bookId = filter_input(INPUT_POST, 'book_id', FILTER_VALIDATE_INT);
if ($userId && $bookId) {
$result = borrowBook($pdo, $userId, $bookId);
echo $result;
} else {
echo "Invalid input";
}
}
这个实现提供了基本的借书功能框架,可以根据实际需求进行扩展和完善。







