本篇文章主要介紹了ThinkPHP3.2.3驗證碼顯示、刷新、校驗 ,具有一定的參考價值,有興趣的小伙伴們可以參考一下。
ThinkPHP3.2.3驗證碼顯示、重新整理、校驗,如下:
顯示驗證碼
首先在Home/Controller下建立一個公用控制器PublicController
<?php namespace Home\Controller; use Think\Controller; use Think\Verify; class PublicController extends Controller { /* 生成验证码 */ public function verify() { $config = [ 'fontSize' => 19, // 验证码字体大小 'length' => 4, // 验证码位数 'imageH' => 34 ]; $Verify = new Verify($config); $Verify->entry(); } /* 验证码校验 */ public function check_verify($code, $id = '') { $verify = new \Think\Verify(); $res = $verify->check($code, $id); $this->ajaxReturn($res, 'json'); } }
#verify函數用來產生驗證碼,config是用來設定顯示驗證碼的屬性。此屬性有哪些可設定項,可以查看Thinkphp/Library/Think/Verify.class.php文件,此處不再贅述。
check_verify函數用於校驗驗證碼的正確性。模板post使用者填寫的驗證碼到函數,回傳$res==true驗證通過false驗證失敗。
前台範本頁建立index.html
<p class=""> <label for="j_verify" class="t">验证码:</label> <input id="j_verify" name="j_verify" type="text" class="form-control x in"> <img id="verify_img" alt="点击更换" title="点击更换" src="{:U('public/verify',array())}" class="m"> </p>
#使用Thinkphp的U方法形成產生驗證碼的圖片。
點擊刷新驗證碼
從上面產生驗證碼的連結我們可以看出,網域名稱/public/verify即可產生驗證碼。 Thinkphp的驗證碼產生機制是,若我們需要產生新的驗證碼,在該連結後加入變數值即可。
我們可以考慮實作public/verify/變數值的形式URL。
$("#verify_img").click(function() { var verifyURL = "public/verify"; var time = new Date().getTime(); $("#verify_img").attr({ "src" : verifyURL + "/" + time }); });
使用JS取得目前時間戳記加入到URL之後即可。
到此我們即可實現驗證碼的點擊刷新功能。具體表現形式,自己隨意哈。
非同步校驗驗證碼
大家一定看過在某些網站,我們輸入驗證碼的時候,輸入的過程中文本框後面一直顯示錯誤,直到我們輸入爭取的時候會先提示驗證碼正確的形式。下面程式碼就可以實作:
$("#j_verify").keyup(function() { $.post("public/check_verify", { code : $("#j_verify").val() }, function(data) { if (data == true) { //验证码输入正确 } else { //验证码输入错误 } }); });
利用onekeyup。原理就不需要多講了吧!
這樣我們就可以實現在提交使用者名稱密碼之前先進行一次驗證碼校驗,之後表單提交之後再進行一次校驗,提升使用者體驗啦!
還沒結束:
當我們採取以上形式實作驗證碼兩次校驗的時候,一定會出現第一次非同步校驗成功,但是提交表單卻提示驗證碼錯誤的情況!其實原因還是出在Thinkphp的Verify.class.php上:
以下是該類別初始的config配置:
protected $config = array( 'seKey' => 'ThinkPHP.CN', // 验证码加密密钥 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', // 验证码字符集合 'expire' => 1800, // 验证码过期时间(s) 'useZh' => false, // 使用中文验证码 'zhSet' => '……此处不粘贴了,太多了!', // 中文验证码字符串 'useImgBg' => false, // 使用背景图片 'fontSize' => 25, // 验证码字体大小(px) 'useCurve' => false, // 是否画混淆曲线 'useNoise' => false, // 是否添加杂点 'imageH' => 0, // 验证码图片高度 'imageW' => 0, // 验证码图片宽度 'length' => 5, // 验证码位数 'fontttf' => '', // 验证码字体,不设置随机获取 'bg' => array(243, 251, 254), // 背景颜色 'reset' => true, // 验证成功后是否重置 );
請大家注意最後一個屬性reset 表示的是驗證成功後是否重置驗證碼。相信大家都明白了吧,我們進行第一次校驗通過之後,其實該驗證碼已經失效了,只不過因為我們採取的是異步校驗,頁面並沒有刷新,導致了第二次申請校驗的時候和系統產生的已經是不相同的了。所以如果大家喜歡這種兩次校驗的風格,可以考慮將reset配置為false即可。
好了,基於Thinkphp3.2.3的驗證碼問題今天就總結到這裡了。只是大概說了一下實現方法,具體內容還請大家參考TP官方手冊。如有錯誤之處,歡迎大家指出。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
#
以上是ThinkPHP3.2.3驗證碼的顯示與刷新以及校驗的詳細內容。更多資訊請關注PHP中文網其他相關文章!