thinkphp3.2點(diǎn)擊刷新生成驗(yàn)證碼
再介紹thinkphp3.2驗(yàn)證碼的使用方法之前,先為大家詳細(xì)介紹ThinkPHP 驗(yàn)證碼,具體內(nèi)容如下
ThinkPHP 內(nèi)置了驗(yàn)證碼的支持,可以直接使用。要使用驗(yàn)證碼,需要導(dǎo)入擴(kuò)展類庫(kù)中的 ORG.Util.Image 類庫(kù)和 ORG.Util.String 類庫(kù)。
驗(yàn)證碼方法
我們通過(guò)在在模塊類中增加一個(gè) verify 方法來(lái)用于顯示驗(yàn)證碼,最簡(jiǎn)單的例子:
Public function verify(){
// 導(dǎo)入Image類庫(kù)
import("ORG.Util.Image");
Image::buildImageVerify();
}
import 方法是 ThinkPHP 內(nèi)置的類庫(kù)和文件導(dǎo)入方法,上例導(dǎo)入的文件為 ThinkPHP 系統(tǒng)目錄下 Lib/ORG/Util/Image.class.php 文件。如果已經(jīng)將 Image 類庫(kù)拷貝到了當(dāng)前項(xiàng)目下,如 Lib/ORG 下,則可以以:
import("@.Util.Image");
import 方法是 ThinkPHP 內(nèi)置的類庫(kù)和文件導(dǎo)入方法,上例導(dǎo)入的文件為 ThinkPHP 系統(tǒng)目錄下 Lib/ORG/Util/Image.class.php 文件。
訪問(wèn)驗(yàn)證碼
可以直接在瀏覽器里訪問(wèn)該驗(yàn)證碼方法以確定驗(yàn)證碼是否能正常顯示:
http://127.0.0.1/index.php/Public/verify
如果一切正常,顯示驗(yàn)證碼如下所示:

