确认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");
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截