当前位置:首页 > PHP

php实现关注功能

2026-02-15 19:11:50PHP

实现关注功能的基本思路

关注功能通常涉及用户之间的互动,例如用户A关注用户B。需要设计数据库表结构、处理关注与取消关注的逻辑,并在前端展示关注状态。

数据库表设计

创建一个名为 user_follows 的表,用于存储用户之间的关注关系:

CREATE TABLE user_follows (
    follower_id INT NOT NULL,
    following_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (follower_id, following_id),
    FOREIGN KEY (follower_id) REFERENCES users(id),
    FOREIGN KEY (following_id) REFERENCES users(id)
);
  • follower_id:关注者的用户ID
  • following_id:被关注者的用户ID
  • created_at:关注时间

关注操作实现

在PHP中处理关注请求,检查是否已关注,若未关注则插入记录:

<?php
// 假设用户已登录,当前用户ID存储在 $_SESSION['user_id']
$followerId = $_SESSION['user_id'];
$followingId = $_POST['following_id']; // 从表单或AJAX请求获取

// 检查是否已关注
$stmt = $pdo->prepare("SELECT COUNT(*) FROM user_follows WHERE follower_id = ? AND following_id = ?");
$stmt->execute([$followerId, $followingId]);
$isFollowing = $stmt->fetchColumn();

if (!$isFollowing) {
    // 执行关注操作
    $stmt = $pdo->prepare("INSERT INTO user_follows (follower_id, following_id) VALUES (?, ?)");
    $stmt->execute([$followerId, $followingId]);
    echo "关注成功";
} else {
    echo "已关注";
}
?>

取消关注操作实现

处理取消关注请求,删除对应的关注记录:

<?php
$followerId = $_SESSION['user_id'];
$followingId = $_POST['following_id'];

// 执行取消关注操作
$stmt = $pdo->prepare("DELETE FROM user_follows WHERE follower_id = ? AND following_id = ?");
$stmt->execute([$followerId, $followingId]);

if ($stmt->rowCount() > 0) {
    echo "取消关注成功";
} else {
    echo "未关注该用户";
}
?>

检查关注状态

在页面加载时检查当前用户是否已关注目标用户:

<?php
$followerId = $_SESSION['user_id'];
$followingId = $targetUserId; // 要查看的用户ID

$stmt = $pdo->prepare("SELECT COUNT(*) FROM user_follows WHERE follower_id = ? AND following_id = ?");
$stmt->execute([$followerId, $followingId]);
$isFollowing = $stmt->fetchColumn();

if ($isFollowing) {
    echo '<button class="unfollow-btn" data-user-id="'.$followingId.'">已关注</button>';
} else {
    echo '<button class="follow-btn" data-user-id="'.$followingId.'">关注</button>';
}
?>

前端交互实现

使用AJAX处理关注/取消关注操作,无需刷新页面:

// 关注按钮点击事件
$(document).on('click', '.follow-btn', function() {
    const userId = $(this).data('user-id');

    $.post('follow.php', { following_id: userId }, function(response) {
        if (response === "关注成功") {
            $(this).text('已关注').removeClass('follow-btn').addClass('unfollow-btn');
        }
    });
});

// 取消关注按钮点击事件
$(document).on('click', '.unfollow-btn', function() {
    const userId = $(this).data('user-id');

    $.post('unfollow.php', { following_id: userId }, function(response) {
        if (response === "取消关注成功") {
            $(this).text('关注').removeClass('unfollow-btn').addClass('follow-btn');
        }
    });
});

获取关注列表

查询某个用户的关注列表(他关注的人):

<?php
$userId = $_GET['user_id']; // 要查询的用户ID

$stmt = $pdo->prepare("
    SELECT u.id, u.username, u.avatar 
    FROM user_follows f
    JOIN users u ON f.following_id = u.id
    WHERE f.follower_id = ?
");
$stmt->execute([$userId]);
$followingList = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($followingList as $user) {
    echo '<div class="user-item">';
    echo '<img src="'.$user['avatar'].'" alt="'.$user['username'].'">';
    echo '<span>'.$user['username'].'</span>';
    echo '</div>';
}
?>

获取粉丝列表

查询某个用户的粉丝列表(关注他的人):

<?php
$userId = $_GET['user_id'];

$stmt = $pdo->prepare("
    SELECT u.id, u.username, u.avatar 
    FROM user_follows f
    JOIN users u ON f.follower_id = u.id
    WHERE f.following_id = ?
");
$stmt->execute([$userId]);
$followerList = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($followerList as $user) {
    echo '<div class="user-item">';
    echo '<img src="'.$user['avatar'].'" alt="'.$user['username'].'">';
    echo '<span>'.$user['username'].'</span>';
    echo '</div>';
}
?>

性能优化建议

对于大型社交平台,关注功能可能需要考虑以下优化:

php实现关注功能

使用缓存存储用户的关注关系,减少数据库查询 对关注/取消关注操作实现队列处理,避免高并发时数据库压力过大 考虑使用Redis等内存数据库存储活跃用户的关注关系 实现分页查询关注列表和粉丝列表,避免一次性加载大量数据

标签: 功能php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

原生实现vue功能

原生实现vue功能

原生 JavaScript 实现 Vue 核心功能 使用原生 JavaScript 模拟 Vue 的核心功能(如数据绑定、虚拟 DOM、响应式更新等),可以通过以下方式实现: 数据响应式系统 通过…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

vue实现粘贴功能

vue实现粘贴功能

实现粘贴功能的基本方法 在Vue中实现粘贴功能通常涉及监听paste事件,并处理剪贴板数据。以下是一个基础实现示例: <template> <div @paste="handl…