当前位置:首页 > 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'];
}

移除收藏

提供移除收藏的功能:

php实现收藏

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实现无刷新收藏操作:

php实现收藏

$('.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;
}

性能优化

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

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
分享给朋友:

相关文章

vue 实现收藏功能

vue 实现收藏功能

实现收藏功能的基本思路 在Vue中实现收藏功能通常涉及前端交互与后端数据存储的结合。核心逻辑包括:用户点击收藏按钮时切换状态,并通过API将状态同步到后端数据库。 前端组件实现 创建收藏按钮组件,…

vue实现收藏

vue实现收藏

实现收藏功能的步骤 在Vue中实现收藏功能通常需要结合前端交互和后端数据存储。以下是常见的实现方法: 前端交互实现 创建一个响应式的isFavorited状态来跟踪收藏状态: data() {…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现websocket

php实现websocket

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

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…