表單中使用驗(yàn)證碼
在表單頁(yè)面中使用驗(yàn)證碼,是以 html img標(biāo)簽 來(lái)調(diào)用:
<input type="text" name="verify"> <img id="verifyImg" src="-Article-verify" onClick="changeVerify()" title="點(diǎn)擊刷新驗(yàn)證碼" />
src 屬性值即為驗(yàn)證碼方法訪問(wèn)地址,視實(shí)際情況不同而不同。
驗(yàn)證碼刷新
當(dāng)點(diǎn)擊驗(yàn)證碼圖片時(shí),觸發(fā) JavaScript changeVerify() 函數(shù)重新讀取驗(yàn)證碼,從而實(shí)現(xiàn)驗(yàn)證碼刷新。該函數(shù)參考如下:
<script language="JavaScript">
function changeVerify(){
var timenow = new Date().getTime();
document.getElementById('verifyImg').src='-Article/verify/'+timenow;
}
</script>
驗(yàn)證碼驗(yàn)證
在調(diào)用驗(yàn)證碼 verify 的時(shí)候,buildImageVerify 會(huì)記錄本次驗(yàn)證碼的 MD5 信息。在表單驗(yàn)證操作里,以如下方法來(lái)檢查驗(yàn)證碼是否正確:
if($_SESSION['verify'] != md5($_POST['verify'])) {
$this->error('驗(yàn)證碼錯(cuò)誤!');
}
其中 $_SESSION['verify'] 中的 verify 名稱為 buildImageVerify 方法默認(rèn) SESSION 注冊(cè)名稱,具體見(jiàn) buildImageVerify 語(yǔ)法。
上面例子演示了最簡(jiǎn)單的 ThinkPHP 驗(yàn)證碼的使用方法。上面的例子驗(yàn)證碼是 4 位數(shù)字,如果想使用更多風(fēng)格的驗(yàn)證碼以及中文驗(yàn)證碼,參見(jiàn)本節(jié)其余部分內(nèi)容:《ThinkPHP 使用不同風(fēng)格及中文的驗(yàn)證碼》。
驗(yàn)證碼不顯示原因
如下發(fā)現(xiàn)無(wú)法顯示驗(yàn)證碼,可能的原因如下:
1、PHP 是否已經(jīng)安裝 GD 庫(kù)支持。
2、輸出之前是否有任何的輸出(尤其是 UTF8 的 BOM 頭信息輸出)。
3、Image 類庫(kù)是否正確導(dǎo)入。
4、如果是表單頁(yè)面,請(qǐng)查看是否正確調(diào)用了驗(yàn)證碼顯示方法。
下面就為大家介紹 thinkphp3.2 驗(yàn)證碼生成和點(diǎn)擊刷新驗(yàn)證碼的實(shí)現(xiàn)方法,具體內(nèi)容如下
一、實(shí)例化生成驗(yàn)證碼的類(該方法放到IndexController里面便于訪問(wèn))
/**
*
* 驗(yàn)證碼生成
*/
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();
}
二、前臺(tái)需要生成驗(yàn)證碼的圖片src屬性指向
<p class="top15 captcha" id="captcha-container">
<input name="verify" width="50%" height="50" class="captcha-text" placeholder="驗(yàn)證碼" type="text">
<img width="30%" class="left15" height="50" alt="驗(yàn)證碼" src="{:U('Home/Index/verify_c',array())}" title="點(diǎn)擊刷新">
</p>
三、寫(xiě)完上面的后,頁(yè)面初始化的驗(yàn)證碼就可以出現(xiàn)了,下面要寫(xiě)的就是點(diǎn)擊驗(yàn)證碼圖片后,刷新出新的驗(yàn)證碼圖片(通過(guò)jquery修改圖片的src屬性來(lái)完成,請(qǐng)求的處理函數(shù)一樣,只是在請(qǐng)求后加一個(gè)隨機(jī)數(shù),區(qū)別上一張圖片的請(qǐng)求)
// 驗(yàn)證碼生成
var captcha_img = $('#captcha-container').find('img')
var verifyimg = captcha_img.attr("src");
captcha_img.attr('title', '點(diǎn)擊刷新');
captcha_img.click(function(){
if( verifyimg.indexOf('?')>0){
$(this).attr("src", verifyimg+'&random='+Math.random());
}else{
$(this).attr("src", verifyimg.replace(/\?.*$/,'')+'?'+Math.random());
}
});
四、校驗(yàn)驗(yàn)證碼輸入是否正確
a.在common目錄下的function.php里加入全局函數(shù)
/**
* 驗(yàn)證碼檢查
*/
function check_verify($code, $id = ""){
$verify = new \Think\Verify();
return $verify->check($code, $id);
}
b.在表單提交的controller對(duì)應(yīng)的處理方法里添加檢查代碼
// 檢查驗(yàn)證碼
$verify = I('param.verify','');
if(!check_verify($verify)){
$this->error("親,驗(yàn)證碼輸錯(cuò)了哦!",$this->site_url,9);
}
到此tp3.2驗(yàn)證碼的使用就可以了。
補(bǔ)充:我在寫(xiě)的時(shí)候?qū)⑺牡腷步驟放到一個(gè)ajax里驗(yàn)證,返回一次檢驗(yàn)結(jié)果。然后再依據(jù)返回結(jié)果確定是否要提交表單,但是在驗(yàn)證碼通過(guò)第一次的校驗(yàn)后,第二次的就不可以了,目前還沒(méi)想明白原因。
這就是本文的全部?jī)?nèi)容,文章最后還有一個(gè)小小的疑問(wèn),希望大家可以想出解決辦法,也希望本文對(duì)大家的學(xué)習(xí)有所幫助。
- ThinkPHP5.0框架驗(yàn)證碼功能實(shí)現(xiàn)方法【基于第三方擴(kuò)展包】
- thinkPHP5.0框架驗(yàn)證碼調(diào)用及點(diǎn)擊圖片刷新簡(jiǎn)單實(shí)現(xiàn)方法
- 完美解決thinkphp驗(yàn)證碼出錯(cuò)無(wú)法顯示的方法
- ThinkPHP驗(yàn)證碼使用簡(jiǎn)明教程
- ThinkPHP打開(kāi)驗(yàn)證碼頁(yè)面顯示亂碼的解決方法
- 詳解ThinkPHP3.2.3驗(yàn)證碼顯示、刷新、校驗(yàn)
- thinkphp自帶驗(yàn)證碼全面解析
- thinkPHP中驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn)方法
- ThinkPHP3.2.1圖片驗(yàn)證碼實(shí)現(xiàn)方法
- ThinkPHP驗(yàn)證碼和分頁(yè)實(shí)例教程
- tp5(thinkPHP5框架)captcha驗(yàn)證碼配置及驗(yàn)證操作示例
相關(guān)文章
PHP入門教程之字符串處理技巧總結(jié)(轉(zhuǎn)換,過(guò)濾,解析,查找,截取,替換等)
這篇文章主要介紹了PHP入門教程之字符串處理技巧,結(jié)合實(shí)例形式總結(jié)分析了php針對(duì)字符串的刪除空格、特殊字符轉(zhuǎn)換、過(guò)濾、解析、分割、查找、截取、替換、獲取、判斷、計(jì)算等操作技巧,需要的朋友可以參考下2016-09-09
PHP簡(jiǎn)潔函數(shù)(PHP簡(jiǎn)單明了函數(shù)語(yǔ)法)
筆者由于碰到用戶多次修改頁(yè)面,所以在麻煩的情況下,改用php完成技術(shù)開(kāi)發(fā),這篇文章主要記錄PHP簡(jiǎn)潔函數(shù),講述PHP簡(jiǎn)單明了函數(shù)語(yǔ)法,適合人群為對(duì)開(kāi)源社區(qū)感興趣,對(duì)php感興趣,有一點(diǎn)時(shí)間了解下php,希望對(duì)讀者帶來(lái)快樂(lè)2012-06-06
PHP實(shí)現(xiàn)的限制IP投票程序IP來(lái)源分析
這篇文章主要介紹了PHP實(shí)現(xiàn)的限制IP投票程序,針對(duì)投票程序中客戶端IP的判斷方法進(jìn)行了深入分析,并給出了偽造IP的方法供大家參考了解,需要的朋友可以參考下2016-05-05
PHP實(shí)現(xiàn)將Word文件保存到SQL Server數(shù)據(jù)庫(kù)
這篇文章主要介紹了如何利用PHP實(shí)現(xiàn)將上傳的Word文件保存到SQL Server數(shù)據(jù)庫(kù),文中的示例代碼講解詳細(xì),需要的可以參考一下2022-02-02

