php实现加入书架
实现加入书架功能
在PHP中实现加入书架功能通常涉及数据库操作和用户会话管理。以下是一个基本实现方案:
数据库设计
创建两个表:books(书籍信息)和bookmarks(书架记录):
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
author VARCHAR(100),
cover_url VARCHAR(255)
);
CREATE TABLE bookmarks (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
book_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (book_id) REFERENCES books(id)
);
用户认证检查
确保用户已登录才能执行加入书架操作:
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
添加书籍到书架
处理加入书架的POST请求:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['book_id'])) {
$bookId = (int)$_POST['book_id'];
$userId = $_SESSION['user_id'];
// 检查是否已在书架
$stmt = $pdo->prepare("SELECT id FROM bookmarks WHERE user_id = ? AND book_id = ?");
$stmt->execute([$userId, $bookId]);
if (!$stmt->fetch()) {
$insert = $pdo->prepare("INSERT INTO bookmarks (user_id, book_id) VALUES (?, ?)");
$insert->execute([$userId, $bookId]);
}
header('Location: book.php?id='.$bookId);
exit;
}
显示书架内容
获取用户的所有书架书籍:
$stmt = $pdo->prepare("
SELECT b.* FROM books b
JOIN bookmarks bm ON b.id = bm.book_id
WHERE bm.user_id = ?
ORDER BY bm.created_at DESC
");
$stmt->execute([$_SESSION['user_id']]);
$shelfBooks = $stmt->fetchAll(PDO::FETCH_ASSOC);
前端交互
在书籍页面添加加入书架按钮:

<form method="post" action="add_to_shelf.php">
<input type="hidden" name="book_id" value="<?= $book['id'] ?>">
<button type="submit">加入书架</button>
</form>
安全注意事项
- 始终使用预处理语句防止SQL注入
- 验证用户权限
- 对输出内容进行HTML转义
- 限制重复添加同一本书
扩展功能
- 添加分类标签功能
- 实现书架分组
- 添加阅读进度跟踪
- 实现多设备同步
以上实现可以根据具体需求进行调整和扩展。






