排查思路:从外到内,从易到难
请按照以下顺序逐一检查,大部分问题都能在这一过程中找到原因。

(图片来源网络,侵删)
第一步:检查最常见的前端问题
这是最容易出问题的地方,也是首先需要检查的地方。
-
检查表单的
action属性是否正确- 问题:表单的
action属性必须指向自定义表单的提交处理页面,这个页面的路径是固定的,通常是/plus/diy.php。 - 检查方法:在浏览器中右键点击你的表单,选择“检查”或“审查元素”,找到
<form>标签,查看action属性的值。 - 正确示例:
<form action="/plus/diy.php" method="post" enctype="multipart/form-data"> <!-- 你的表单内容 --> </form> - 错误示例:
action="index.php"或action="#"或action="javascript:void(0)",这些都会导致提交失败。
- 问题:表单的
-
检查表单字段
name是否与后台设置一致- 问题:表单中每个输入框(
<input>,<textarea>,<select>)的name属性值,必须与你在DedeCMS后台“自定义表单管理”中添加的字段名完全一致(包括大小写和特殊字符)。 - 检查方法:
- 进入DedeCMS后台 -> 核心 -> 内容模型管理 -> 自定义表单。
- 找到你创建的表单,点击“管理表单字段”。
- 记录下所有字段的“字段名”。
- 回到你的前台页面代码,检查每个表单元素的
name属性是否与后台记录的字段名完全一致。
- 正确示例:
- 后台添加字段:
name="myname",name="mytel",name="myemail" - 前台代码:
<input type="text" name="myname" placeholder="请输入您的姓名"> <input type="text" name="mytel" placeholder="请输入您的电话"> <input type="text" name="myemail" placeholder="请输入您的邮箱">
- 后台添加字段:
- 问题:表单中每个输入框(
-
检查是否有隐藏的必填字段
(图片来源网络,侵删)- 问题:在后台自定义表单中,你可以设置某个字段为“必填”,即使这个字段在前台不显示(比如隐藏的
input),提交时也必须有值,否则会失败。 - 检查方法:再次进入后台“自定义表单管理”,检查每个字段的“是否必填”选项,如果是必填,确保前台表单中有对应的
name且用户可以填写,或者你通过JS为其赋了值。
- 问题:在后台自定义表单中,你可以设置某个字段为“必填”,即使这个字段在前台不显示(比如隐藏的
-
检查
enctype="multipart/form-data"属性- 问题:如果你的表单包含文件上传字段(
<input type="file">),<form>标签必须包含enctype="multipart/form-data"属性,如果没有,文件将无法上传,可能导致整个提交失败。 - 检查方法:查看你的
<form>
- 问题:如果你的表单包含文件上传字段(
第二步:检查后端和服务器问题
如果前端代码没问题,那么问题很可能出在服务器或DedeCMS的配置上。
-
检查目录权限
- 这是最最最常见的服务器原因!
- 问题:
/plus/diy.php文件在处理提交时,需要将数据写入到/data/目录下的一个.txt文件中。/data/目录的权限不正确,PHP没有写入权限,提交就会失败,通常会跳转到空白页或提示错误。 - 解决方案:
- 通过FTP工具:登录你的FTP,右键点击
/data/目录,将其权限设置为 755 或 777。(注意:777权限有安全风险,解决后建议改回755,如果755不行,再尝试777)。 - 通过主机控制面板:在文件管理器中找到
/data/目录,修改其权限为 755 或 777。
- 通过FTP工具:登录你的FTP,右键点击
-
检查
safe_gdopen配置
(图片来源网络,侵删)- 问题:DedeCMS出于安全考虑,默认会检查一些关键函数是否被禁用。
safe_gdopen相关的函数被禁用,也会导致自定义表单提交失败。 - 解决方案:
- 登录你的服务器/虚拟主机控制面板。
- 找到 PHP配置 或 php.ini设置。
- 搜索
disable_functions这一项。 - 检查列表中是否包含
fsockopen,pfsockopen,curl_exec,curl_multi_exec等函数,如果包含,将它们从禁用列表中删除或注释掉(在前面加上分号 )。 - 保存配置并重启PHP服务。
- 问题:DedeCMS出于安全考虑,默认会检查一些关键函数是否被禁用。
-
检查
diy.php文件是否存在- 问题:虽然不常见,但可能因为误操作或服务器迁移导致
/plus/diy.php文件丢失。 - 检查方法:通过FTP登录你的网站根目录,检查
/plus/文件夹下是否存在diy.php文件,如果不存在,从DedeCMS的官方安装包中复制一个过来。
- 问题:虽然不常见,但可能因为误操作或服务器迁移导致
-
检查JS冲突
- 问题:网站使用的某些JavaScript库(如jQuery)或插件可能与DedeCMS内置的JS代码冲突,导致表单提交的JS事件无法正常触发。
- 检查方法:
- 临时禁用法:在浏览器开发者工具中,临时禁用网站加载的所有JS文件,然后再次尝试提交,如果可以提交了,说明就是JS冲突。
- 排查法:逐个禁用你网站上非核心的JS插件或脚本,找到是哪个脚本引起的冲突,然后修改该脚本或寻找替代方案。
第三步:检查DedeCMS后台设置
-
检查自定义表单的状态
- 问题:在后台创建的自定义表单,可能被设置为“未审核”或“禁用”状态。
- 解决方案:进入后台 -> 核心 -> 内容模型管理 -> 自定义表单,找到你的表单,点击“管理”,确保其状态是“启用”。
-
检查是否开启了验证码
- 问题:如果表单开启了验证码,但前台没有显示验证码图片,或者用户输入错误,提交也会失败。
- 检查方法:
- 在后台自定义表单中检查是否启用了验证码。
- 回到前台页面,确保代码中有验证码输入框和图片:
<img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" id="validateimg" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" title="看不清?点击换一张" /> <input type="text" name="vdcode" /> - 注意:DedeCMS默认的验证码功能在新版本中可能存在问题,如果确认是验证码问题,可以尝试暂时关闭它来测试。
终极调试方案:开启错误提示
如果以上所有方法都试过了还是不行,最直接的办法就是让服务器告诉你哪里出错了。
-
修改
diy.php文件:- 通过FTP找到
/plus/diy.php文件。 - 在文件最开头,找到类似这样的代码:
// if(!empty($dede_fields)) // { // $insertid = $dsql->ExecuteNoneQuery($query); // if($insertid > 0) // { // ShowMsg('发布成功!', $goto); // exit(); // } // else // { // ShowMsg('发布失败,请检查资料是否有误!', $goto); // exit(); // } // } - 将其前面的注释符 去掉,变成:
if(!empty($dede_fields)) { $insertid = $dsql->ExecuteNoneQuery($query); if($insertid > 0) { ShowMsg('发布成功!', $goto); exit(); } else { ShowMsg('发布失败,请检查资料是否有误!', $goto); exit(); } } - 保存文件并上传。
- 再次提交表单,此时页面会显示具体的错误信息,字段不存在”、“权限不足”等,根据这个错误信息再去针对性解决。
- 通过FTP找到
-
检查PHP错误日志:
联系你的主机服务商,询问如何查看网站的PHP错误日志,日志里会记录最精确的错误原因,是解决疑难杂症的终极武器。
总结与快速检查清单
| 检查项 | 解决方案 | |
|---|---|---|
| 前端代码 | <form action="/plus/diy.php"> 是否正确?表单元素 name 是否与后台字段名一致?是否有隐藏的必填字段没处理? 有文件上传吗? enctype 属性加了吗? |
修正HTML代码,确保前后端字段名匹配。 |
| 服务器权限 | /data/ 目录权限是否为 755 或 777? |
通过FTP或主机面板修改 /data/ 目录权限。 |
| PHP配置 | disable_functions 是否禁用了 fsockopen, curl_exec 等函数? |
在主机后台的PHP配置中,解除相关函数的禁用。 |
| 后台设置 | 自定义表单是否已“启用”? | 在后台检查并启用表单。 |
| JS冲突 | 提交按钮的JS事件是否被其他脚本阻止? | 临时禁用JS测试,并排查冲突脚本。 |
| 终极调试 | 修改 diy.php,开启错误提示。 |
取消 diy.php 中相关代码的注释,查看具体错误信息。 |
按照这个流程走一遍,99%的Dede自定义表单提交问题都能得到解决,祝你成功!
