当前位置:首页 > PHP

php 实现收藏功能

2026-02-15 17:13:15PHP

实现收藏功能的基本思路

收藏功能通常涉及用户与内容的交互,需要数据库存储用户ID和内容ID的关联关系。以下是PHP实现收藏功能的常见方法。

数据库设计

创建收藏表favorites,包含用户ID和内容ID字段:

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,
    UNIQUE KEY unique_favorite (user_id, content_id)
);

收藏功能实现

建立数据库连接文件db_connect.php

<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}
?>

添加收藏功能

创建add_favorite.php处理收藏请求:

<?php
require 'db_connect.php';

session_start();
if (!isset($_SESSION['user_id'])) {
    die('User not logged in');
}

$userId = $_SESSION['user_id'];
$contentId = $_POST['content_id'];

try {
    $stmt = $pdo->prepare("INSERT INTO favorites (user_id, content_id) VALUES (?, ?)");
    $stmt->execute([$userId, $contentId]);
    echo 'Added to favorites';
} catch (PDOException $e) {
    if ($e->errorInfo[1] == 1062) {
        echo 'Already in favorites';
    } else {
        echo 'Error: ' . $e->getMessage();
    }
}
?>

移除收藏功能

创建remove_favorite.php处理取消收藏:

<?php
require 'db_connect.php';

session_start();
if (!isset($_SESSION['user_id'])) {
    die('User not logged in');
}

$userId = $_SESSION['user_id'];
$contentId = $_POST['content_id'];

try {
    $stmt = $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND content_id = ?");
    $stmt->execute([$userId, $contentId]);
    echo $stmt->rowCount() > 0 ? 'Removed from favorites' : 'Not in favorites';
} catch (PDOException $e) {
    echo 'Error: ' . $e->getMessage();
}
?>

检查收藏状态

创建check_favorite.php检查收藏状态:

<?php
require 'db_connect.php';

session_start();
if (!isset($_SESSION['user_id'])) {
    die('User not logged in');
}

$userId = $_SESSION['user_id'];
$contentId = $_GET['content_id'];

$stmt = $pdo->prepare("SELECT COUNT(*) FROM favorites WHERE user_id = ? AND content_id = ?");
$stmt->execute([$userId, $contentId]);
$isFavorite = $stmt->fetchColumn() > 0;

echo json_encode(['is_favorite' => $isFavorite]);
?>

前端交互实现

HTML和JavaScript示例:

<button id="favorite-btn" data-content-id="123">Add to Favorites</button>

<script>
document.getElementById('favorite-btn').addEventListener('click', function() {
    const contentId = this.getAttribute('data-content-id');
    const isFavorite = this.textContent.includes('Remove');

    fetch(isFavorite ? 'remove_favorite.php' : 'add_favorite.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: `content_id=${contentId}`
    })
    .then(response => response.text())
    .then(result => {
        this.textContent = isFavorite ? 'Add to Favorites' : 'Remove from Favorites';
    });
});
</script>

获取用户收藏列表

创建get_favorites.php获取用户收藏:

<?php
require 'db_connect.php';

session_start();
if (!isset($_SESSION['user_id'])) {
    die('User not logged in');
}

$userId = $_SESSION['user_id'];

$stmt = $pdo->prepare("SELECT content_id FROM favorites WHERE user_id = ?");
$stmt->execute([$userId]);
$favorites = $stmt->fetchAll(PDO::FETCH_COLUMN);

echo json_encode($favorites);
?>

安全注意事项

验证用户输入防止SQL注入:

$contentId = filter_input(INPUT_POST, 'content_id', FILTER_VALIDATE_INT);
if (!$contentId) {
    die('Invalid content ID');
}

实现收藏功能时,确保用户认证和输入验证到位,防止未授权访问和数据篡改。

php 实现收藏功能

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

相关文章

vue实现收货功能

vue实现收货功能

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

前端vue登录功能实现

前端vue登录功能实现

登录功能实现步骤 在Vue中实现登录功能通常需要结合后端API,以下是关键步骤和代码示例: 创建登录表单组件 <template> <div> <form…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

vue实现收货功能

vue实现收货功能

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

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…

vue实现轨道功能

vue实现轨道功能

Vue 实现轨道功能的方法 轨道功能通常指在界面中实现元素沿特定路径移动的效果,例如进度条、时间轴或动画轨迹。以下是几种常见的实现方式: 使用 CSS 动画与 Vue 结合 通过 Vue 动态绑…