dede表单如何添加验证码?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

使用DedeCMS自带的/plus/diy.php验证码功能(推荐,最简单)

这是最标准、最简单的方法,直接利用DedeCMS内置的验证码功能,无需修改核心文件,兼容性最好。

dede表单加上验证码
(图片来源网络,侵删)

适用场景

  • 创建一个新的自定义表单。
  • 或者,为已有的自定义表单添加验证码。

操作步骤

第1步:创建或修改自定义表单

  1. 登录您的DedeCMS后台。
  2. 进入【核心】 -> 【内容频道模型】 -> 【自定义表单】。
  3. 如果是新建表单
    • 点击【增加自定义表单】,填写表单名称(留言反馈”),选择表单目录(默认为/plus/),然后点击“保存”。
    • 进入新创建的表单管理页面,点击【字段管理】。
    • 点击【增加字段】,添加您需要的字段(如姓名、电话、内容等)。
  4. 如果是为已有表单添加验证码

    直接进入该表单的字段管理页面。

第2步:添加验证码字段

这是最关键的一步,您需要添加一个专门用于接收验证码输入的字段。

dede表单加上验证码
(图片来源网络,侵删)
  1. 在字段管理页面,点击左上角的【增加字段】。
  2. 填写字段信息:
    • 字段名称: validatecode (这是系统约定好的名称,必须使用,大小写敏感)
    • 字段提示: 验证码 (这是在前端显示给用户的提示文字)
    • 字段类型: 单行文本
    • 前台提交:
    • 必填项: (强烈建议设置为必填,防止用户不填写)
    • 其他选项:保持默认即可。
  3. 点击【保存】。

第3步:修改表单模板文件

您需要在前端页面中,让用户能看到输入框和验证码图片。

  1. 进入【核心】 -> 【内容频道模型】 -> 【自定义表单】,找到您刚才创建的表单。
  2. 在表单管理页面,点击【选择模板】,系统会默认生成一个模板文件,路径通常是 /templets/plus/diyform.htm
  3. 用FTP或网站后台的文件管理器,打开这个 diyform.htm 文件。
  4. 在您希望显示验证码的位置(通常是提交按钮的上方),添加以下HTML代码:
<div class="form-group">
    <label for="validatecode">验证码:</label>
    <div class="input-group">
        <input type="text" class="form-control" name="validatecode" id="validatecode" style="width:150px;" required>
        <img src="/plus/vdimgck.php" onclick="this.src='/plus/vdimgck.php?'+Math.random();" title="看不清?点击换一张" style="cursor:pointer;height:32px;vertical-align:middle;">
    </div>
</div>

代码解释:

  • <input type="text" ... name="validatecode">:这个 name 属性必须和您在第2步中创建的字段名称 validatecode 完全一致。
  • <img src="/plus/vdimgck.php">:这是DedeCMS生成验证码图片的固定地址。
  • onclick="this.src='/plus/vdimgck.php?'+Math.random();":这是点击图片刷新验证码的JavaScript代码,提升用户体验。

第4步:修改处理文件以启用验证

dede表单加上验证码
(图片来源网络,侵删)

