当前位置:首页 > PHP

php实现借阅图书

2026-02-15 06:45:43PHP

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

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

php实现借阅图书

数据库表结构

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

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 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借阅表单:

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

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

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

相关文章

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面…

php无限分类的实现

php无限分类的实现

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

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost…