DedeCMS 的验证码主要用于登录、发布内容、评论等需要用户身份验证的场景,调用方式主要分为两种:
- 直接在模板文件中调用标签:最简单直接的方法,适用于登录、评论等标准功能。
- 在自定义表单或页面中手动调用:更灵活的方法,当你创建自己的表单页面时需要使用。
在标准功能模板中直接调用标签
这是最常见的情况,比如修改登录页面的验证码。
步骤 1:找到并打开模板文件
你需要修改的模板文件通常位于 /templets/ 目录下。
- 登录页面:
/templets/default/login.htm - 发布文章页面:
/templets/default/article_add.htm - 评论页面:
/templets/default/feedback.htm
以登录页面 login.htm 为例,用文本编辑器(如 VS Code, Sublime Text, Notepad++)打开它。
步骤 2:在表单中插入验证码标签
在登录表单 <form> 标签内部,你希望显示验证码图片和输入框的位置,插入以下代码:
<div class="form-group">
<label for="vdcode">验证码:</label>
<div class="input-group">
<input type="text" name="vdcode" id="vdcode" class="form-control" style="width:120px;" />
<img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" width="60" height="24" style="cursor:pointer" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" title="看不清?点击更换" />
</div>
</div>
代码解析:
<input type="text" name="vdcode" ... />:这是用户输入验证码的输入框。name="vdcode"是固定的,后台处理程序会根据这个 name 值来获取用户输入。<img src="..." />:这是显示验证码图片的标签。src="{dede:global.cfg_cmspath/}/include/vdimgck.php":这是验证码生成程序的路径。{dede:global.cfg_cmspath/}是 DedeCMS 的全局标签,会自动替换成你的网站根目录,这样能保证路径正确。
onclick="this.src='...?'+Math.random();":这是实现“点击刷新”功能的关键,当用户点击图片时,会给图片的 src 地址后面加上一个随机数(?Math.random()),这样浏览器就会认为这是一个新的图片地址,从而重新请求并刷新验证码。
步骤 3:确保后台功能开启
DedeCMS 的很多功能默认是开启验证码的,如果验证码不显示,可以检查一下后台设置。
- 登录 DedeCMS 后台。
- 进入 “系统” -> “系统基本参数” -> “核心设置”。
- 找到 “是否开启验证码” 选项,确保它被设置为“是”。
- 对于特定功能,如评论,可以进入 “评论” -> “评论设置”,检查是否开启了验证码。
在自定义表单或页面中手动调用
如果你创建了一个自定义的页面或表单(例如一个“联系我们”表单),并希望加入验证码,你需要手动完成所有步骤。
步骤 1:在模板文件中添加验证码输入框
和第一步一样,在你的自定义表单模板中,添加 HTML 代码:
<!-- 在表单内部添加 -->
<p>
<label>验证码:</label>
<input type="text" name="myvdcode" id="myvdcode" style="width:50px;" />
<img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" width="60" height="24" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" />
</p>
注意:这里的 name="myvdcode" 可以自定义,但你需要确保在处理表单的 PHP 代码中也使用这个相同的 name。
步骤 2:创建处理表单的 PHP 文件
你需要一个 PHP 文件来接收表单数据并进行验证,假设你的表单 action 指向 myform.php。
myform.php 文件示例:
<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/membermodel.class.php";
// 1. 接收表单数据
$vdcode = isset($_POST['myvdcode']) ? trim($_POST['myvdcode']) : '';
// 2. 验证码校验
// 检查验证码是否正确
if (empty($vdcode) || strtolower($vdcode) != strtolower($_SESSION['vdcode'])) {
// 验证失败,提示并返回
ShowMsg('验证码错误!', '-1');
exit();
}
// 3. 其他业务逻辑(保存数据到数据库)
// ... 你的代码 ...
// 4. 验证成功,提示成功信息
ShowMsg('提交成功!', 'success.html');
exit();
?>
代码解析:
require_once (dirname(__FILE__) . "/include/common.inc.php");:引入 DedeCMS 的核心文件,这是必须的,可以获得$_SESSION等变量。$vdcode = ...:获取表单中name="myvdcode"的值。if (empty($vdcode) || strtolower($vdcode) != strtolower($_SESSION['vdcode'])):这是验证码校验的核心逻辑。strtolower():将用户输入和 session 中的验证码都转换为小写,进行不区分大小写的比较。$_SESSION['vdcode']:DedeCMS 的验证码生成程序vdimgck.php会将正确的验证码码值存入这个 Session 变量中,我们只需要在这里读取它并与用户输入的进行比较即可。
ShowMsg(...):DedeCMS 提供的一个非常方便的页面跳转和提示函数。
常见问题与解决方法
-
验证码图片不显示(显示一个红叉)
- 原因:通常是路径问题。
{dede:global.cfg_cmspath/}没有正确解析,或者vdimgck.php文件丢失/损坏。 - 解决:
- 检查
include/vdimgck.php文件是否存在。 - 尝试将路径写死,例如将
src改为/include/vdimgck.php(如果你的网站根目录是 )。 - 检查服务器是否支持 GD 库,验证码图片需要 GD 库来生成,可以在
phpinfo()中查看。
- 检查
- 原因:通常是路径问题。
-
验证码输入正确却提示“验证码错误”
- 原因:
- Session 问题,Session 未开启或在不同页面间无法共享。
- 浏览器缓存问题。
- 解决:
- 确保网站的
php.ini中session.auto_start是On,或者在common.inc.php中正确初始化了 Session。 - 清除浏览器缓存和 Cookie 后再试。
- 检查你的代码逻辑,确保在验证时
$_SESSION['vdcode']变量是存在的。
- 确保网站的
- 原因:
-
验证码样式太丑,想自定义
- 原因:
vdimgck.php是一个 PHP 类文件,直接在里面修改代码比较麻烦。 - 解决:你可以创建自己的验证码生成类,或者在网上找一些更美观的验证码类,替换掉 DedeCMS 默认的
/include/vdimgck.php文件,替换后,模板中的调用代码<img src="...">不需要改变。
- 原因:
希望这份详细的教程能帮助你成功地在 DedeCMS 中调用验证码!