需要告诉DedeCMS在接收表单数据时,要验证这个验证码。

  1. 用FTP或文件管理器,打开 /plus/diy.php 文件。

  2. 找到以下代码段(通常在文件末尾,在 if($dsql->Execute('add')){ 之前):

    //在这里执行入库操作
    $addvar = array();
    $addvalue = array();
    foreach($diy->getOneTableFields() as $field=>$v)
    {
        if($v[1] == 'text' || $v[1] == 'textarea' || $v[1] == 'number' || $v[1] == 'datetime')
        {
            $addvar[] = $field;
            $addvalue[] = "'".addslashes(${$field})."'";
        }
    }
    $inquery = "INSERT INTO `{$diy->table}` (`".implode('`,`', $addvar)."`) VALUES (".implode(',', $addvalue).")";
    //echo $inquery;
    $dsql->ExecuteNoneQuery($inquery);
  3. 在这段代码的前面,添加如下验证代码:

    //验证码检查
    if(preg_match("/3d/",$safe_gdopen)){
        //验证码类型为3D
        if(strtolower($vdcode)!=$GLOBALS['validatecode']){
            showMsg('验证码错误!', '-1');
            exit();
        }
    }else{
        //验证码类型为普通
        if(strtolower($vdcode)!=$GLOBALS['validatecode']){
            showMsg('验证码错误!', '-1');
            exit();
        }
    }
    unset($_SESSION['validatecode']);

代码解释:

  • 这段代码会获取用户提交的 vdcode(隐藏字段,DedeCMS自动生成)和 validatecode(我们刚才添加的输入框的值)进行比较。
  • 如果不一致,就提示“验证码错误!”并停止执行。
  • unset($_SESSION['validatecode']); 验证成功后,销毁session中的验证码,防止重复提交。

第5步:清理缓存

完成以上所有步骤后,登录DedeCMS后台,点击右上角的【生成】->【一键更新网站】,然后选择“更新缓存”,确保修改生效。

您的表单就已经成功加上了验证码功能!


为已有表单页面手动添加验证码(适用于未使用diy.php的情况)

开发者可能直接在自己的页面模板里写表单提交逻辑,而不是使用/plus/diy.php,这种情况下,需要手动引入和验证。

操作步骤

第1步:在前端表单页面添加验证码HTML

在您的表单代码中,添加和【方法一】第3步完全相同的HTML代码块:

<div class="form-group">
    <label for="validatecode">验证码:</label>
    <div class="input-group">
        <input type="text" class="form-control" name="validatecode" id="validatecode" style="width:150px;" required>
        <img src="/plus/vdimgck.php" onclick="this.src='/plus/vdimgck.php?'+Math.random();" title="看不清?点击换一张" style="cursor:pointer;height:32px;vertical-align:middle;">
    </div>
</div>

第2步:修改表单提交地址

确保您的<form>标签的 action 属性指向处理文件,action="/plus/diy.php"

第3步:在处理文件中添加验证逻辑

假设您的表单提交到 plus/your_handler.php,您需要在这个文件里加入验证码验证代码。

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php"); // 引入DedeCMS核心文件
// 1. 接收表单数据
$name = isset($_POST['name']) ? $_POST['name'] : '';
$tel = isset($_POST['tel']) ? $_POST['tel'] : '';
$validatecode = isset($_POST['validatecode']) ? $_POST['validatecode'] : '';
// 2. 验证码校验
// 从session中获取系统生成的验证码
$sessionCode = isset($_SESSION['validatecode']) ? $_SESSION['validatecode'] : '';
// 比较用户输入的和session中的,不区分大小写
if (strtolower($validatecode) !== strtolower($sessionCode)) {
    // 验证失败,返回提示
    echo json_encode(['code' => 0, 'msg' => '验证码错误!']);
    exit;
}
// 3. 验证通过,继续处理您的业务逻辑(例如入库等)
// ...您的代码...
// 示例:成功后返回JSON
echo json_encode(['code' => 1, 'msg' => '提交成功!']);
?>

注意:

  • 这种方法需要您手动处理所有表单数据和业务逻辑。
  • 必须引入 common.inc.php 才能使用 $_SESSION 变量。
  • 验证成功后,同样建议 unset($_SESSION['validatecode']);

常见问题与解决方案 (FAQ)

Q1: 为什么我添加了验证码,但提交时仍然提示“验证码错误”?

  • 原因1/plus/diy.php 文件没有修改,或者修改后没有清理缓存。
  • 原因2:字段名称 validatecode 拼写错误,或者大小写不一致。
  • 原因3:服务器 session 功能未开启或配置有问题,检查 php.ini 文件中的 session.save_path 是否有写入权限。
  • 原因4:使用了缓存插件,导致验证码逻辑被覆盖。

Q2: 验证码图片不显示,显示一个红叉或者 broken 图片图标。

  • 原因1:GD库未开启,在您的服务器 php.ini 文件中,找到 ;extension=gd;extension=php_gd2.dll (Windows),去掉前面的分号 ,然后重启Apache或Nginx。
  • 原因2/plus/vdimgck.php 文件丢失或权限错误,请确保该文件存在,并且有可执行权限。
  • 原因3:服务器目录权限问题,导致无法生成临时验证码图片。

Q3: 如何修改验证码的样式(如字符数、干扰点等)?

  • 验证码的生成逻辑在 /include/vdimgck.php 文件中,您可以修改这个文件里的 $rndc(字符数)、$noise(干扰点)等变量来自定义样式,但请注意,直接修改核心文件不利于后期升级。

希望这份详细的教程能帮助您成功为DedeCMS表单添加验证码!

-- 展开阅读全文 --
头像
织梦猫html5模板好用吗?适合新手吗?
« 上一篇 03-04
and与or在C语言中如何运算?
下一篇 » 03-04

相关文章

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

目录[+]