问题根源分析
我们要明白 Dede 自定义表单的工作流程:

(图片来源网络,侵删)
- 创建表单:在后台创建一个自定义表单,并生成对应的HTML代码。
- 用户提交:用户在前台填写并提交这个表单。
- 数据入库:提交的数据会保存到数据库中一个特定的表里(通常是
dede_addonXX,XX是表单的ID)。 - 数据展示:在后台“自定义表单”管理页面,系统会从数据库中读取数据并展示出来。
“为空”的问题,通常出在 第4步,也就是说,数据可能已经成功入库了,但后台的展示逻辑出了问题。
解决方案(按可能性从高到低排序)
请按照以下顺序逐一排查,90%以上的问题都能在这里解决。
检查数据是否真的入库了(最关键的诊断步骤)
这是判断问题根源的第一步。
-
找到你的表单ID:
(图片来源网络,侵删)- 进入 DedeCMS 后台,点击【核心】->【自定义表单】。
- 在列表中找到你出问题的那个表单,查看它的“aid”(表单ID)。
-
登录数据库管理工具:
使用 phpMyAdmin 或者其他数据库管理工具登录你的网站数据库。
-
查询数据表:
- DedeCMS 自定义表单的数据通常存储在
dede_addon加上 表单ID 的表中,如果你的表单ID是10,那么数据表就是dede_addon10。 - 执行 SQL 查询:
SELECT * FROM dede_addon10;(请将addon10替换成你自己的表名)。
- DedeCMS 自定义表单的数据通常存储在
结果分析:

