discuz从X3.5升级到X5.0后发帖无反应,查看控制台显示提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”
刚升级了discuz论坛程序。过程还算顺利,帖子和会员数据正常,注册正常,
但发新帖和回复时点击提交无反应,查看控制台后可以看到提示
bbs/forum.php?mod=post&action=newthread&fid=27&extra=&topicsubmit=yes&inajax=1 503 (Service Temporarily Unavailable)
右键新标签打开后看到
提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”
尝试了后台的
更新统计,
然后跟新缓存,故障依旧。
按照网上找到的故障修复说明https://www.cnblogs.com/chongyou/p/5950127.html
出现 “抱歉,您的请求来路不正确或表单验证串不符,无法提交” 这种问题的地方都是在提交表单的时候出现的。
因为discuz 在提交表单的时候 会进行校验,submitcheck()函数,这个函数首先会校验表单中的formhash,如果formhash出现问题,那么就会出现“抱歉,您的请求来路不正确或表单验证串不符,无法提交” 这种问题。
submitcheck()这个函数 放在 source\class\helper\helper_form.php 中。
解决方法:
第一种方法:
请检查你本地的时间是否和服务器的时间一致。如果不一致请同步时间,更新缓存。---这个要设置下
第二种方法:
请检查你提交的表单中,是否有<input type="hidden" name="formhash" value="{$formhash}">,如果没有请手动添加上去。(这种情况一般会在IE6上面出现,其他浏览器正常。)
第三种方法:
打开“source\class\helper\helper_form.php”, 然后把“$_GET['formhash'] == formhash() ”修改为“$_G['formhash'] == formhash() ”。
第四种方法:
在提交的动作控制器中,去掉submitcheck()验证。 (此种方法需要对discuz的核心比较熟悉。)比如,在注册的时候,你需要找到“source\class\class_member.php”文件中register_ctl类中的on_register()方法,在if(!submitcheck('regsubmit', 0, $seccodecheck, $secqaacheck)) { }处,可以把submitcheck()换成if(isset($_POST)){ } .虽然不安全,但是也是一种解决方法。---这个方法才解决我的问题
第五种方法:
重装disucz… ----这个才治根
上面的方法对故障修复依然无效。
尝试找到了此错误提示的函数submit_invalid,对多个文件修改进行屏蔽注释,依然无效。
发现应是pre_forum_post中的数据问题。清空此数据表发帖就正常了。
但对比数据结构,没发现异常,内容则正常的可发帖字段:
content字段内容 '{"type": "", "editor": "", "extend": [], "content": "{}"}'
source字段内容 '{}'
升级后无法发布新帖子的这2个字段内容为NULL
但替换后依然发贴错误,仍在摸索中。。。
问题好像解决了,需要操作PHPMYADMIN登录数据库管理,将老数据库中的pre_forum_post_tableid表重新覆盖下。