有时候我们封了某个用户的ID并且删除了他所有的帖子,而他回过的帖子的回帖数并没有更新,导致该帖子的回帖数和实际情况不符,这时如果我们再访问这个帖子的最后一页就会出现“未定义操作”的错误。
解决的原理就是重新计算出错帖子的回帖数,然后更新cdb_threads表。
如果版主或管理员进行了修复操作,或者管理员在论坛后台重建主题帖数都可以修复这种错误,但我们不可能挨个帖子去修复,或者时刻到后台重建主题贴数。
如果当访客访问到出错的帖子,然后系统自动修复这个帖子,那么就可以发现一个自动修复一个,而访客丝毫不会收到这个错误提示的影响,闲言少叙,给出解决方案:
打开论坛安装目录里面的viewthread.php文件,搜empty($postlist),把empty($postlist)下面的一行
showmessage('undefined_action', NULL, 'HALTED');换成下面的三行
$replies = $db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE tid='$tid' AND invisible='0'") - 1;
$db->query("UPDATE {$tablepre}threads SET replies='$replies' WHERE tid='$tid'");
header("Refresh:0;url=".$_SERVER["REQUEST_URI"]."");