詳解ThinkPHP3.2.3驗(yàn)證碼顯示、刷新、校驗(yàn)
ThinkPHP3.2.3驗(yàn)證碼顯示、刷新、校驗(yàn) ,具體如下:
顯示驗(yàn)證碼
首先在Home/Controller下創(chuàng)建一個(gè)公共控制器PublicController
<?php namespace Home\Controller; use Think\Controller; use Think\Verify; class PublicController extends Controller { /* 生成驗(yàn)證碼 */ public function verify() { $config = [ 'fontSize' => 19, // 驗(yàn)證碼字體大小 'length' => 4, // 驗(yàn)證碼位數(shù) 'imageH' => 34 ]; $Verify = new Verify($config); $Verify->entry(); } /* 驗(yàn)證碼校驗(yàn) */ public function check_verify($code, $id = '') { $verify = new \Think\Verify(); $res = $verify->check($code, $id); $this->ajaxReturn($res, 'json'); } }
verify函數(shù)用于生成驗(yàn)證碼,config是用來配置顯示驗(yàn)證碼的屬性。該屬性有哪些可配置項(xiàng),可以查看Thinkphp/Library/Think/Verify.class.php文件,此處不再贅述。
check_verify函數(shù)用于校驗(yàn)驗(yàn)證碼的正確性。模板post用戶填寫的驗(yàn)證碼到該函數(shù),返回$res==true驗(yàn)證通過false驗(yàn)證失敗。
前臺(tái)模板頁(yè)建立index.html
<div class=""> <label for="j_verify" class="t">驗(yàn)證碼:</label> <input id="j_verify" name="j_verify" type="text" class="form-control x in"> <img id="verify_img" alt="點(diǎn)擊更換" title="點(diǎn)擊更換" src="{:U('public/verify',array())}" class="m"> </div>
使用Thinkphp的U方法形成生成驗(yàn)證碼的圖片。
點(diǎn)擊刷新驗(yàn)證碼
從上面產(chǎn)生驗(yàn)證碼的鏈接我們可以看出,域名/public/verify即可產(chǎn)生驗(yàn)證碼。Thinkphp的驗(yàn)證碼生成機(jī)制是,如若我們需要產(chǎn)生新的驗(yàn)證碼,在該鏈接后加入一個(gè)變量值即可。
我們可以考慮實(shí)現(xiàn)public/verify/變量值的形式URL。
$("#verify_img").click(function() { var verifyURL = "public/verify"; var time = new Date().getTime(); $("#verify_img").attr({ "src" : verifyURL + "/" + time }); });
利用JS獲取當(dāng)前時(shí)間戳加入到URL之后即可。
到此我們即可實(shí)現(xiàn)驗(yàn)證碼的點(diǎn)擊刷新功能。具體表現(xiàn)形式,自己隨意哈。
異步校驗(yàn)驗(yàn)證碼
大家一定見過在某些網(wǎng)站,我們輸入驗(yàn)證碼的時(shí)候,輸入的過程中文本框后面一直顯示錯(cuò)誤,直到我們輸入爭(zhēng)取的時(shí)候會(huì)先提示驗(yàn)證碼正確的形式。下面代碼就可以實(shí)現(xiàn):
$("#j_verify").keyup(function() { $.post("public/check_verify", { code : $("#j_verify").val() }, function(data) { if (data == true) { //驗(yàn)證碼輸入正確 } else { //驗(yàn)證碼輸入錯(cuò)誤 } }); });
利用onekeyup。原理就不需要多講了吧!
這樣我們就可以實(shí)現(xiàn)在提交用戶名密碼之前先進(jìn)行一次驗(yàn)證碼校驗(yàn),之后表單提交之后再進(jìn)行一次校驗(yàn),提升用戶體驗(yàn)啦!
還沒結(jié)束:
當(dāng)我們采取以上形式實(shí)現(xiàn)驗(yàn)證碼兩次校驗(yàn)的時(shí)候,肯定會(huì)出現(xiàn)第一次異步校驗(yàn)成功,但是提交表單卻提示驗(yàn)證碼錯(cuò)誤的情況!其實(shí)原因還是出在Thinkphp的Verify.class.php上:
以下是該類初始的config配置:
protected $config = array( 'seKey' => 'ThinkPHP.CN', // 驗(yàn)證碼加密密鑰 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', // 驗(yàn)證碼字符集合 'expire' => 1800, // 驗(yàn)證碼過期時(shí)間(s) 'useZh' => false, // 使用中文驗(yàn)證碼 'zhSet' => '……此處不粘貼了,太多了!', // 中文驗(yàn)證碼字符串 'useImgBg' => false, // 使用背景圖片 'fontSize' => 25, // 驗(yàn)證碼字體大小(px) 'useCurve' => false, // 是否畫混淆曲線 'useNoise' => false, // 是否添加雜點(diǎn) 'imageH' => 0, // 驗(yàn)證碼圖片高度 'imageW' => 0, // 驗(yàn)證碼圖片寬度 'length' => 5, // 驗(yàn)證碼位數(shù) 'fontttf' => '', // 驗(yàn)證碼字體,不設(shè)置隨機(jī)獲取 'bg' => array(243, 251, 254), // 背景顏色 'reset' => true, // 驗(yàn)證成功后是否重置 );
請(qǐng)大家注意最后一個(gè)屬性reset 表示的是驗(yàn)證成功后是否重置驗(yàn)證碼。相信大家都明白了吧,我們進(jìn)行第一次校驗(yàn)通過之后,其實(shí)該驗(yàn)證碼已經(jīng)失效了,只不過因?yàn)槲覀儾扇〉氖钱惒叫r?yàn),頁(yè)面并沒有刷新,導(dǎo)致了第二次申請(qǐng)校驗(yàn)的時(shí)候和系統(tǒng)產(chǎn)生的已經(jīng)是不相同的了。所以如果大家喜歡這種兩次校驗(yàn)的風(fēng)格,可以考慮將reset配置為false即可。
好了,基于Thinkphp3.2.3的驗(yàn)證碼問題今天就總結(jié)到這了。只是大概說了一下實(shí)現(xiàn)方法,具體內(nèi)容還請(qǐng)大家參考TP官方手冊(cè)。如有錯(cuò)誤之處,歡迎大家指出。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ThinkPHP5.1驗(yàn)證碼功能實(shí)現(xiàn)的示例代碼
- ThinkPHP5&5.1實(shí)現(xiàn)驗(yàn)證碼的生成、使用及點(diǎn)擊刷新功能示例
- thinkphp5.1驗(yàn)證碼及驗(yàn)證碼驗(yàn)證功能的實(shí)現(xiàn)詳解
- tp5(thinkPHP5框架)captcha驗(yàn)證碼配置及驗(yàn)證操作示例
- thinkPHP5.0框架驗(yàn)證碼調(diào)用及點(diǎn)擊圖片刷新簡(jiǎn)單實(shí)現(xiàn)方法
- thinkPHP框架實(shí)現(xiàn)的短信接口驗(yàn)證碼功能示例
- thinkPHP實(shí)現(xiàn)的驗(yàn)證碼登錄功能示例
- thinkPHP中驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn)方法
- thinkphp自帶驗(yàn)證碼全面解析
- Thinkphp極驗(yàn)滑動(dòng)驗(yàn)證碼實(shí)現(xiàn)步驟解析
相關(guān)文章
如何使用PHP獲取指定日期所在月的開始日期與結(jié)束日期
以下是對(duì)PHP獲取指定日期所在月的開始日期與結(jié)束日期的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08php微信高級(jí)接口調(diào)用方法(自定義菜單接口、客服接口、二維碼)
這篇文章主要為大家詳細(xì)介紹了php微信高級(jí)接口調(diào)用方法,包括自定義菜單接口、客服接口、二維碼等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11thinkphp框架表單數(shù)組實(shí)現(xiàn)圖片批量上傳功能示例
這篇文章主要介紹了thinkphp框架表單數(shù)組實(shí)現(xiàn)圖片批量上傳功能,結(jié)合實(shí)例形式分析了js前端圖片上傳與后臺(tái)thinkPHP文件處理相關(guān)操作技巧,需要的朋友可以參考下2020-04-04codeigniter集成ucenter1.6雙向通信的解決辦法
用codeigniter開發(fā)一個(gè)子網(wǎng)站,之后想和原來的論壇進(jìn)行同步,包括同步登陸和雙向通信。這篇文章主要介紹了codeigniter集成ucenter1.6雙向通信的解決辦法,需要的朋友可以參考下2014-06-06一個(gè)php Mysql類 可以參考學(xué)習(xí)熟悉下
慢慢研究吧,非常適合學(xué)習(xí)的php數(shù)據(jù)庫(kù)(mysql)類,也可以拿來直接就用,稍微熟悉一下就可以啦!2009-06-06微信小程序之支付后調(diào)用SDK的異步通知及驗(yàn)證處理訂單方法
下面小編就為大家分享一篇微信小程序之支付后調(diào)用SDK的異步通知及驗(yàn)證處理訂單方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2018-01-01Thinkphp5框架使用validate實(shí)現(xiàn)驗(yàn)證功能的方法
這篇文章主要介紹了Thinkphp5框架使用validate實(shí)現(xiàn)驗(yàn)證功能的方法,結(jié)合實(shí)例形式分析了tp5內(nèi)置的對(duì)象validate實(shí)現(xiàn)驗(yàn)證的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08