php实现收藏
实现收藏功能的基本思路
在PHP中实现收藏功能通常涉及数据库操作和用户交互。核心步骤包括创建数据库表、处理用户请求、更新收藏状态以及显示收藏结果。
数据库设计
创建一张favorites表存储收藏关系,基本字段应包括:
CREATE TABLE favorites (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
item_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
收藏/取消收藏处理
创建处理收藏动作的PHP脚本(如favorite.php):

<?php
session_start();
require 'db_connect.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$userId = $_SESSION['user_id'];
$itemId = $_POST['item_id'];
$action = $_POST['action'];
if ($action === 'favorite') {
$stmt = $pdo->prepare("INSERT INTO favorites (user_id, item_id) VALUES (?, ?)");
$stmt->execute([$userId, $itemId]);
} elseif ($action === 'unfavorite') {
$stmt = $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND item_id = ?");
$stmt->execute([$userId, $itemId]);
}
header("Location: item.php?id=$itemId");
exit();
}
?>
前端交互实现
在项目页面添加收藏按钮,通过AJAX或表单提交处理:
<form method="post" action="favorite.php">
<input type="hidden" name="item_id" value="<?= $itemId ?>">
<input type="hidden" name="action" value="<?= $isFavorited ? 'unfavorite' : 'favorite' ?>">
<button type="submit">
<?= $isFavorited ? '取消收藏' : '收藏' ?>
</button>
</form>
检查收藏状态
在显示项目时检查当前用户是否已收藏:

function isFavorited($userId, $itemId) {
global $pdo;
$stmt = $pdo->prepare("SELECT COUNT(*) FROM favorites WHERE user_id = ? AND item_id = ?");
$stmt->execute([$userId, $itemId]);
return $stmt->fetchColumn() > 0;
}
用户收藏列表
显示用户的所有收藏项目:
function getUserFavorites($userId) {
global $pdo;
$stmt = $pdo->prepare("SELECT items.* FROM items JOIN favorites ON items.id = favorites.item_id WHERE favorites.user_id = ?");
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
安全注意事项
实现收藏功能时应考虑:
- 验证用户登录状态
- 防止SQL注入(使用预处理语句)
- 验证项目是否存在
- 处理重复收藏情况
- 考虑添加索引提高查询效率
通过以上步骤可以实现基本的收藏功能,可根据具体需求扩展更多特性如收藏分类、批量操作等。






