当前位置:首页 > 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实现收货功能的基本思路 收货功能通常涉及前端界面交互、后端数据更新和状态管理。在Vue中,可以通过组件化开发实现这一功能,结合API调用与状态管理工具(如Vuex或Pinia)。 创建收货按钮…

vue实现收货功能

vue实现收货功能

实现收货功能的基本思路 在Vue中实现收货功能通常涉及前端界面交互、后端API调用以及状态管理。以下是关键步骤和代码示例: 页面布局与数据绑定 使用Vue的模板语法构建收货表单,包含收货人、联系方式…

vue实现tab功能

vue实现tab功能

Vue实现Tab功能的方法 使用动态组件和v-for指令 在Vue中实现Tab功能可以通过动态组件和v-for指令结合完成。定义一个包含tab标题和对应内容的数组,使用v-for渲染tab标题,并通过…

vue实现模态功能

vue实现模态功能

Vue 实现模态框功能 方法一:使用组件和v-if/v-show控制显示 创建独立的模态框组件(如Modal.vue),通过props接收标题、内容等数据,使用v-if或v-show控制显示状态。…

vue 分页功能实现

vue 分页功能实现

分页功能实现方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。 安装 Element UI: npm in…

Vue 实现登出功能

Vue 实现登出功能

实现登出功能的方法 在Vue中实现登出功能通常涉及清除用户认证信息、重置应用状态并跳转到登录页面。以下是几种常见的实现方式: 清除本地存储的token localStorage.removeIte…