大张小站

  1. @八角石

    欢迎关注我的新浪微博 @八角石 !

    [ 更多详情 ]

  2. 人生

    自歌自舞自开怀,且喜无拘无碍。

  3. 心境

    若得心净如明月,长空万里了无尘。

  4. 情渊

    他生莫做有情痴,人间无地著相思。

  • 1
  • 2
  • 3
  • 4
686

Discuz! X 个人资料页“最新记录”错乱(显示别人的记录)的解决办法

分类 网站技术/村民张先生 发布于 2020-01-04 03:43
0

确认Discuz!存在一个BUG(相关讨论 https://www.discuz.net/thread-3845923-1-1.html),在某些情况下会导致个人资料页中“最新记录”显示为别人的记录。

排查过程:

1、在模板 home/space_profile_body.htm 中查找到“最新记录”的变量为 $space[spacenote] ;
2、在 source/include/space/space_profile.php 中排查到该变量由第17行的代码控制:

space_merge($space, 'field_home');

3、查找到 space_merge 函数在 source/function/function_core.php 中创建;
4、排查到“最新记录”由该函数中以下代码获得:

$_G[$var] = C::t('common_member_'.$tablename.$ext)->fetch($uid))

5、结合第2、4条,找到 source/class/table/table_common_member_field_home.php 进一步排查。

到这一步没发现任何问题,莫非问题并非出现在读取过程中?

6、进入数据库,查看 common_member_field_home 表,发现数据库中该用户的“spacenote”内容是别人发布的,证实并非是读取数据时的错误,而是写入的数据存在问题;
7、发表记录由 source/include/spacecp/spacecp_doing.php 处理,经排查暂未发现问题,不过限于时间关系未深入研究,有空的高手可以去看看。

最后怎么解决呢?

已知 $space[spacenote] 是从 common_member_field_home 表中获取的,而该表中的spacenote数据可能存在问题,那我们直接去 pre_home_doing 表中取该用户的最后一条记录就好了。修改办法:

打开 source/include/space/space_profile.php ,查找:

if($space['videophoto'] && ckvideophoto($space, 1)) {

在其前方增加一行:

if($do == 'profile') $space['spacenote'] = DB::result_first("select message from ".DB::table('home_doing')." where uid=".$space['uid']." order by doid desc");
欢迎转载分享,转载请注明 来源:大张小站 https://www.vdazhang.com/wenzhang-2252.html
若您喜欢这篇文章,欢迎订阅大张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截