当前位置:首页 > PHP

php实现收藏功能实现

2026-03-13 00:50:25PHP

实现收藏功能的基本思路

收藏功能通常涉及用户与内容的交互,需要数据库存储用户ID和收藏内容的ID。核心逻辑包括添加收藏、取消收藏、检查是否已收藏以及展示收藏列表。

数据库设计

创建收藏表(favorites)的基本结构:

CREATE TABLE favorites (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    item_id INT NOT NULL,
    item_type VARCHAR(50) NOT NULL, -- 如'article','product'等
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY user_item_unique (user_id, item_id, item_type)
);

添加收藏

通过PHP处理前端AJAX请求,插入收藏记录:

// add_favorite.php
$userId = $_SESSION['user_id'];
$itemId = $_POST['item_id'];
$itemType = $_POST['item_type'];

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

if ($stmt->rowCount() > 0) {
    echo json_encode(['status' => 'error', 'message' => '已收藏']);
    exit;
}

// 添加收藏
$insertSql = "INSERT INTO favorites (user_id, item_id, item_type) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($insertSql);
$stmt->execute([$userId, $itemId, $itemType]);

echo json_encode(['status' => 'success']);

取消收藏

删除对应的收藏记录:

// remove_favorite.php
$userId = $_SESSION['user_id'];
$itemId = $_POST['item_id'];
$itemType = $_POST['item_type'];

$deleteSql = "DELETE FROM favorites WHERE user_id = ? AND item_id = ? AND item_type = ?";
$stmt = $pdo->prepare($deleteSql);
$stmt->execute([$userId, $itemId, $itemType]);

echo json_encode(['status' => 'success']);

检查收藏状态

判断用户是否已收藏某内容:

function isFavorited($userId, $itemId, $itemType) {
    global $pdo;
    $sql = "SELECT id FROM favorites WHERE user_id = ? AND item_id = ? AND item_type = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$userId, $itemId, $itemType]);
    return $stmt->rowCount() > 0;
}

获取收藏列表

查询用户的所有收藏项:

function getUserFavorites($userId, $itemType = null) {
    global $pdo;
    $sql = "SELECT * FROM favorites WHERE user_id = ?";
    $params = [$userId];

    if ($itemType) {
        $sql .= " AND item_type = ?";
        $params[] = $itemType;
    }

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

前端交互示例

使用jQuery处理收藏按钮点击:

$('.favorite-btn').click(function() {
    const itemId = $(this).data('item-id');
    const itemType = $(this).data('item-type');
    const isFavorited = $(this).hasClass('active');

    $.post(isFavorited ? 'remove_favorite.php' : 'add_favorite.php', {
        item_id: itemId,
        item_type: itemType
    }, function(response) {
        if (response.status === 'success') {
            $(this).toggleClass('active');
        }
    }.bind(this));
});

性能优化建议

对于高频访问的收藏状态检查,可以考虑使用Redis缓存用户收藏状态。建立用户ID为key,收藏项ID集合为value的缓存结构,减少数据库查询压力。

php实现收藏功能实现

定期清理长时间未访问的缓存数据,保持缓存效率。对于收藏列表分页查询,确保SQL语句使用正确的索引以提高查询速度。

标签: 功能收藏
分享给朋友:

相关文章

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vite…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…

php实现回复功能

php实现回复功能

实现回复功能的基本步骤 在PHP中实现回复功能通常涉及数据库操作、表单处理和前后端交互。以下是实现回复功能的关键步骤: 数据库设计 创建包含回复数据的表结构,例如: CREATE TABLE re…

vue的功能实现

vue的功能实现

Vue 核心功能实现 Vue.js 是一个渐进式 JavaScript 框架,其核心功能主要包括数据绑定、组件化、虚拟 DOM 和响应式系统。以下从不同层面解析其实现原理: 响应式系统 Vue 2.…

vue实现的功能

vue实现的功能

Vue.js 的核心功能 Vue.js 是一个渐进式 JavaScript 框架,专注于构建用户界面。其核心功能包括数据绑定、组件化开发、指令系统和状态管理,适用于从简单交互到复杂单页应用(SPA)的…

vue 实现备注功能

vue 实现备注功能

Vue 实现备注功能的方法 数据绑定与基础表单 在 Vue 中实现备注功能,可以通过 v-model 实现双向数据绑定。创建一个文本输入框或文本域,绑定到组件的 data 属性: <templ…