当前位置:首页 > PHP

php收藏实现

2026-01-30 00:52:34PHP

PHP 收藏功能实现方法

数据库设计

创建一个表来存储用户收藏数据,基本字段包括:

CREATE TABLE `user_favorites` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  `item_type` varchar(50) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_item` (`user_id`,`item_id`,`item_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

添加收藏功能

function addFavorite($userId, $itemId, $itemType) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $pdo->prepare("INSERT INTO user_favorites (user_id, item_id, item_type) VALUES (?, ?, ?)");
    return $stmt->execute([$userId, $itemId, $itemType]);
}

移除收藏功能

function removeFavorite($userId, $itemId, $itemType) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $pdo->prepare("DELETE FROM user_favorites WHERE user_id = ? AND item_id = ? AND item_type = ?");
    return $stmt->execute([$userId, $itemId, $itemType]);
}

检查收藏状态

function isFavorite($userId, $itemId, $itemType) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM user_favorites WHERE user_id = ? AND item_id = ? AND item_type = ?");
    $stmt->execute([$userId, $itemId, $itemType]);
    return $stmt->fetchColumn() > 0;
}

获取用户收藏列表

function getUserFavorites($userId, $itemType = null) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $sql = "SELECT item_id, item_type FROM user_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);
}

前端交互实现

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

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

    $.post('/favorite_toggle.php', {
        item_id: itemId,
        item_type: itemType
    }, function(response) {
        if(response.status === 'added') {
            $(this).addClass('active');
        } else {
            $(this).removeClass('active');
        }
    });
});

安全性考虑

实现收藏功能时需要注意:

  • 验证用户登录状态
  • 对输入参数进行过滤和验证
  • 使用预处理语句防止SQL注入
  • 限制单个用户的收藏数量

性能优化建议

对于大量收藏数据:

php收藏实现

  • 添加适当的索引
  • 考虑分页加载收藏列表
  • 实现缓存机制减少数据库查询

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

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php无限分类的实现

php无限分类的实现

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

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…