必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

今天为大家介绍的是thinkphp如何实现验证码的功能

2019-09-27 22:08 来源:未知

细说php中的验证码类创建

ajax的实时验证技术已经很成熟了,在一些规范的网站上,如果有注册验证的模板,必定会涉及到ajax的无刷新验证,这在用户注册的体验中是很棒的,对比一个不能及时和后台无刷新对接的验证模式,要重新返回来刷新,这对于用户来说,体验上是很不友好的。

作为我大天朝的程序员,如果不会点thinkphp框架确实有点说不过去了(虽然作为菜鸟的我才入坑没几个月)。不过不会也没关系,很简单的一个php框架。今天为大家介绍的是thinkphp如何实现验证码的功能。

过滤器

我这里自己写了一个验证码类,我来演示一下怎么使用,我是菜鸟一枚,大神请略过。我来讲解一下它的使用方法,总共需要两步即可。

ajax的模式几乎是所有站点应用的需求,ajax作为前端无刷新验证,可以和所有后台语言进行组合使用,比如asp+ajax,php+ajax,.net+ajax等等组合,这里主要讲解的是php+ajax的注册验证。

thinkphp自带验证码功能,我们直接调用就行了。发展到现在thinkphp已经有好几个正式版本了,最新的版本是thinkphp5.0。今天我将给大家介绍一下5的版本和3的版本。

什么是过滤器

过滤器是控制器动作执行之前或之后需要执行的代码。该代码以对象的形式执行,则应该使用类的方式定义并申明。
过滤器本质上是一种特殊的行为。

第一步:

下面的验证是一个完整的实例,我们在网站上面注册时,在输入用户名时,首先要进行无刷新验证,要验证一下后台数据库里面是否存在同名的数据,如果存在,则无刷新显示用户名已被占用的提示,这里一共涉及到四个文件。

thinkphp3的版本:

为什么使用过滤器

通常情况下,过滤器将代码绑定到所有的操作上,也就是说,每一个操作的执行,都需要先或后执行过滤器,所以,可以用来执行权限检测、缓存处理等事情

下载我制作好的验证码类。下载地址:

ajax.js:ajax技术的核心文件了,主要是验证提示的时时显示,这个文件通常不需要进行修改,只需要进行前端调用即可。

第一步:在我们相对应的控制器创建一个输出验证码方法

在哪里使用过滤器

在控制器中,定义:
public function behaviors(){
}

第二步:

var xmlHttp
function showHint(str)
{
if (str.length==0)
 { 
 document.getElementById("txtHint").innerHTML=""
 return
 }
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
 {
 alert ("Browser does not support HTTP Request")
 return
 } 
xmlHttp.onreadystatechange=stateChanged 

var geturl="conn.php?q="+str
//sid是增加一个随机数 防止页面启用缓存技术·
geturl=geturl+"&sid="+Math.random()
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); 
xmlHttp.open("GET",geturl,true)
xmlHttp.send(null)
} 
function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
 } 
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
 {
 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
 }
 catch (e)
 {
 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 }
return xmlHttp;
}
public function verify()
{
    $Verify = new ThinkControllerVerify();
    $Verify->fontSize = 20; // 字体大小
    $Verify->length = 6; // 多少个字符
    $Verify->useNoise = false; // 是否添加杂点
    $Verify->imageW = 233; // 验证码宽度
    $Verify->imageH = 50; // 验证码高度
    $Verify->entry();
}

过滤器详解

==behaviors()方法返回一个数组,类似于配置文件==
数组内的每一个元素也应该是一个数组,表示一个过滤器
如:

Public function behaviors(){
Return [
[
‘class’ => ‘实现类’,
]
];
}
表示定义了一个过滤器

 1.创建一个字的验证码文件

conn.php:这是网站的配置文件,要配置好自己本地的mysql用户名和密码,需要配置PHP与数据库的连接,可以参考PHP+MYSQL数据库连接的文章,另外要处理接受过来的数据进行时实显示,如果有多项要验证的文件,在这里进行多项接受和验证即可。

第二步:在页面输出我们的验证码

过滤器的位置

Yii2为开发者定义了很多的过滤器,可以直接拿过来使用。

必威 1

过滤器位置.png

 1 <?php 2  3 #引入验证码类文件 4 require_once('Verify.class.php'); 5  6 #实例化验证码类 7 #初始化的使用可以传四个参数,分别是:验证码图片的长、高,验证码的长度,验证码的类型(验证码的类型需要将bgRand属性设置为false) 8 $code = new Verify(140, 40, 6, 6); 9 10 #设置验证码图片的长度11 $code -> width = 200;12 13 #设置验证码图片的高度14 $code -> height = 60;15 16 #是否随机背景,默认true17 $code -> bgRand = false;18 19 #显示验证码20 $code -> verify();
<?php
$q=$_GET["q"];
$q = urldecode($q);

if (strlen($q) > 0)
{
 $conn = @mysql_connect("localhost","root","1010") or die ("MySql连接错误");
 mysql_select_db("xin",$conn);
 mysql_query("set names 'utf8'");

 $sql = "SELECT username FROM message WHERE username = '$q'";
 $query = mysql_query($sql);
 @$row = mysql_fetch_array($query);

 if(!empty($row['username']))
 {
 $response = "<font color=red>已经被注册!</font>";
 }else
 {
 $response = "<font color=blue>恭喜!可以注册!</font>";
 }

 echo $response;
}

?>
<img src="{:U('Admin/verify')}" class="verifyCode" name="admin_verify" title="点击刷新验证码">

定义过滤器

在Yii2中,自定义过滤器,需要继承 yiibaseActionFilter 类并覆盖 yiibaseActionFilter::beforeAction() 和/或 yiibaseActionFilter::afterAction() 方法来创建动作的过滤器
定义在beforeAction()中的代码会在操作执行之前执行
定义在afterAction()中的代码会在操作执行之后执行

如:创建一个过滤器,记录操作执行的时间
首先应该创建一个过滤器,比如在frontend 应用中创建一个 filters目录,专门用来存储过滤器,然后创建TimeFilter.php文件过滤器通常使用Filter.php作为文件后缀,而文件中应该有一个和文件名一样的类

必威 2

过滤器位置1.png

必威 3

过滤器.png

然后覆盖基础过滤器的 beforeAction 和 afterAction

必威 4

过滤器应用.png

在beforAction中,如果返回true表示放行,操作继续执行,如果返回false,表示停止,操作不再执行。

加载过滤器

必威 5

过滤器加载.png

需要注意的问题:
==定义过滤器内的beforeAction 和 afterAction ,必须返回父类的方法。
Return parent::beforeAction($action)==

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:今天为大家介绍的是thinkphp如何实现验证码的功能