当前位置:首页 > 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实现关注功能

<?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处理关注/取消关注操作,无需刷新页面:

php实现关注功能

// 关注按钮点击事件
$(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>';
}
?>

性能优化建议

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

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

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

相关文章

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('lo…

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session…