php实现收藏功能实现
数据库设计
创建数据库表存储用户收藏信息,通常需要用户ID和收藏项ID。示例表结构:
CREATE TABLE `user_favorites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`item_id` int(11) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `user_item` (`user_id`,`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
收藏功能实现
创建收藏操作的PHP处理脚本,检查是否已收藏避免重复:

// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 获取用户ID和收藏项ID
$userId = $_POST['user_id'];
$itemId = $_POST['item_id'];
// 检查是否已收藏
$stmt = $pdo->prepare("SELECT id FROM user_favorites WHERE user_id = ? AND item_id = ?");
$stmt->execute([$userId, $itemId]);
if ($stmt->rowCount() > 0) {
echo '已收藏';
} else {
// 执行收藏
$insert = $pdo->prepare("INSERT INTO user_favorites (user_id, item_id) VALUES (?, ?)");
$insert->execute([$userId, $itemId]);
echo '收藏成功';
}
取消收藏功能
添加取消收藏的处理逻辑:
$delete = $pdo->prepare("DELETE FROM user_favorites WHERE user_id = ? AND item_id = ?");
$delete->execute([$userId, $itemId]);
echo '已取消收藏';
前端交互
使用AJAX实现无刷新收藏操作:

$('.favorite-btn').click(function() {
let itemId = $(this).data('id');
$.post('/favorite.php', {
user_id: 当前用户ID,
item_id: itemId
}, function(response) {
alert(response);
});
});
安全性考虑
添加必要的安全验证:
// 验证用户登录状态
session_start();
if (!isset($_SESSION['user_id'])) {
die('请先登录');
}
// 过滤输入
$userId = filter_var($_POST['user_id'], FILTER_VALIDATE_INT);
$itemId = filter_var($_POST['item_id'], FILTER_VALIDATE_INT);
性能优化
对于高频访问的收藏数据,可以考虑使用Redis缓存:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 检查缓存
$cacheKey = "user_favorites:$userId";
if ($redis->sIsMember($cacheKey, $itemId)) {
echo '已收藏';
}






