当前位置:首页 > PHP

php实现收藏

2026-01-29 11:19:03PHP

PHP实现收藏功能

数据库设计

创建收藏表需要包含用户ID和内容ID,确保用户只能收藏一次同一内容。示例SQL语句:

CREATE TABLE favorites (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    content_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (content_id) REFERENCES contents(id),
    UNIQUE KEY unique_favorite (user_id, content_id)
);

添加收藏

处理用户请求添加收藏的逻辑,检查是否已收藏:

function addFavorite($userId, $contentId) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

    // 检查是否已收藏
    $stmt = $pdo->prepare("SELECT id FROM favorites WHERE user_id = ? AND content_id = ?");
    $stmt->execute([$userId, $contentId]);

    if ($stmt->fetch()) {
        return ['status' => 'error', 'message' => 'Already favorited'];
    }

    // 添加收藏
    $stmt = $pdo->prepare("INSERT INTO favorites (user_id, content_id) VALUES (?, ?)");
    $stmt->execute([$userId, $contentId]);

    return ['status' => 'success', 'message' => 'Added to favorites'];
}

移除收藏

提供移除收藏的功能:

function removeFavorite($userId, $contentId) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

    $stmt = $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND content_id = ?");
    $stmt->execute([$userId, $contentId]);

    return ['status' => 'success', 'message' => 'Removed from favorites'];
}

获取用户收藏列表

查询用户的所有收藏内容:

function getUserFavorites($userId) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

    $stmt = $pdo->prepare("
        SELECT c.* 
        FROM contents c
        JOIN favorites f ON c.id = f.content_id
        WHERE f.user_id = ?
    ");
    $stmt->execute([$userId]);

    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

前端交互

使用AJAX实现无刷新收藏操作:

$('.favorite-btn').click(function() {
    const contentId = $(this).data('content-id');

    $.post('/favorite.php', { action: 'toggle', content_id: contentId }, function(response) {
        if (response.status === 'added') {
            $(this).addClass('active');
        } else {
            $(this).removeClass('active');
        }
    });
});

安全性考虑

实施CSRF保护并验证用户权限:

session_start();

function verifyUser($userId) {
    return $_SESSION['user_id'] == $userId;
}

// 在所有收藏操作函数开头添加验证
if (!verifyUser($userId)) {
    header('HTTP/1.1 403 Forbidden');
    exit;
}

性能优化

为频繁查询的收藏数据添加缓存:

php实现收藏

function getCachedFavorites($userId) {
    $cacheKey = "user_favorites_{$userId}";

    if ($cached = apc_fetch($cacheKey)) {
        return $cached;
    }

    $favorites = getUserFavorites($userId);
    apc_store($cacheKey, $favorites, 3600); // 缓存1小时

    return $favorites;
}

标签: 收藏php
分享给朋友:

相关文章

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…