当前位置:首页 > 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 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…