php实现借书
PHP实现借书功能
要实现借书功能,需要构建一个包含用户管理、图书管理和借阅记录的数据库系统。以下是实现借书功能的关键步骤和代码示例。
数据库设计
创建三个基本表:users(用户)、books(图书)和borrow_records(借阅记录)。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(100),
is_available BOOLEAN DEFAULT TRUE
);
CREATE TABLE borrow_records (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
book_id INT,
borrow_date DATE,
return_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (book_id) REFERENCES books(id)
);
连接数据库
使用PDO连接MySQL数据库。
$host = 'localhost';
$db = 'library';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
借书功能实现
创建借书函数,检查图书是否可用并更新相关表。
function borrowBook($pdo, $userId, $bookId) {
// 检查图书是否可用
$stmt = $pdo->prepare("SELECT is_available FROM books WHERE id = ?");
$stmt->execute([$bookId]);
$book = $stmt->fetch();
if (!$book || !$book['is_available']) {
return false;
}
// 开始事务
$pdo->beginTransaction();
try {
// 更新图书状态
$stmt = $pdo->prepare("UPDATE books SET is_available = FALSE WHERE id = ?");
$stmt->execute([$bookId]);
// 创建借阅记录
$stmt = $pdo->prepare("INSERT INTO borrow_records (user_id, book_id, borrow_date) VALUES (?, ?, CURDATE())");
$stmt->execute([$userId, $bookId]);
$pdo->commit();
return true;
} catch (Exception $e) {
$pdo->rollBack();
return false;
}
}
还书功能实现
创建还书函数,更新图书状态和借阅记录。
function returnBook($pdo, $recordId) {
// 获取借阅记录
$stmt = $pdo->prepare("SELECT book_id FROM borrow_records WHERE id = ? AND return_date IS NULL");
$stmt->execute([$recordId]);
$record = $stmt->fetch();
if (!$record) {
return false;
}
// 开始事务
$pdo->beginTransaction();
try {
// 更新图书状态
$stmt = $pdo->prepare("UPDATE books SET is_available = TRUE WHERE id = ?");
$stmt->execute([$record['book_id']]);
// 更新借阅记录
$stmt = $pdo->prepare("UPDATE borrow_records SET return_date = CURDATE() WHERE id = ?");
$stmt->execute([$recordId]);
$pdo->commit();
return true;
} catch (Exception $e) {
$pdo->rollBack();
return false;
}
}
前端表单示例
创建简单的HTML表单供用户借书。
<form action="borrow.php" method="post">
<label for="user_id">用户ID:</label>
<input type="number" id="user_id" name="user_id" required>
<label for="book_id">图书ID:</label>
<input type="number" id="book_id" name="book_id" required>
<button type="submit">借书</button>
</form>
处理借书请求
创建borrow.php处理借书请求。
require 'db_connection.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$userId = $_POST['user_id'];
$bookId = $_POST['book_id'];
if (borrowBook($pdo, $userId, $bookId)) {
echo "借书成功!";
} else {
echo "借书失败,图书可能已被借出或不存在。";
}
}
安全注意事项
- 对所有用户输入进行验证和过滤
- 使用预处理语句防止SQL注入
- 实施用户认证和授权
- 考虑添加借阅期限和逾期罚款功能
- 记录所有操作日志
这个实现提供了基本的借书功能框架,可以根据具体需求扩展更多功能,如用户界面、图书搜索、预约系统等。







