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


Posted in PHP onFebruary 16, 2016

再介绍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
如果一切正常,显示验证码如下所示:

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

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

这就是本文的全部内容,文章最后还有一个小小的疑问,希望大家可以想出解决办法,也希望本文对大家的学习有所帮助。

PHP 相关文章推荐
PHP 5.0对象模型深度探索之绑定
Sep 05 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
php中explode与split的区别介绍
Oct 03 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
php生成图片验证码
Jun 09 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
简单的php购物车代码
Jun 05 PHP
PHP模拟post提交数据方法汇总
Feb 16 #PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 #PHP
PHP的Yii框架入门使用教程
Feb 15 #PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 #PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 #PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 #PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 #PHP
You might like
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
js倒计时小程序
2013/11/05 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
记录Django开发心得
2014/07/16 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
Python3中的json模块使用详解
2018/05/05 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python常用数据重复项处理方法
2019/11/22 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
合作经营协议书范本
2014/04/17 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
JavaScript实现简单拖拽效果
2021/09/15 Javascript
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
python标准库ElementTree处理xml
2022/05/20 Python