dede自定义表单如何设置必填字段?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文
  1. 前端模板:在表单的必填项输入框上添加一个 required 属性,这是 HTML5 的标准属性,可以提供基础的客户端校验,提升用户体验。
  2. 后端 PHP 文件:修改处理表单提交的 PHP 文件,在其中加入 PHP 代码,在服务器端再次判断必填项是否为空,如果为空,则阻止提交并返回错误提示,这一步是必须的,因为前端校验可以被用户轻易绕过。

下面是详细的步骤和代码示例。

dede自定义表单必填
(图片来源网络,侵删)

准备工作:创建自定义表单

你需要在 DedeCMS 后台已经创建好了自定义表单,假设我们创建了一个名为 feedback 的反馈表单,包含以下字段:

  • name (姓名) - 必填
  • tel (电话) - 必填
  • email (邮箱) - 选填
  • content (反馈内容) - 必填

第一步:修改前台模板文件 (templets/plus/diyform.htm)

这个文件是用户填写表单时看到的页面,我们需要在这里添加前端校验。

  1. 找到你的自定义表单对应的模板文件,路径通常是 你的网站根目录/templets/plus/diyform.htm,如果你在后台指定了其他模板,则修改你指定的那个文件。

  2. 找到 <input><textarea> 标签,对于需要设置为必填的字段,在其上添加 required 属性。

修改前 (以 name 字段为例):

<input type="text" name="name" id="name" size="30" class="intxt" />

修改后 (添加 required 属性):

<input type="text" name="name" id="name" size="30" class="intxt" required="required" placeholder="请输入您的姓名" />

对其他必填项做同样修改:

<!-- 电话 (必填) -->
<input type="text" name="tel" id="tel" size="30" class="intxt" required="required" placeholder="请输入您的电话" />
<!-- 反馈内容 (必填) -->
<textarea name="content" id="content" rows="5" cols="80" required="required" placeholder="请输入您的反馈内容"></textarea>

required 属性的作用:

  • 当用户试图提交表单时,如果该字段为空,浏览器会自动阻止提交,并显示一个默认的提示信息(如“请填写此字段”)。
  • placeholder 属性是可选的,但它可以为用户提供输入提示,改善体验。

注意: email 字段我们设置为选填,所以不要加 required 属性。


第二步:修改后台处理文件 (plus/diy.php) - 核心步骤

这是实现服务器端必填校验的关键,当用户提交表单时,数据会发送到这个 PHP 文件进行处理。

  1. 找到并打开 你的网站根目录/plus/diy.php 文件。

  2. 在文件中找到如下代码段(通常在第 37 行左右):

    //保存到主表
    $inquery = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, $diy->public $addvalue);";
    $dsql->ExecuteNoneQuery($inquery);

    在这段代码之前,我们需要插入我们的校验逻辑。

  3. 插入以下 PHP 代码:

// ------------------------ 在此处添加必填项校验 ------------------------
// 定义必填项的字段名,用英文逗号隔开
$required_fields = 'name,tel,content'; 
// 获取所有POST过来的数据
$post_data = $_POST;
// 遍历必填项,检查是否为空
foreach ($required_fields as $field) {
    // 检查字段是否存在且值为空(去除空格后)
    if (!isset($post_data[$field]) || trim($post_data[$field]) == '') {
        // 如果为空,则提示并终止脚本
        showMsg('您有必填项没有填写,请返回检查!', '-1');
        exit();
    }
}
// ------------------------ 校验代码结束 ------------------------
//保存到主表
$inquery = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, $diy->public $addvalue);";
$dsql->ExecuteNoneQuery($inquery);

代码解释:

  • $required_fields = 'name,tel,content';:这里定义了所有必填项的字段名,用英文逗号隔开,请根据你的实际字段名进行修改。
  • foreach ($required_fields as $field):循环遍历每一个必填项。
  • !isset($post_data[$field]) || trim($post_data[$field]) == '':这是判断条件,它检查字段是否不存在,或者存在但其值为空(trim() 函数可以去除字符串两端的空格,防止用户只输入空格来绕过校验)。
  • showMsg('您有必填项没有填写,请返回检查!', '-1');:如果发现必填项为空,就调用 DedeCMS 自带的 showMsg 函数,弹出一个错误提示框,并停留在当前页面。
  • exit();:终止脚本的继续执行,防止数据被写入数据库。

第三步:优化提示信息(可选)

默认的 showMsg 提示框可能会让用户不清楚具体哪个字段没填,我们可以改进一下,提示用户具体是哪个字段。

将第二步中的 showMsg 代码修改为更友好的提示:

// 在 foreach 循环内部,将原来的 showMsg 替换为:
$labels = array(
    'name' => '姓名',
    'tel' => '电话',
    'content' => '反馈内容'
    // 如果还有其他必填项,在这里继续添加 '字段名' => '字段标签'
);
if (!isset($post_data[$field]) || trim($post_data[$field]) == '') {
    $field_label = isset($labels[$field]) ? $labels[$field] : $field;
    showMsg("“{$field_label}”为必填项,请填写完整!", '-1');
    exit();
}

这样,如果用户没填“电话”,就会提示““电话”为必填项,请填写完整!”,用户体验更好。


总结与最终流程

  1. 后台创建表单:在 DedeCMS 后台创建 diy 表单,如 feedback,并添加字段 name, tel, email, content
  2. 修改前台模板 (diyform.htm):在 name, tel, content 对应的 <input><textarea> 标签上添加 required="required" 属性。
  3. 修改后台处理文件 (diy.php):在 INSERT INTO ... 语句之前,添加 PHP 校验代码,定义 $required_fields 并循环检查,如果为空则用 showMsg 提示错误并终止。

完成以上三步,你的 DedeCMS 自定义表单就具备了可靠的必填项校验功能,既保证了前端用户体验,也确保了后端数据的安全性。

-- 展开阅读全文 --
头像
dede自定义属性删除
« 上一篇 今天
time(0)返回的是当前时间戳吗?
下一篇 » 今天

相关文章

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

目录[+]