- 使用织梦自带的
safe_check验证码(推荐,最简单) - 手动调用
vdimgck.php验证码(更灵活,样式可自定义)
准备工作(两种方法通用)
-
确认文件存在:请确保您的网站根目录下有以下两个文件:
(图片来源网络,侵删)/include/vdimgck.php(验证码生成程序)/images/vdcode.jpg(验证码显示图片,如果不存在,可以随便找一张jpg图片重命名放上去,程序会自动覆盖)- 如果没有,可以从织梦官方程序的安装包里找到这两个文件,然后上传到您的网站对应目录。
-
开启全局验证码:登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置,找到 “验证码安全设置”,勾选 “开启验证码功能” 和 “后台验证码”(虽然这个主要是后台用,但开启是前提),然后保存。
-
找到你的自定义表单模板:这个模板文件通常位于
/templets/plus/目录下,文件名一般是diyform.htm或者你自定义的名称。
使用织梦自带的 safe_check 验证码(最简单)
这种方法最简单,直接调用织梦内置的验证码函数,样式和后台登录验证码类似。
步骤:
-
在表单中添加验证码输入框: 打开你的自定义表单模板文件(如
diyform.htm),在<form>标签内的合适位置(比如所有输入框的后面)添加以下代码:
(图片来源网络,侵删)<div class="form-group"> <label for="vdcode">验证码:</label> <input type="text" name="validatecode" id="vdcode" class="text-input" style="width:100px;" /> <img src="/include/vdimgck.php" width="80" height="30" alt="看不清?点击换一张" style="cursor:pointer;" onclick="this.src='/include/vdimgck.php?t='+Math.random();" /> </div>name="validatecode":这个name必须是validatecode,织梦的后台处理程序会固定查找这个字段名。onclick="this.src='...t='+Math.random();":这段 JavaScript 代码实现了“点击图片刷新验证码”的功能,Math.random()是为了防止浏览器缓存图片,导致刷新无效。
-
在表单提交按钮上添加验证码检查: 在你的
<form>标签中,找到action属性,确保它指向你的表单提交地址(通常是/plus/diy.php),并添加mobile属性(用于在移动端提交)。<form action="/plus/diy.php" enctype="multipart/form-data" method="post" onsubmit="return checkVdcode();"> <!-- 你的表单字段... --> <!-- 上一步添加的验证码输入框... --> <button type="submit" name="submit">提交</button> </form>onsubmit="return checkVdcode();":这是关键,它会在表单提交前调用一个 JavaScript 函数checkVdcode()来进行前端验证。
-
添加JavaScript验证函数: 在
<form>标签前面或后面,添加<script>标签,并写入checkVdcode()函数。<script type="text/javascript"> function checkVdcode() { // 获取用户输入的验证码 var code = document.getElementById('vdcode').value; if(code == '') { alert('请输入验证码!'); return false; // 阻止表单提交 } // 如果需要更严格的验证,可以在这里调用AJAX进行二次验证,但前端检查主要是为了用户体验 return true; // 验证通过,允许提交 } </script> -
后台处理(无需手动操作): 当表单提交到
/plus/diy.php时,织梦程序会自动检查validatecode这个 POST 变量的值是否与服务器端生成的验证码一致,如果不一致,会直接显示“验证码错误”并阻止数据入库。
方法一只需要修改模板文件,非常简单快捷,适合大多数场景。

手动调用 vdimgck.php 验证码(更灵活)
如果你想自定义验证码的样式(比如宽度、高度、背景色等),或者使用更复杂的验证码逻辑,可以采用这种方法。
步骤:
-
在表单中添加验证码输入框: 这部分和方法一类似,但我们可以自定义
name属性(vdcode)。<div class="form-group"> <label for="myvdcode">验证码:</label> <input type="text" name="vdcode" id="myvdcode" class="text-input" style="width:100px;" /> <img id="codeImg" src="/include/vdimgck.php" width="80" height="30" alt="看不清?点击换一张" style="cursor:pointer;" /> </div> -
添加JavaScript刷新函数: 为了更好的用户体验,我们单独写一个刷新函数。
<script type="text/javascript"> // 刷新验证码 function changeCode() { var codeImg = document.getElementById('codeImg'); codeImg.src = "/include/vdimgck.php?t=" + Math.random(); } // 可以给图片绑定点击事件 document.getElementById('codeImg').onclick = changeCode; </script> -
修改织梦核心处理文件: 这是最关键的一步,我们需要告诉织梦程序,除了检查默认的
validatecode,还要检查我们自定义的vdcode。打开文件:
/plus/diy.php找到类似下面这样的代码段(通常在文件靠前部分,处理
$_SESSION的地方):// 在文件顶部 session_start(); 下面找到这段代码 if( $safecheck==1 ) { $svali = GetCkVdValue(); if(preg_match("/6/",$safecheck)){ // ... 其他验证逻辑 ... } // 重点在这里,找到下面这行 if( $vdcode != $svali || $vdcode=='' ) { ShowMsg('验证码错误!', '-1'); exit(); } }我们需要修改这个
$vdcode的判断,让它同时支持validatecode和我们自定义的vdcode。将原来的代码:
if( $vdcode != $svali || $vdcode=='' ) { ShowMsg('验证码错误!', '-1'); exit(); }修改为:
// 检查两种可能的验证码字段名 $vdcode_input = isset($_POST['validatecode']) ? $_POST['validatecode'] : (isset($_POST['vdcode']) ? $_POST['vdcode'] : ''); if( $vdcode_input != $svali || $vdcode_input=='' ) { ShowMsg('验证码错误!', '-1'); exit(); }代码解释:
$vdcode_input变量会先检查$_POST中是否存在validatecode(方法一的name),如果不存在,再检查是否存在vdcode(方法二的name)。- 然后用这个
$vdcode_input去和服务器端的验证码$svali进行比较。 - 这样修改后,你的模板文件无论是使用
name="validatecode"还是name="vdcode",都可以正常工作。
-
(可选)自定义验证码样式: 如果你想修改验证码的字体、背景、干扰线等,可以编辑
/include/vdimgck.php文件,这个文件里有很多注释,你可以根据需要调整参数。
总结与建议
| 特点 | 方法一 (safe_check) | 方法二 (手动调用) |
|---|---|---|
| 优点 | 极其简单,无需修改核心文件,安全性有保障。 | 非常灵活,可自定义验证码样式,name属性可自定义。 |
| 缺点 | 样式固定,无法自定义,name属性必须是validatecode。 |
需要修改核心文件 /plus/diy.php,升级织梦时可能需要重新修改。 |
| 适用场景 | 绝大多数用户,追求快速、稳定、无修改。 | 对验证码外观有特殊要求,或需要集成到其他复杂系统中。 |
强烈建议初学者使用【方法一】,它最简单、最安全,且完全符合织梦的设计规范,只有在方法一无法满足你的特定需求时,才考虑使用【方法二】。
