dede提交表单时间如何修改或获取?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 DEDE建站 正文
  1. 表单中显示当前时间:在用户填写表单时,自动填充当前时间,让用户看到。
  2. 后台处理并保存时间:当表单提交到服务器后,PHP代码将这个时间(或服务器当前时间)存入数据库。

下面我将分两种最常见的场景来详细讲解实现方法。

dede提交表单时间
(图片来源网络,侵删)

在前端表单中显示当前时间(用户可见)

这种情况通常用于让用户知道他们提交信息的具体时间,或者让他们修改时间,这主要通过JavaScript实现。

示例:在表单中添加一个文本输入框,并自动填入当前时间。

HTML/JS 代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">提交表单</title>
    <script type="text/javascript">
        // 页面加载完成后执行
        window.onload = function() {
            // 1. 获取当前时间
            var now = new Date();
            // 2. 格式化时间,格式为:YYYY-MM-DD HH:MM:SS
            //    padStart函数用于补零,'7' 会变成 '07'
            var year = now.getFullYear();
            var month = (now.getMonth() + 1).toString().padStart(2, '0');
            var day = now.getDate().toString().padStart(2, '0');
            var hours = now.getHours().toString().padStart(2, '0');
            var minutes = now.getMinutes().toString().padStart(2, '0');
            var seconds = now.getSeconds().toString().padStart(2, '0');
            var formattedTime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
            // 3. 将格式化后的时间填入ID为 "submit_time" 的文本框中
            document.getElementById("submit_time").value = formattedTime;
        }
    </script>
</head>
<body>
    <form action="/plus/diy.php" method="post" enctype="multipart/form-data">
        <!-- ... 其他表单字段 ... -->
        <!-- 时间输入框,用户可以看到也可以修改 -->
        <div>
            <label for="submit_time">提交时间:</label>
            <input type="text" id="submit_time" name="submit_time" readonly />
        </div>
        <button type="submit">提交</button>
    </form>
</body>
</html>

代码解释:

dede提交表单时间
(图片来源网络,侵删)
  • window.onload: 确保整个页面加载完毕后再执行脚本,这样可以保证 document.getElementById 能找到对应的元素。
  • new Date(): JavaScript中获取当前日期和时间的标准方法。
  • .padStart(2, '0'): 一个非常实用的字符串方法,确保月份、日、时、分、秒都是两位数,7 会变成 07
  • document.getElementById("submit_time").value: 找到ID为 submit_time<input> 元素,并将其 value 属性设置为格式化后的时间字符串。
  • readonly: 这个属性让用户可以看到时间,但通常不允许他们修改,如果允许修改,可以去掉这个属性。

在后端PHP中处理并保存时间(数据库存储)

这是更核心、更常用的做法,即无论前端是否显示时间,在表单提交到服务器后,由PHP代码来获取并处理时间,然后存入数据库,这种方法更可靠,因为用户无法篡改。

DedeCMS的自定义表单功能(/plus/diy.php)为我们提供了钩子,可以在数据入库前进行处理。

假设你有一个自定义表单,数据库表名为 dede_diyform1,并且你希望将提交时间存入一个名为 submit_time 的字段(该字段类型为 DATETIME)。

步骤1:修改模板文件(增加隐藏字段)

dede提交表单时间
(图片来源网络,侵删)

在你的自定义表单模板中,添加一个隐藏的输入字段,用来传递一个标记,告诉后端我们需要处理时间。

<form action="/plus/diy.php" method="post" enctype="multipart/form-data">
    <!-- ... 其他表单字段 ... -->
    <!-- 这是一个隐藏字段,用于触发PHP的时间处理逻辑 -->
    <input type="hidden" name="diytime" value="1" />
    <button type="submit">提交</button>
</form>

步骤2:修改 /plus/diy.php 文件

这是最关键的一步,我们需要编辑 diy.php 文件,找到处理数据入库的代码段,并添加我们的自定义逻辑。

  1. 找到文件位置/plus/diy.php
  2. 搜索关键代码:在文件中找到类似 $diy->save($addarr); 的代码,这行代码就是将数据存入数据库的地方。
  3. 在它之前添加我们的逻辑
// 在 include(DEDEINC.'/dedetemplate.class.php'); 这行之后,$diy->save($addarr); 之前添加以下代码:
// 检查是否传来了我们自定义的 diytime 标记
if(isset($_POST['diytime']) && $_POST['diytime'] == '1') {
    // 获取当前服务器时间,格式为 MySQL DATETIME 格式 (YYYY-MM-DD HH:MM:SS)
    $addarr['submit_time'] = date('Y-m-d H:i:s');
    // 如果你的字段名不是 submit_time,请替换成你自己的字段名
    // $addarr['my_time_field'] = date('Y-m-d H:i:s');
}
// --- 原有的代码 ---
// $addarr 是一个数组,包含了所有表单提交过来的数据
// $diy->save($addarr); 这行会将 $addarr 数组中的数据插入到数据库
$diy->save($addarr);

代码解释:

  • if(isset($_POST['diytime']) && $_POST['diytime'] == '1'): 这是一个判断,只有当我们的表单中存在 name="diytime" 且其值为 1 时,下面的代码才会执行,这可以防止误操作。
  • $addarr['submit_time']: 这里我们直接操作 $addarr 数组。$addarr 是DedeCMS内部用来收集所有表单数据的数组,我们向这个数组中增加一个键值对,键 submit_time 必须和你数据库表中的字段名完全一致
  • date('Y-m-d H:i:s'): 这是PHP中获取当前时间的标准函数,'Y-m-d H:i:s' 这个格式化字符串会生成 DATETIME 类型字段需要的标准格式。

步骤3:确保数据库字段存在

请务必确认你的自定义表单对应的数据库表中,有一个 submit_time 字段,并且其数据类型是 DATETIME,如果不是,你需要先修改数据库表结构。


总结与推荐

方法 优点 缺点 推荐场景
前端JS填充 用户体验好,无需刷新页面即可显示时间。 时间是客户端时间,可能被用户修改;依赖于JS,如果用户禁用JS则无效。 需要用户确认或修改时间的场景。
后端PHP处理 安全可靠,时间由服务器生成,用户无法篡改;不依赖客户端JS。 用户在前端看不到这个时间(除非你同时使用JS方法)。 绝大多数情况下的首选,特别是需要将时间作为准确记录存入数据库时。

最佳实践(推荐)

将两种方法结合起来,即:

  1. 前端用JS填充一个readonly的文本框,让用户能看到一个默认的、不可修改的时间。
  2. 后端用PHP在数据入库前,重新生成一个服务器时间并覆盖掉前端传来的时间(或者直接忽略前端时间,只保存服务器时间)。

这样做既保证了用户体验,又保证了数据的准确性和安全性,后端PHP代码可以修改为直接覆盖,不依赖前端传来的值:

// 在 /plus/diy.php 中
// ... 代码 ...
// 强制设置提交时间为服务器当前时间,无论前端传了什么
$addarr['submit_time'] = date('Y-m-d H:i:s');
// ... 原有代码 ...
$diy->save($addarr);

这样,即使用户通过浏览器工具修改了前端显示的时间,最终存入数据库的依然是服务器接收到请求时的准确时间。

-- 展开阅读全文 --
头像
织梦模板服务器系统如何高效搭建?
« 上一篇 今天
织梦数据库无法还原,原因何在?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]