当前位置:首页 > PHP

php实现借书

2026-02-14 23:48:13PHP

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数据库。

php实现借书

$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;
    }
}

还书功能实现

创建还书函数,更新图书状态和借阅记录。

php实现借书

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注入
  • 实施用户认证和授权
  • 考虑添加借阅期限和逾期罚款功能
  • 记录所有操作日志

这个实现提供了基本的借书功能框架,可以根据具体需求扩展更多功能,如用户界面、图书搜索、预约系统等。

标签: 借书php
分享给朋友:

相关文章

php实现验证码

php实现验证码

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

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

php session实现购物车

php session实现购物车

PHP Session 实现购物车 初始化 Session 确保在使用 Session 前调用 session_start() 函数。通常放在 PHP 文件的最顶部。 <?php sessio…