thinkphp3.2点击刷新生成验证码
发布:smiling 来源: PHP粉丝网 添加日期:2021-07-10 11:02:39 浏览: 评论:0
再介绍thinkphp3.2验证码的使用方法之前,先为大家详细介绍ThinkPHP 验证码,具体内容如下。
ThinkPHP 内置了验证码的支持,可以直接使用。要使用验证码,需要导入扩展类库中的 ORG.Util.Image 类库和 ORG.Util.String 类库。
验证码方法
我们通过在在模块类中增加一个 verify 方法来用于显示验证码,最简单的例子:
- Public function verify(){
- // 导入Image类库
- import("ORG.Util.Image");
- Image::buildImageVerify();
- }
import 方法是 ThinkPHP 内置的类库和文件导入方法,上例导入的文件为 ThinkPHP 系统目录下 Lib/ORG/Util/Image.class.php 文件,如果已经将 Image 类库拷贝到了当前项目下,如 Lib/ORG 下,则可以以:
import("@.Util.Image");
import 方法是 ThinkPHP 内置的类库和文件导入方法,上例导入的文件为 ThinkPHP 系统目录下 Lib/ORG/Util/Image.class.php 文件。
访问验证码
可以直接在浏览器里访问该验证码方法以确定验证码是否能正常显示:
http://127.0.0.1/index.php/Public/verify
如果一切正常,显示验证码如下所示:
表单中使用验证码
在表单页面中使用验证码,是以 html img标签 来调用:
<input type="text" name="verify">
<img id="verifyImg" src="-Article-verify" onClick="changeVerify()" title="点击刷新验证码" />
src 属性值即为验证码方法访问地址,视实际情况不同而不同。
验证码刷新
当点击验证码图片时,触发 JavaScript changeVerify() 函数重新读取验证码,从而实现验证码刷新。该函数参考如下:
- <script language="JavaScript">
- function changeVerify(){
- var timenow = new Date().getTime();
- document.getElementById('verifyImg').src='-Article/verify/'+timenow;
- }
- </script>
验证码验证
在调用验证码 verify 的时候,buildImageVerify 会记录本次验证码的 MD5 信息,在表单验证操作里,以如下方法来检查验证码是否正确:
- if($_SESSION['verify'] != md5($_POST['verify'])) {
- $this->error('验证码错误!');
- }
其中 $_SESSION['verify'] 中的 verify 名称为 buildImageVerify 方法默认 SESSION 注册名称,具体见 buildImageVerify 语法。
上面例子演示了最简单的 ThinkPHP 验证码的使用方法。上面的例子验证码是 4 位数字,如果想使用更多风格的验证码以及中文验证码,参见本节其余部分内容:《ThinkPHP 使用不同风格及中文的验证码》。
验证码不显示原因
如下发现无法显示验证码,可能的原因如下:
1、PHP 是否已经安装 GD 库支持。
2、输出之前是否有任何的输出(尤其是 UTF8 的 BOM 头信息输出)。
3、Image 类库是否正确导入。
4、如果是表单页面,请查看是否正确调用了验证码显示方法。
下面就为大家介绍 thinkphp3.2 验证码生成和点击刷新验证码的实现方法,具体内容如下
一、实例化生成验证码的类(该方法放到IndexController里面便于访问)
- /**
- *
- * 验证码生成
- */
- public function verify_c(){
- $Verify = new \Think\Verify();
- $Verify->fontSize = 18;
- $Verify->length = 4;
- $Verify->useNoise = false;
- $Verify->codeSet = '0123456789';
- $Verify->imageW = 130;
- $Verify->imageH = 50;
- //$Verify->expire = 600;
- $Verify->entry();
- }
二、前台需要生成验证码的图片src属性指向
- <p class="top15 captcha" id="captcha-container">
- <input name="verify" width="50%" height="50" class="captcha-text" placeholder="验证码" type="text">
- <img width="30%" class="left15" height="50" alt="验证码" src="{:U('Home/Index/verify_c',array())}" title="点击刷新">
- </p>
三、写完上面的后,页面初始化的验证码就可以出现了,下面要写的就是点击验证码图片后,刷新出新的验证码图片(通过jquery修改图片的src属性来完成,请求的处理函数一样,只是在请求后加一个随机数,区别上一张图片的请求)
- // 验证码生成
- var captcha_img = $('#captcha-container').find('img')
- var verifyimg = captcha_img.attr("src");
- captcha_img.attr('title', '点击刷新');
- captcha_img.click(function(){
- if( verifyimg.indexOf('?')>0){
- $(this).attr("src", verifyimg+'&random='+Math.random());
- }else{
- $(this).attr("src", verifyimg.replace(/\?.*$/,'')+'?'+Math.random());
- }
- });
四、校验验证码输入是否正确
a.在common目录下的function.php里加入全局函数
- /**
- * 验证码检查
- */
- function check_verify($code, $id = ""){
- $verify = new \Think\Verify();
- return $verify->check($code, $id);
- }
b.在表单提交的controller对应的处理方法里添加检查代码
- // 检查验证码
- $verify = I('param.verify','');
- if(!check_verify($verify)){
- $this->error("亲,验证码输错了哦!",$this->site_url,9);
- }
到此tp3.2验证码的使用就可以了。
补充:我在写的时候将四的b步骤放到一个ajax里验证,返回一次检验结果,然后再依据返回结果确定是否要提交表单,但是在验证码通过第一次的校验后,第二次的就不可以了,目前还没想明白原因。
Tags: thinkphp3 2生成验证码
相关文章
- ·ThinkPHP3.0略缩图不能保存到子目录(2013-12-03)
- ·ThinkPHP3.13新版使用体验(2014-04-12)
- ·ThinkPHP3.1新特性 多数据库操作的完善(2014-04-12)
- ·揭秘ThinkPHP3.1.2版本的独立分组功能(2014-04-12)
- ·thinkphp3.12安装出现这个问题的解决方法(2014-04-12)
- ·给thinkphp3.1案例blog添加一个删除的标签的方法(2014-04-12)
- ·ThinkPHP3.1.2整合UCenter详解(2014-04-12)
- ·ThinkPHP3.0中的一个快捷查询方法(|和&)(2014-04-12)
- ·ThinkPHP3.1教程新特性:动态设置自动完成和自动验证(2014-04-12)
- ·在thinkphp3中如何处理cookie数组(2014-04-12)
- ·ThinkPHP3.0中PHPMailer的使用(2014-04-12)
- ·THINKPHP3 静态缓存要素(2014-04-19)
- ·THINKPHP3 ajax无刷新分页类及实例(2014-04-19)
- ·关于THINKPHP3.0批量删除的设计思路和部分关键代码(2014-04-19)
- ·ThinkPHP3.0国际化配置方法(2014-04-19)
- ·thinkphp3.0 输出重复2次的解决方法(2014-04-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)