php收藏实现
实现PHP收藏功能的方法
PHP收藏功能的实现通常涉及数据库操作、用户认证和前端交互。以下是几种常见的实现方式:
数据库设计
创建收藏表需要包含用户ID和收藏内容ID的关联关系。典型表结构如下:
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)
);
添加收藏功能
通过AJAX或表单提交处理收藏请求:

// 收藏处理脚本
session_start();
if(isset($_SESSION['user_id']) && isset($_POST['item_id'])){
$userId = $_SESSION['user_id'];
$itemId = $_POST['item_id'];
// 检查是否已收藏
$checkSql = "SELECT id FROM favorites WHERE user_id = ? AND item_id = ?";
$stmt = $pdo->prepare($checkSql);
$stmt->execute([$userId, $itemId]);
if($stmt->rowCount() == 0){
// 添加收藏
$insertSql = "INSERT INTO favorites (user_id, item_id) VALUES (?, ?)";
$pdo->prepare($insertSql)->execute([$userId, $itemId]);
echo 'added';
} else {
// 取消收藏
$deleteSql = "DELETE FROM favorites WHERE user_id = ? AND item_id = ?";
$pdo->prepare($deleteSql)->execute([$userId, $itemId]);
echo 'removed';
}
}
显示收藏状态
在页面加载时检查收藏状态:
function isFavorite($userId, $itemId, $pdo){
$sql = "SELECT id FROM favorites WHERE user_id = ? AND item_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId, $itemId]);
return $stmt->rowCount() > 0;
}
前端交互实现
使用jQuery处理收藏按钮点击:

$('.favorite-btn').click(function(){
let itemId = $(this).data('item-id');
$.post('/favorite.php', {item_id: itemId}, function(response){
if(response == 'added'){
$(this).addClass('active');
} else {
$(this).removeClass('active');
}
});
});
批量获取用户收藏
获取用户所有收藏项:
function getUserFavorites($userId, $pdo){
$sql = "SELECT i.* FROM items i
JOIN favorites f ON i.id = f.item_id
WHERE f.user_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
性能优化建议
对于高流量网站,考虑以下优化措施:
- 在favorites表上创建复合索引(user_id, item_id)
- 实现缓存机制存储用户收藏状态
- 对频繁访问的收藏列表使用分页加载
这些方法可以根据具体需求进行调整和组合,实现适合不同场景的收藏功能。






