- 前端模板:在表单的必填项输入框上添加一个
required属性,这是 HTML5 的标准属性,可以提供基础的客户端校验,提升用户体验。 - 后端 PHP 文件:修改处理表单提交的 PHP 文件,在其中加入 PHP 代码,在服务器端再次判断必填项是否为空,如果为空,则阻止提交并返回错误提示,这一步是必须的,因为前端校验可以被用户轻易绕过。
下面是详细的步骤和代码示例。

(图片来源网络,侵删)
准备工作:创建自定义表单
你需要在 DedeCMS 后台已经创建好了自定义表单,假设我们创建了一个名为 feedback 的反馈表单,包含以下字段:
name(姓名) - 必填tel(电话) - 必填email(邮箱) - 选填content(反馈内容) - 必填
第一步:修改前台模板文件 (templets/plus/diyform.htm)
这个文件是用户填写表单时看到的页面,我们需要在这里添加前端校验。
-
找到你的自定义表单对应的模板文件,路径通常是
你的网站根目录/templets/plus/diyform.htm,如果你在后台指定了其他模板,则修改你指定的那个文件。 -
找到
<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 文件进行处理。
-
找到并打开
你的网站根目录/plus/diy.php文件。 -
在文件中找到如下代码段(通常在第 37 行左右):
//保存到主表 $inquery = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, $diy->public $addvalue);"; $dsql->ExecuteNoneQuery($inquery);在这段代码之前,我们需要插入我们的校验逻辑。
-
插入以下 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();
}
这样,如果用户没填“电话”,就会提示““电话”为必填项,请填写完整!”,用户体验更好。
总结与最终流程
- 后台创建表单:在 DedeCMS 后台创建
diy表单,如feedback,并添加字段name,tel,email,content。 - 修改前台模板 (
diyform.htm):在name,tel,content对应的<input>和<textarea>标签上添加required="required"属性。 - 修改后台处理文件 (
diy.php):在INSERT INTO ...语句之前,添加 PHP 校验代码,定义$required_fields并循环检查,如果为空则用showMsg提示错误并终止。
完成以上三步,你的 DedeCMS 自定义表单就具备了可靠的必填项校验功能,既保证了前端用户体验,也确保了后端数据的安全性。
