织梦自定义表单验证码怎么加?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 织梦建站 正文
  1. 使用织梦自带的safe_check验证码(推荐,最简单)
  2. 手动调用vdimgck.php验证码(更灵活,样式可自定义)

准备工作(两种方法通用)

  1. 确认文件存在:请确保您的网站根目录下有以下两个文件:

    织梦自定义表单加验证码
    (图片来源网络,侵删)
    • /include/vdimgck.php (验证码生成程序)
    • /images/vdcode.jpg (验证码显示图片,如果不存在,可以随便找一张jpg图片重命名放上去,程序会自动覆盖)
    • 如果没有,可以从织梦官方程序的安装包里找到这两个文件,然后上传到您的网站对应目录。
  2. 开启全局验证码:登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置,找到 “验证码安全设置”,勾选 “开启验证码功能”“后台验证码”(虽然这个主要是后台用,但开启是前提),然后保存。

  3. 找到你的自定义表单模板:这个模板文件通常位于 /templets/plus/ 目录下,文件名一般是 diyform.htm 或者你自定义的名称。


使用织梦自带的 safe_check 验证码(最简单)

这种方法最简单,直接调用织梦内置的验证码函数,样式和后台登录验证码类似。

步骤:

  1. 在表单中添加验证码输入框: 打开你的自定义表单模板文件(如 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() 是为了防止浏览器缓存图片,导致刷新无效。
  2. 在表单提交按钮上添加验证码检查: 在你的 <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() 来进行前端验证。
  3. 添加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>
  4. 后台处理(无需手动操作): 当表单提交到 /plus/diy.php 时,织梦程序会自动检查 validatecode 这个 POST 变量的值是否与服务器端生成的验证码一致,如果不一致,会直接显示“验证码错误”并阻止数据入库。

方法一只需要修改模板文件,非常简单快捷,适合大多数场景。

织梦自定义表单加验证码
(图片来源网络,侵删)

手动调用 vdimgck.php 验证码(更灵活)

如果你想自定义验证码的样式(比如宽度、高度、背景色等),或者使用更复杂的验证码逻辑,可以采用这种方法。

步骤:

  1. 在表单中添加验证码输入框: 这部分和方法一类似,但我们可以自定义 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>
  2. 添加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>
  3. 修改织梦核心处理文件: 这是最关键的一步,我们需要告诉织梦程序,除了检查默认的 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",都可以正常工作。
  4. (可选)自定义验证码样式: 如果你想修改验证码的字体、背景、干扰线等,可以编辑 /include/vdimgck.php 文件,这个文件里有很多注释,你可以根据需要调整参数。


总结与建议

特点 方法一 (safe_check) 方法二 (手动调用)
优点 极其简单,无需修改核心文件,安全性有保障。 非常灵活,可自定义验证码样式,name属性可自定义。
缺点 样式固定,无法自定义,name属性必须是validatecode 需要修改核心文件 /plus/diy.php,升级织梦时可能需要重新修改。
适用场景 绝大多数用户,追求快速、稳定、无修改。 对验证码外观有特殊要求,或需要集成到其他复杂系统中。

强烈建议初学者使用【方法一】,它最简单、最安全,且完全符合织梦的设计规范,只有在方法一无法满足你的特定需求时,才考虑使用【方法二】。

-- 展开阅读全文 --
头像
织梦列表页如何实现上一页下一页功能?
« 上一篇 今天
C语言string转char数组如何实现?
下一篇 » 今天

相关文章

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

目录[+]