thinkphp3.2検証コードの使い方を紹介する前に、まずThinkPHP検証コードを詳しく紹介します
ThinkPHPには検証コードサポートが組み込まれており、直接使用できます。検証コードを使用するには、拡張クラス ライブラリに ORG.Util.Image クラス ライブラリと ORG.Util.String クラス ライブラリをインポートする必要があります。
検証コードメソッド
検証コードを表示するためにモジュールクラスにverifyメソッドを追加します。 最も単純な例:
Public function verify(){ // 导入Image类库 import("ORG.Util.Image"); Image::buildImageVerify(); }
インポートメソッドは、上記でインポートされたThinkPHPの組み込みクラスライブラリとファイルインポートメソッドです。例 このファイルは、ThinkPHP システム ディレクトリにある Lib/ORG/Util/Image.class.php ファイルです。 Image クラス ライブラリが Lib/ORG などの現在のプロジェクトにコピーされている場合は、以下を使用できます。
import("@.Util.Image");
インポート メソッドは、ThinkPHP の組み込みクラス ライブラリとファイル インポート メソッドです。上記の例でインポートされたファイルは、次のとおりです。これは、ThinkPHP システム ディレクトリの Lib/ORG/Util/Image.class.php ファイルにあります。
認証コードにアクセスする
ブラウザで認証コードメソッドに直接アクセスして、認証コードが正常に表示できるかどうかを確認できます:
http://127.0.0.1/index.php/Public/verify
すべてが正常であれば、検証コードは次のように表示されます。 表示:
フォームで検証コードを使用する
フォームページで検証コードを使用する場合は、HTML img タグで呼び出されます:
<input type="text" name="verify"> <img id="verifyImg" src="-Article-verify" onClick="changeVerify()" title="点击刷新验证码" / alt="thinkphp3.2 [更新] をクリックして検証コードを生成する" >
src 属性値は検証コードのメソッドですアクセスアドレスは実際の状況によって異なります。
検証コードの更新
検証コードの画像をクリックすると、JavaScriptのchangeVerify()関数がトリガーされて検証コードを再読み込みし、それによって検証コードが更新されます。この関数のリファレンスは以下の通りです:
<script language="JavaScript"> function changeVerify(){ var timenow = new Date().getTime(); document.getElementById('verifyImg').src='-Article/verify/'+timenow; } </script>
検証コード検証
検証コードverifyを呼び出すと、buildImageVerifyはこの検証コードのMD5情報を記録します。フォーム検証操作では、次のメソッドを使用して検証コードが正しいかどうかを確認します。
if($_SESSION['verify'] != md5($_POST['verify'])) { $this->error('验证码错误!'); }
$_SESSION['verify'] の検証名は、buildImageVerify メソッドのデフォルトの SESSION 登録名です。 詳細については、を参照してください。 buildImageVerify 構文。
上記の例は、ThinkPHP 検証コードを使用する最も簡単な方法を示しています。上記の例の検証コードは 4 桁です。他の形式の検証コードや中国語の検証コードを使用したい場合は、このセクションの残りの部分「ThinkPHP はさまざまな形式と中国語の検証コードを使用する」を参照してください。
認証コードが表示されない原因
以下のような原因が考えられます。
1. PHPにGDライブラリサポートがインストールされているかどうか。
2. 出力前に何か出力があるか(特にUTF8のBOMヘッダー情報の出力)。
3. Image クラス ライブラリが正しくインポートされているかどうか。
4. フォームページの場合は、認証コード表示メソッドが正しく呼び出されているか確認してください。
以下にthinkphp3.2の検証コード生成と更新検証コードの実装方法を紹介します
1.検証コードを生成するクラスをインスタンス化します(このメソッドはIndexControllerに配置します)。 easy access)
/** * * 验证码生成 */ 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(); }
<p class="top15 captcha" id="captcha-container"> <input name="verify" width="50%" height="50" class="captcha-text" placeholder="验证码" type="text"> <img width="30%" class="left15" style="max-width:90%" alt="验证码" src="{:U('Home/Index/verify_c',array())}" title="点击刷新"> </p>
// 验证码生成 var captcha_img = $('#captcha-container').find('img') var verifyimg = captcha_img.attr("src"); captcha_img.attr('title', '点击刷新'); captcha_img.click(function(){ if( verifyimg.indexOf('?')>0){ $(this).attr("src", verifyimg+'&random='+Math.random()); }else{ $(this).attr("src", verifyimg.replace(/\?.*$/,'')+'?'+Math.random()); } });
a. グローバル関数
/** * 验证码检查 */ function check_verify($code, $id = ""){ $verify = new \Think\Verify(); return $verify->check($code, $id); }
// 检查验证码 $verify = I('param.verify',''); if(!check_verify($verify)){ $this->error("亲,验证码输错了哦!",$this->site_url,9); }
補足: 書いているときに、検証用に4番目のステップbをajaxに入れてテスト結果を返しました。その後、返された結果に基づいてフォームを送信するかどうかを決定しますが、検証コードが最初の検証に合格した後、2 回目の検証が機能しません。