当前位置:首页 > PHP

php实现借阅图书

2026-02-15 06:45:43PHP

实现借阅图书的PHP代码示例

以下是一个简单的PHP实现借阅图书功能的代码示例,包含数据库操作和基本逻辑。

数据库表结构

需要创建两个基本表:books(图书表)和borrow_records(借阅记录表)。

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 borrow_records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    book_id INT,
    user_id INT,
    borrow_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    return_date DATETIME,
    status ENUM('borrowed', 'returned') DEFAULT 'borrowed',
    FOREIGN KEY (book_id) REFERENCES books(id)
);

借阅功能实现

<?php
// 数据库连接
$db = new PDO('mysql:host=localhost;dbname=library', 'username', 'password');

function borrowBook($bookId, $userId) {
    global $db;

    // 检查图书是否可借
    $stmt = $db->prepare("SELECT available_copies FROM books WHERE id = ?");
    $stmt->execute([$bookId]);
    $book = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$book || $book['available_copies'] < 1) {
        return "图书不可借";
    }

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

    try {
        // 减少可用副本数
        $stmt = $db->prepare("UPDATE books SET available_copies = available_copies - 1 WHERE id = ?");
        $stmt->execute([$bookId]);

        // 创建借阅记录
        $stmt = $db->prepare("INSERT INTO borrow_records (book_id, user_id, status) VALUES (?, ?, 'borrowed')");
        $stmt->execute([$bookId, $userId]);

        $db->commit();
        return "借阅成功";
    } catch (Exception $e) {
        $db->rollBack();
        return "借阅失败: " . $e->getMessage();
    }
}

// 使用示例
$result = borrowBook(1, 123); // 借阅ID为1的图书,用户ID为123
echo $result;
?>

归还功能实现

function returnBook($recordId) {
    global $db;

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

    try {
        // 获取借阅记录
        $stmt = $db->prepare("SELECT book_id FROM borrow_records WHERE id = ? AND status = 'borrowed'");
        $stmt->execute([$recordId]);
        $record = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$record) {
            return "无效的借阅记录";
        }

        // 更新图书可用副本数
        $stmt = $db->prepare("UPDATE books SET available_copies = available_copies + 1 WHERE id = ?");
        $stmt->execute([$record['book_id']]);

        // 更新借阅记录状态
        $stmt = $db->prepare("UPDATE borrow_records SET status = 'returned', return_date = NOW() WHERE id = ?");
        $stmt->execute([$recordId]);

        $db->commit();
        return "归还成功";
    } catch (Exception $e) {
        $db->rollBack();
        return "归还失败: " . $e->getMessage();
    }
}

安全增强措施

在实际应用中,应增加以下安全措施:

// 输入验证
function validateInput($input) {
    return htmlspecialchars(strip_tags(trim($input)));
}

// 防止SQL注入
$bookId = filter_var($_POST['book_id'], FILTER_VALIDATE_INT);
if ($bookId === false) {
    die("无效的图书ID");
}

// 用户认证
session_start();
if (!isset($_SESSION['user_id'])) {
    die("请先登录");
}
$userId = $_SESSION['user_id'];

前端表单示例

简单的HTML借阅表单:

php实现借阅图书

<form action="borrow.php" method="post">
    <input type="hidden" name="book_id" value="<?php echo $bookId; ?>">
    <button type="submit">借阅图书</button>
</form>

这个实现包含了基本的借阅和归还功能,使用了事务确保数据一致性,并提供了简单的安全措施。实际应用中可能需要根据具体需求进行扩展,如添加借阅期限、逾期处理等功能。

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

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…