当前位置:首页 > PHP

php实现加入书架

2026-02-15 09:41:51PHP

实现加入书架功能

在PHP中实现加入书架功能通常涉及数据库操作和用户会话管理。以下是实现这一功能的关键步骤:

数据库设计

创建用户表users和书籍表books,并建立关联表user_bookshelf存储用户收藏的书籍:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL
);

CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    author VARCHAR(50) NOT NULL
);

CREATE TABLE user_bookshelf (
    user_id INT NOT NULL,
    book_id INT NOT NULL,
    added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id, book_id),
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (book_id) REFERENCES books(id)
);

用户认证检查

在加入书架前需要验证用户是否已登录:

php实现加入书架

session_start();
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit();
}

处理加入书架请求

创建处理加入书架的PHP脚本add_to_bookshelf.php

<?php
session_start();
require 'db_connection.php'; // 数据库连接文件

if (!isset($_SESSION['user_id'])) {
    echo json_encode(['success' => false, 'message' => '请先登录']);
    exit();
}

if (isset($_POST['book_id'])) {
    $userId = $_SESSION['user_id'];
    $bookId = $_POST['book_id'];

    // 检查是否已加入书架
    $checkSql = "SELECT * FROM user_bookshelf WHERE user_id = ? AND book_id = ?";
    $stmt = $conn->prepare($checkSql);
    $stmt->bind_param("ii", $userId, $bookId);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        echo json_encode(['success' => false, 'message' => '该书已在书架中']);
        exit();
    }

    // 加入书架
    $insertSql = "INSERT INTO user_bookshelf (user_id, book_id) VALUES (?, ?)";
    $stmt = $conn->prepare($insertSql);
    $stmt->bind_param("ii", $userId, $bookId);

    if ($stmt->execute()) {
        echo json_encode(['success' => true, 'message' => '成功加入书架']);
    } else {
        echo json_encode(['success' => false, 'message' => '加入书架失败']);
    }
} else {
    echo json_encode(['success' => false, 'message' => '无效请求']);
}
?>

前端交互实现

在书籍详情页添加加入书架的按钮,并使用AJAX发送请求:

php实现加入书架

<button id="addToBookshelf" data-book-id="123">加入书架</button>

<script>
document.getElementById('addToBookshelf').addEventListener('click', function() {
    const bookId = this.getAttribute('data-book-id');

    fetch('add_to_bookshelf.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: 'book_id=' + bookId
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            alert(data.message);
        } else {
            alert(data.message);
        }
    });
});
</script>

书架页面展示

创建展示用户书架的页面bookshelf.php

<?php
session_start();
require 'db_connection.php';

if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit();
}

$userId = $_SESSION['user_id'];
$sql = "SELECT b.id, b.title, b.author FROM books b 
        JOIN user_bookshelf ub ON b.id = ub.book_id 
        WHERE ub.user_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $userId);
$stmt->execute();
$books = $stmt->get_result();
?>

<!DOCTYPE html>
<html>
<head>
    <title>我的书架</title>
</head>
<body>
    <h1>我的书架</h1>
    <ul>
        <?php while ($book = $books->fetch_assoc()): ?>
        <li>
            <?= htmlspecialchars($book['title']) ?> - 
            <?= htmlspecialchars($book['author']) ?>
        </li>
        <?php endwhile; ?>
    </ul>
</body>
</html>

移除书架功能

添加从书架移除书籍的功能:

// remove_from_bookshelf.php
session_start();
require 'db_connection.php';

if (!isset($_SESSION['user_id'])) {
    echo json_encode(['success' => false, 'message' => '请先登录']);
    exit();
}

if (isset($_POST['book_id'])) {
    $userId = $_SESSION['user_id'];
    $bookId = $_POST['book_id'];

    $sql = "DELETE FROM user_bookshelf WHERE user_id = ? AND book_id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ii", $userId, $bookId);

    if ($stmt->execute()) {
        echo json_encode(['success' => true, 'message' => '已从书架移除']);
    } else {
        echo json_encode(['success' => false, 'message' => '移除失败']);
    }
}

以上实现涵盖了加入书架功能的核心要素,包括数据库设计、用户认证、前后端交互和书架管理功能。根据实际需求可以进一步扩展功能,如添加分类、阅读进度跟踪等。

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

相关文章

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现多态

php实现多态

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