当前位置:网站首页 > tp源码 > 正文

thinkphp3.2点击刷新生成验证码

thinkphp教练 0

thinkphp3.2点击刷新生成验证码:

再介绍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 文件。

  

 

 在表单页面中使用验证码,是以 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 使用不同风格及中文的验证码》。

  验证码不显示原因

  如下发现无法显示验证码,可能的原因如下:

  1PHP 是否已经安装 GD 库支持。

  2、输出之前是否有任何的输出(尤其是 UTF8 BOM 头信息输出)。

  3Image 类库是否正确导入。

  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" placeholder="验证码" type="text">  <img width="30%" 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里验证,返回一次检验结果。然后再依据返回结果确定是否要提交表单,但是在验证码通过第一次的校验后,第二次的就不可以了,目前还没想明白原因。

以上就是thinkphp3.2点击刷新生成验证码,希望这篇文章对您有所帮助!如有什么需要补充的欢迎到我们的网站进行补充!http://www.thinkphpedu.com