当前位置:首页 > 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实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…