(图片来源网络,侵删)
-
A. 查询有结果,能看到用户提交的数据:
- 恭喜! 这说明数据是成功入库的,问题出在后台的展示逻辑上,请直接跳到 方案二 继续排查。
-
B. 查询无结果,或者表
dede_addon10根本不存在:- 这说明数据根本没有入库,问题出在用户提交的环节,请跳到 方案三 继续排查。
如果数据已入库,但后台看不到(展示问题)
这种情况最常见,通常是由于模板文件或缓存问题导致的。
检查并修复 list_template.htm 模板文件
这是最最常见的原因!自定义表单的数据列表页依赖于一个模板文件,如果这个文件损坏、丢失或路径错误,后台就必然为空。
- 文件位置:
/templets/default/list_template.htm - :
- 确认这个文件是否存在,如果不存在,从你的 DedeCMS 安装包里复制一个过来。
- 打开文件,检查里面的代码是否完整,通常它会包含一个循环
{dede:list}标签来遍历数据,一个简单的示例如下:<table width="98%" border="0" cellpadding="1" cellspacing="1" bgcolor="#BED1E0" align="center"> <tr> <td height="28" colspan="10" bgcolor="#FFFFFF" align="center"><strong>自定义表单数据列表</strong></td> </tr> <tr align="center" bgcolor="#FFFFFF"> <td width="5%">ID</td> <!-- 这里是你的表单字段名,--> <td width="15%">姓名</td> <td width="20%">邮箱</td> <td width="25%">留言内容</td> <td width="15%">提交时间</td> <td width="10%">状态</td> <td width="10%">操作</td> </tr> {dede:list} <tr align="center" bgcolor="#FFFFFF"> <td>[field:id/]</td> <!-- 这里调用你的字段值 --> <td>[field:姓名/]</td> <td>[field:邮箱/]</td> <td>[field:留言内容/]</td> <td>[field:senddate function="MyDate('Y-m-d H:i:s',@me)"/]</td> <td>[field:sta/]</td> <td> <a href="javascript:DelArc([field:id/])">删除</a> </td> </tr> {/dede:list} </table> - 特别注意:
{dede:list}标签中的[field:xxx/]的xxx必须完全一致你后台表单里定义的字段名(英文字段名)。
清理 DedeCMS 缓存
缓存有时会导致页面显示异常。
- 操作方法:进入 DedeCMS 后台,点击【系统】->【系统基本参数】->【性能选项】,点击“清除所有HTML缓存”和“清除数据缓存”,或者直接删除
/data目录下的cache和templets文件夹内的所有文件(注意:templets里除了cache还有cache_block等,可以先清空cache)。
检查文件权限
确保 DedeCMS 对 /templets/default/ 目录以及 list_template.htm 文件有读写权限,权限问题可能导致模板无法被正确加载。
如果数据根本没有入库(提交问题)
如果按照方案一的步骤,数据库里没有数据,那么问题就出在用户提交的环节。
检查前台表单页的 action 和 dede:form
这是最常见的原因,用户提交的表单数据需要通过 Dede 的标签发送到正确的处理页面。
- 错误示例:
<form action="#" method="post"> <!-- 错误:action="#" 或 "javascript:void(0)" -->
...
</form>
- 正确写法:必须使用 Dede 的
{dede:form} 标签,它会自动生成正确的 action 地址。{dede:form name='myform'}
<input type="text" name="name" placeholder="请输入姓名">
<input type="text" name="email" placeholder="请输入邮箱">
<textarea name="content" placeholder="请输入留言"></textarea>
<button type="submit">提交</button>
{/dede:form}
name='myform' 这个 name 值必须和你后台创建的自定义表单的名称完全一致。
检查字段名是否正确
- 确保前台表单中
input, textarea, select 等标签的 name 属性值,与你后台自定义表单中定义的字段名完全一致(区分大小写)。
检查是否有 JS 提交冲突
检查你的表单页面是否被其他 JavaScript 代码(如 jQuery 插件)拦截或修改了表单的提交行为,尝试暂时移除所有 JS 代码,看表单是否能正常提交。
检查服务器环境
- PHP 错误:查看服务器 PHP 的错误日志,看看在提交时是否有
Fatal Error 或 Warning,这通常是 PHP 版本过低或缺少某个 PHP 扩展(如 mysqli)导致的。
- 安全软件拦截:部分服务器或虚拟主机有安全设置,可能会拦截对
dede/archives_do.php 或类似处理脚本的 POST 请求,可以联系主机商确认。
总结与排查清单
遇到“自定义表单为空”的问题,请按以下清单操作:
- 【诊断】 登录数据库,查询
dede_addon[你的表单ID] 表。
- 有数据? -> 去 方案二。
- 没数据? -> 去 方案三。
- 【方案二】数据已入库但后台看不到:
- 首要任务:检查
/templets/default/list_template.htm 文件是否存在且代码正确。
- 次要操作:清理 DedeCMS 缓存。
- 最后检查:确认文件权限。
- 【方案三】数据没有入库:
- 首要任务:检查前台表单是否使用了
{dede:form} 标签,且 name 值正确。
- 次要操作:检查所有表单控件的
name 属性是否与后台字段名一致。
- 最后检查:排查 JS 冲突和服务器环境问题。
按照这个流程,你基本上可以定位并解决绝大多数自定义表单为空的问题,如果以上所有方法都无效,那很可能是你的 DedeCMS 程序文件在某个环节被意外修改或损坏了,可以考虑重新覆盖核心程序文件。
这是最常见的原因,用户提交的表单数据需要通过 Dede 的标签发送到正确的处理页面。
- 错误示例:
<form action="#" method="post"> <!-- 错误:action="#" 或 "javascript:void(0)" --> ... </form> - 正确写法:必须使用 Dede 的
{dede:form}标签,它会自动生成正确的action地址。{dede:form name='myform'} <input type="text" name="name" placeholder="请输入姓名"> <input type="text" name="email" placeholder="请输入邮箱"> <textarea name="content" placeholder="请输入留言"></textarea> <button type="submit">提交</button> {/dede:form}name='myform'这个name值必须和你后台创建的自定义表单的名称完全一致。
检查字段名是否正确
- 确保前台表单中
input,textarea,select等标签的name属性值,与你后台自定义表单中定义的字段名完全一致(区分大小写)。
检查是否有 JS 提交冲突
检查你的表单页面是否被其他 JavaScript 代码(如 jQuery 插件)拦截或修改了表单的提交行为,尝试暂时移除所有 JS 代码,看表单是否能正常提交。
检查服务器环境
- PHP 错误:查看服务器 PHP 的错误日志,看看在提交时是否有
Fatal Error或Warning,这通常是 PHP 版本过低或缺少某个 PHP 扩展(如mysqli)导致的。 - 安全软件拦截:部分服务器或虚拟主机有安全设置,可能会拦截对
dede/archives_do.php或类似处理脚本的 POST 请求,可以联系主机商确认。
总结与排查清单
遇到“自定义表单为空”的问题,请按以下清单操作:
- 【诊断】 登录数据库,查询
dede_addon[你的表单ID]表。- 有数据? -> 去 方案二。
- 没数据? -> 去 方案三。
- 【方案二】数据已入库但后台看不到:
- 首要任务:检查
/templets/default/list_template.htm文件是否存在且代码正确。 - 次要操作:清理 DedeCMS 缓存。
- 最后检查:确认文件权限。
- 首要任务:检查
- 【方案三】数据没有入库:
- 首要任务:检查前台表单是否使用了
{dede:form}标签,且name值正确。 - 次要操作:检查所有表单控件的
name属性是否与后台字段名一致。 - 最后检查:排查 JS 冲突和服务器环境问题。
- 首要任务:检查前台表单是否使用了
按照这个流程,你基本上可以定位并解决绝大多数自定义表单为空的问题,如果以上所有方法都无效,那很可能是你的 DedeCMS 程序文件在某个环节被意外修改或损坏了,可以考虑重新覆盖核心程序文件。
