当前位置:首页 > PHP

php收藏功能实现

2026-01-28 20:57:36PHP

数据库设计

创建一个用于存储收藏信息的表,通常包含用户ID、收藏内容ID和收藏时间等字段。以下是一个简单的MySQL表结构示例:

CREATE TABLE `favorites` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_item` (`user_id`,`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

收藏功能实现

在PHP中实现收藏功能需要处理用户请求并更新数据库。以下是核心代码示例:

php收藏功能实现

// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

// 处理收藏请求
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['item_id'])) {
    $userId = $_SESSION['user_id']; // 从会话获取用户ID
    $itemId = (int)$_POST['item_id'];

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

    if ($stmt->rowCount() > 0) {
        // 取消收藏
        $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND item_id = ?")
            ->execute([$userId, $itemId]);
        echo json_encode(['status' => 'removed']);
    } else {
        // 添加收藏
        $pdo->prepare("INSERT INTO favorites (user_id, item_id) VALUES (?, ?)")
            ->execute([$userId, $itemId]);
        echo json_encode(['status' => 'added']);
    }
    exit;
}

前端交互

使用AJAX实现无刷新收藏功能:

php收藏功能实现

document.querySelectorAll('.favorite-btn').forEach(btn => {
    btn.addEventListener('click', function() {
        const itemId = this.dataset.itemId;

        fetch('/favorite.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: `item_id=${itemId}`
        })
        .then(response => response.json())
        .then(data => {
            if (data.status === 'added') {
                this.classList.add('active');
            } else {
                this.classList.remove('active');
            }
        });
    });
});

安全性考虑

实现收藏功能时需要考虑以下安全措施:

  • 验证用户登录状态
  • 对输入参数进行过滤和类型转换
  • 使用预处理语句防止SQL注入
  • 实现CSRF保护

性能优化

对于高流量网站可以考虑:

  • 添加缓存层减少数据库查询
  • 使用批量操作处理大量数据
  • 为常用查询字段建立合适索引

以上实现方案可以根据具体需求进行调整和扩展,例如添加收藏分类、收藏备注等功能。

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

相关文章

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是 Vue 功能实现的关键方法和技术。 数据绑定与响应式 Vue 的核心特性是数据绑定和响应式系统。通过 d…

vue功能实现难点

vue功能实现难点

Vue 功能实现的常见难点 响应式系统深度监听 Vue 的响应式系统基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3),但对嵌套对象或数组的深层属性变化需要额外…

php分页功能的实现

php分页功能的实现

分页功能的基本原理 分页功能的核心是通过SQL的LIMIT子句实现数据分段查询。LIMIT接受两个参数:起始位置偏移量和每页记录数。例如查询第2页(每页10条)的SQL语句为: SELECT * F…

vue实现弹窗功能

vue实现弹窗功能

实现基础弹窗组件 在Vue中创建弹窗通常需要定义一个组件,利用v-if或v-show控制显示隐藏。以下是一个基础弹窗组件的实现: <template> <div class="…

vue图片实现功能

vue图片实现功能

图片上传功能实现 使用 <input type="file"> 结合 Vue 的 v-on:change 事件监听文件选择 <template> <input ty…