在使用Discuz进行表单提交时,您可能会遇到如下提示:“抱歉,您的请求来路不正确或表单验证串不符,无法提交。” 这一问题会导致数据无法成功提交。
 
以下是对该问题的原因分析及解决方案的详细说明,帮助您更好地优化网站功能并提升用户体验。
 

原因分析


Discuz在处理表单提交时会调用`submitcheck()`函数进行校验。该函数的核心作用是检查表单中的`formhash`值是否正确。如果`formhash`值出现问题(例如缺失或无效),系统将返回上述错误提示。
 

解决方法


以下是几种常见的解决方法,您可以根据实际情况选择合适的方案:
 

方法一:检查表单中是否包含`formhash`


请确认提交的表单中是否已包含``字段。如果没有,请手动添加该字段。如果已经存在,但`value`为空,则可以在对应的PHP文件中加入以下代码:

$formhash = FORMHASH;
    

 

方法二:同步本地与服务器时间


请确保您的本地时间与服务器时间一致。如果时间不同步,可能会导致`formhash`验证失败。解决办法是同步时间,并更新缓存。
 

方法三:修改`helper_form.php`文件


打开`source/class/helper/helper_form.php`文件,找到`$_GET@['formhash'] == formhash()`这一行,将其修改为以下内容:

$_G['formhash'] == formhash()
    

此修改可以有效解决部分因变量来源问题导致的错误。
 

方法四:移除`submitcheck()`验证


如果您对Discuz核心代码较为熟悉,可以选择直接移除`submitcheck()`验证。例如,在注册功能中,找到`source/class/class_member.php`文件中的`register_ctl`类下的`on_register()`方法。将以下代码:

if (!submitcheck('regsubmit', 0, $seccodecheck, $secqaacheck)) {
}
    

替换为:

if (isset($_POST)) {
}
    

需要注意的是,这种方法虽然能解决问题,但会降低系统的安全性,因此不建议采用。
 

方法五:重装Discuz


如果以上方法均未能解决问题,您可以考虑重新安装Discuz。这可能是由于系统文件损坏或其他深层次问题引起的。
 

注意事项


建议尽量避免使用方法四,因为`submitcheck()`验证的存在是为了防止非法提交数据。取消该验证可能会使系统面临安全风险。
 
通过以上方法,您可以有效解决Discuz表单提交失败的问题。希望这些内容对您有所帮助!