使用织梦自带的时间字段(最推荐、最简单)
织梦的自定义表单功能非常贴心,它已经内置了一个专门用于记录时间的字段类型,我们只需要在添加表单时选择即可。

(图片来源网络,侵删)
操作步骤:
-
登录后台:使用管理员账号登录您的织梦DedeCMS后台。
-
进入表单管理:在左侧菜单栏中,找到并点击 【核心】 -> 发布】 -> 【自定义表单】。
-
添加新字段:
(图片来源网络,侵删)- 在自定义表单管理页面,点击右上角的 【增加新字段】 按钮。
- 在弹出的字段添加页面中,填写以下信息:
- 字段名称:填写一个便于识别的英文字母名称,
addtime或submit_time。注意:这里只能用英文、数字或下划线。 - 字段提示:填写在前台表单中显示给用户的提示文字,
提交时间或请勿填写,因为我们希望它是自动的,所以这里可以写“请勿填写”来提示用户无需手动输入。 - 字段类型:这是最关键的一步!请选择 【时间文本】。
- 默认值:这里可以直接留空,织梦会自动处理。
- 字段名称:填写一个便于识别的英文字母名称,
-
保存字段:点击页面底部的 【保存】 按钮。
-
更新表单:
- 返回到自定义表单列表页面。
- 找到您刚才修改的表单,点击后面的 【更新表单】 按钮。
- 系统会根据您添加的字段,自动更新前台和后台的表单模板。
-
前台效果:
- 现在您访问包含该表单的前台页面,会发现表单中多了一个名为“提交时间”的文本框。
- 重要:为了让这个时间自动填写,您需要在前台模板文件中,找到这个字段的
<input>标签,给它加上一个value属性,并调用织梦的当前时间函数。 - 找到类似这样的代码:
<input type="text" name="addtime" id="addtime" class="intxt" />
- 修改为:
<input type="text" name="addtime" id="addtime" class="intxt" value="{dede:php}echo date('Y-m-d H:i:s');{/dede:php}" /> - 这样,当用户打开页面时,这个时间框就会自动显示当前的系统时间,并且用户无法修改(虽然他们可以通过浏览器开发者工具修改,但这对于99%的场景已经足够)。
-
后台效果:
当用户提交表单后,您在后台查看该表单的数据时,就能看到对应的时间记录了。
修改PHP处理文件(最灵活、最稳定)
如果您不想在前台显示时间字段,或者希望时间完全由后台PHP脚本生成,不受前台任何影响,可以直接修改处理表单提交的PHP文件。
操作步骤:
-
找到处理文件:
- 织梦自定义表单的提交数据通常由
plus/diy.php文件处理,请找到这个文件并下载到本地。
- 织梦自定义表单的提交数据通常由
-
修改代码:
- 用代码编辑器(如VS Code, Sublime Text, Dreamweaver)打开
diy.php文件。 - 找到处理数据插入数据库的核心代码段,通常在文件末尾,类似下面这样:
// 保存到主表 $inquery = "INSERT INTO `{$diy->table}` (`id`, `{$addtime}`, ...) VALUES (NULL, '{$addtime}', ...)"; // ... 其他数据库操作代码 ... - 在这个
INSERT INTO语句中,找到您想添加时间的那个字段名(addtime)。 - 在对应的值部分,不要使用前台传来的变量,而是直接使用PHP的
time()或date()函数来生成时间戳或格式化时间。 - 修改前(示例):
$inquery = "INSERT INTO `{$diy->table}` (`id`, `name`, `tel`, `addtime`) VALUES (NULL, '$name', '$tel', '$addtime')"; - 修改后(示例):
// 使用 date() 函数生成 'Y-m-d H:i:s' 格式的时间 $current_time = date('Y-m-d H:i:s'); $inquery = "INSERT INTO `{$diy->table}` (`id`, `name`, `tel`, `addtime`) VALUES (NULL, '$name', '$tel', '$current_time')"; - 或者使用 time() 函数生成Unix时间戳:
// 使用 time() 函数生成Unix时间戳 $timestamp = time(); $inquery = "INSERT INTO `{$diy->table}` (`id`, `name`, `tel`, `addtime`) VALUES (NULL, '$name', '$tel', '$timestamp')"; - 注意:请确保您数据库中
addtime字段的类型与您插入的时间格式匹配。- 如果用
date('Y-m-d H:i:s'),数据库字段应为DATETIME或VARCHAR。 - 如果用
time(),数据库字段应为INT。
- 如果用
- 用代码编辑器(如VS Code, Sublime Text, Dreamweaver)打开
-
上传文件:将修改好的
diy.php文件上传回您网站的plus目录,覆盖原文件。 -
前台模板:
- 在前台模板文件中,可以完全移除那个时间输入框,因为时间不再由前台提供,而是由后台生成。
- 或者,如果您想在前台显示一个“只读”的时间提示,可以这样写:
<input type="text" name="addtime" id="addtime" class="intxt" value="{dede:php}echo date('Y-m-d H:i:s');{/dede:php}" readonly="readonly" />readonly属性确保用户无法修改这个值。
通过修改JS文件实现(前端实现)
这种方法通过JavaScript在用户点击提交前,给一个隐藏的时间字段赋值。
操作步骤:
-
找到JS文件:
- 织梦自定义表单的JS验证文件通常位于
/include/js/jquery/jquery.form.js或/include/js/dedeajax2.js,更常见的是在模板文件中内嵌了JS代码。
- 织梦自定义表单的JS验证文件通常位于
-
添加JS代码:
-
在表单提交按钮的点击事件处理函数中,添加一行代码来设置时间字段的值。
-
假设您的表单ID是
myform,时间字段名是addtime。 -
找到类似
document.getElementById("diy").submit();的代码。 -
在它前面添加如下JS代码:
// 获取当前时间并格式化 var now = new Date(); var year = now.getFullYear(); var month = now.getMonth() + 1; var day = now.getDate(); var hour = now.getHours(); var minute = now.getMinutes(); var second = now.getSeconds(); // 补零 month = (month < 10 ? "0" + month : month); day = (day < 10 ? "0" + day : day); hour = (hour < 10 ? "0" + hour : hour); minute = (minute < 10 ? "0" + minute : minute); second = (second < 10 ? "0" + second : second); var currentTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; // 将时间赋给隐藏的时间字段 document.getElementById("addtime").value = currentTime; -
或者更简洁的写法:
document.getElementById("addtime").value = new Date().toLocaleString();
-
-
前台模板:
- 在表单中,添加一个隐藏的
input标签来接收这个时间值。<input type="hidden" name="addtime" id="addtime" value="" />
- 在表单中,添加一个隐藏的
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 自带时间字段 | 最简单,官方支持,更新表单即可,不易出错。 | 前台会显示一个输入框,需要用readonly或value属性控制。 |
绝大多数情况下的首选,特别是新手用户。 |
| 修改PHP文件 | 最稳定,时间与前台完全解耦,逻辑清晰,用户无法干预。 | 需要修改核心文件,有一定技术门槛,升级织梦时可能被覆盖。 | 对数据安全性要求高,或希望时间生成逻辑完全由后台控制的场景。 |
| 修改JS文件 | 灵活,可以在客户端做更多处理。 | 依赖JavaScript,如果用户禁用JS则无法获取时间;不如后端方法可靠。 | 特殊的前端交互需求,不推荐作为主要的时间记录方法。 |
强烈推荐您使用【方法一】,因为它最符合织梦的设计理念,也最安全、最易于维护。
