当前位置:首页 > 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实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现的进度条

php实现的进度条

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

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…

php实现多态

php实现多态

多态的概念 多态是面向对象编程的三大特性之一,指同一个方法在不同类中有不同实现方式。PHP通过继承和接口实现多态。 通过继承实现多态 父类定义方法,子类重写该方法实现不同行为: class…