ThinkPhp架構:驗證碼功能

來源:互聯網
上載者:User

標籤:png   小數   焦點   它的   文字框   添加   show   否則   rip   

Think\Verify類可以支援驗證碼的產生和驗證功能。

為了顯示這個驗證碼功能,第一要有控制器,再就是有方法,然後是顯示的頁面。

一、最簡單的方式產生驗證碼

(1)我們還是繼續在那個控制器編寫方法

這個方法顯示這個驗證碼的頁面

public function xianshi(){    $this->show();  }
public function shengcheng(){    //造驗證碼的對象    $v = new \Think\Verify();    //產生驗證碼    $v->entry();}

(2)顯示驗證碼的頁面,還是放在中,命名為

<img src="__CONTROLLER__/shengcheng" />

 運行一下看下結果~~

(3)我們還可以給他設定大小,每重新整理一次頁面,驗證碼都會改變

只要給他個屬性就可以了,例如

<img src="__CONTROLLER__/shengcheng" width="300" height="100" />

寬和高都變大

二、文字框輸入驗證碼(讓文字框輸入的驗證碼和顯示的驗證碼是否匹配)

(1)先要在顯示頁面做一個文字框,來顯示使用者看到的內容

<img src="__CONTROLLER__/shengcheng" width="300" height="100" /><div>請輸入驗證碼:<input type="text" name="yzm" /></div>

我們也要做一個提示的行:用來顯示提示資訊

<span id="tishi"></span>  

(2)用ajax來做這個事件

失去焦點時觸發事件

<script type="text/javascript">    $("#yzm").blur(function(){        var yzm = $(this).val(); //找到這個文字框中的值        $.ajax({            url:"__ACTION__",  //發送給他自己            data:{yzm:yzm}, //將文字框中的值傳過去            type:"POST",  //傳輸方式            dataType:"TEXT",            success: function(data){<br>                  //返回成功後的操作            }        })    })</script>

 (3)在控制器中顯示xianshi方法中的判斷驗證碼是不是正確 

public function xianshi(){    if(empty($_POST))    {        $this->show();   //顯示頁面    }    else    {        //驗證驗證碼是否正確,可以用Think\Verify類的check方法檢測驗證碼的輸入是否正確        $yzm = $_POST["yzm"];   //接收傳過來的文字框的值        $v = new \Think\Verify();        if($v->check($yzm))  //驗證完是有傳回值的,所以我們可以用if判斷一下        {            $this->ajaxReturn("ok","eval");  //輸入正確返回ok        }        else        {            $this->ajaxReturn("no","eval");    //輸入錯誤返回no           }      }}

(4)ajax中返回成功地方的書寫

success: function(data){    if(data.trim()=="ok")    {        //返回成功過就輸出提示資訊        $("#tishi").html("驗證通過!");         $("#tishi").css("color","green");    }    else    {        //否則就返回錯誤的提示資訊        $("#tishi").html("驗證碼輸入錯誤!");          $("#tishi").css("color","red");    }}

下面就是啟動並執行實驗了:

首先是輸入正確的驗證碼,提示正確的資訊

輸入錯誤或是沒有輸入時,就會提示錯誤資訊

三、如果一個頁面有兩個驗證碼

(1)這樣顯示的頁面要有一個驗證碼顯示的地方,裡面的方法我們是shengcheng1

<img src="__CONTROLLER__/shengcheng1" width="300" height="100" />

 (2)控制器的方法也要寫個shengcheng1

public function shengcheng1(){  //造驗證碼的對象  $v = new \Think\Verify();  //產生驗證碼,標識是2  $v->entry(2);         }  

 

注意:如果有兩個驗證碼,就要進行標識,讓他們知道是誰的驗證碼

這樣第一個方法也要加標識

public function shengcheng(){  //造驗證碼的對象  $v = new \Think\Verify();  //產生驗證碼,標識是1  $v->entry(1);         }

 然後在check方法中寫入一個標識,就是要驗證哪一個的標識,這裡我們要驗證第二個吧

if($v->check($yzm,2))  //check的參數,一個是文字框中的值,第二個參數就是那個標識{    $this->ajaxReturn("ok","eval");  //輸入正確返回ok}else{    $this->ajaxReturn("no","eval");    //輸入錯誤返回no   }  

 看下結果,輸入第二個驗證碼

四、驗證碼的變換

想要變換驗證碼的圖片,其實就是重新請求那個產生驗證碼的方法就可以了

(1)先要把調換驗證碼的圖片起個名字,如下

<img src="__CONTROLLER__/shengcheng1" width="300" height="100" id="img2" />

 (2)然後就是給這個圖片添加點擊事件,修改屬性就可以了

$("#img2").click(function(){  //修改一些屬性就可以了,修改src的屬性  $(this).attr("src","__CONTROLLER__/shengcheng1");})

 運行看下結果,點擊一次就會變圖片 

    

注意:有時候瀏覽器不同也會有bug,所以我們要加一個東西,讓它適應任何的瀏覽器,可以這樣寫

$("#img2").click(function(){    var sj = Math.random();  //產生隨機數    var sz = sj.toFixed(2);  //取小數點後兩位    //修改一些屬性就可以了,修改src的屬性    $(this).attr("src","__CONTROLLER__/shengcheng1/a"+sz);   //拼接上截取後的隨機數})

 

這樣IE瀏覽器也是可以換圖的了

五、其他的關於驗證碼的參數

這些參數都可以給驗證碼有些變換

 

注意:參數的設定有兩種方法

一是執行個體化傳入參數:

$config = array(       ‘fontSize‘    =>    30,    // 驗證碼字型大小       ‘length‘      =>    3,     // 驗證碼位元       ‘useNoise‘    =>    false, // 關閉驗證碼雜點);$Verify = new \Think\Verify($config);$Verify->entry();

 二是動態設定:

$Verify = new \Think\Verify();$Verify->fontSize = 30;$Verify->length   = 3;$Verify->useNoise = false;$Verify->entry();

 

六、驗證碼是中文

注意:要是用中文的,要在一個檔案夾中加入字型(這個檔案夾預設是空的)

電腦內建的字型是在檔案夾中

注意放置中文字型的路徑:ThinkPHP/Library/Think/Verify/zhttfs/ 目錄下面

加入字型後,可以設定出現中文的驗證碼了:

public function shengcheng1(){    //造驗證碼的對象    $v = new \Think\Verify();    $v->fontSize = 50;    $v->length   = 2;    //$v->fontttf = "6.ttf";   //使用定義好的字型    $v->useZh = true;  //使用中文字型    //產生驗證碼,標識是2    $v->entry(2);         }

到此結束,驗證碼的功能~~~  

驗證碼所用的所有字元,都是存在它的父類中的,有空可以看下~~~

  

 

 

 

 

 

 

 

 

  

  

  

  

  

 

  

  

ThinkPhp架構:驗證碼功能

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.