You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

社交网站探索页Bug排查:按unfollowed字段筛选帖子异常

解决探索页面帖子屏蔽逻辑的Bug

看起来你这段代码的问题出在几个关键的逻辑错误上,我来一步步拆解并修复:

问题根源分析

  • 查询字段完全错误:你要找的是被当前用户屏蔽的用户(也就是user_to,因为user_from是当前登录用户),但你的查询却选了user_from,结果拿到的全是当前用户自己的ID。
  • 循环覆盖变量:你在循环里每次把$user_following替换成当前行的user_from,最后这个变量只会保留最后一条记录的值——也就是你自己的ID。
  • 错误的条件判断:最后你拿$userLoggedIn和$user_following(也就是你自己)比较,结果永远为真,直接触发die('No explore posts to show.'),这就是为什么只要有一条相关记录,页面就完全不显示帖子。

修复后的代码实现

首先,我们要先收集所有被当前用户屏蔽的用户ID,然后在查询帖子时排除这些用户的内容:

// 1. 获取所有被当前用户屏蔽的用户ID(unfollowed=0的user_to)
$blocked_users = [];
$blocked_query = $con->prepare('SELECT user_to FROM following WHERE user_from = ? AND unfollowed = 0');
$blocked_query->bind_param("s", $userLoggedIn);
$blocked_query->execute();
$result = $blocked_query->get_result();

while ($row = $result->fetch_assoc()) {
    $blocked_users[] = $row['user_to'];
}
$blocked_query->close();

// 2. 构建帖子查询语句,排除被屏蔽用户的内容
$posts_query = "SELECT * FROM posts WHERE 1=1";
if (!empty($blocked_users)) {
    // 把数组转成逗号分隔的字符串,同时处理SQL注入风险
    $blocked_ids = implode(',', array_map(function($id) use ($con) {
        return $con->real_escape_string($id);
    }, $blocked_users));
    $posts_query .= " AND user_id NOT IN ($blocked_ids)";
}

// 执行帖子查询
$posts_result = $con->query($posts_query);

// 3. 渲染帖子或无内容提示
if ($posts_result->num_rows === 0) {
    echo 'No explore posts to show.';
} else {
    while ($post = $posts_result->fetch_assoc()) {
        // 这里替换成你的帖子渲染逻辑
        echo "<div class='post-item'>{$post['content']}</div>";
    }
}

逻辑说明

  • 先从following表中获取所有当前用户标记为unfollowed=0的user_to(被屏蔽用户),存入数组。
  • 查询帖子时,如果有被屏蔽用户,就用NOT IN排除这些用户的内容;如果没有被屏蔽用户,就正常查询所有帖子。
  • 最后根据帖子查询结果判断是否显示“无帖子”提示,替代了原来错误的用户ID比较逻辑。

这样就能完美实现你的需求:

  • 当存在user_from=$userLoggedIn且unfollowed=0的记录时,屏蔽对应user_to的帖子;
  • 当unfollowed=1或无对应记录时,正常显示帖子。

内容的提问来源于stack exchange,提问作者Brandon T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:22:35