Thinkphp 表單驗證

在服務器端經過tp框架實現表單驗證php

用戶名、密碼、重複密碼、郵箱、qq、手機號碼、愛好、學歷html

具體步驟:數據庫

  1. 製做表單
  2. 表單form數據經過create()方法收集(驗證功能要求咱們必須經過create()方法收集數據)
  3. 自定義數據model模型類實現具體驗證規則

自動驗證是ThinkPHP模型層提供的一種數據驗證方法,能夠在使用create建立數據對象的時候自動進行數據驗證。安全

數據驗證能夠進行數據類型、業務規則、安全判斷等方面的驗證操做。服務器

數據驗證有兩種方式:框架

  1. 靜態方式:在模型類裏面經過$_validate屬性定義驗證規則。
  2. 動態方式:使用模型類的validate方法動態建立自動驗證規則。

不管是什麼方式,驗證規則的定義是統一的規則,定義格式爲:ide

 

說明post

驗證字段 (必須)

須要驗證的表單字段名稱,這個字段不必定是數據庫字段,也能夠是表單的一些輔助字段,例如確認密碼和驗證碼等等。有個別驗證規則和字段無關的狀況下,驗證字段是能夠隨意設置的,例如expire有效期規則是和表單字段無關的。若是定義了字段映射的話,這裏的驗證字段名稱應該是實際的數據表字段而不是表單字段。ui

驗證規則 (必須)

要進行驗證的規則,須要結合附加規則,若是在使用正則驗證的附加規則狀況下,系統還內置了一些經常使用正則驗證的規則,能夠直接做爲驗證規則使用,包括:require 字段必須、email 郵箱、url URL地址、currency 貨幣、number 數字。this

提示信息 (必須)

用於驗證失敗後的提示信息定義

驗證條件 (可選)

包含下面幾種狀況:

  • self::EXISTS_VALIDATE 或者0 存在字段就驗證(默認)
  • self::MUST_VALIDATE 或者1 必須驗證
  • self::VALUE_VALIDATE或者2 值不爲空的時候驗證
附加規則 (可選)

配合驗證規則使用,包括下面一些規則: 

 

驗證時間(可選)
  • self::MODEL_INSERT或者1新增數據時候驗證
  • self::MODEL_UPDATE或者2編輯數據時候驗證
  • self::MODEL_BOTH或者3所有狀況下驗證(默認)

這裏的驗證時間須要注意,並不是只有這三種狀況,你能夠根據業務須要增長其餘的驗證時間。

靜態定義:

在模型類裏面預先定義好該模型的自動驗證規則,咱們稱爲靜態定義。

Home/Controller/ZhuCeController.class.php:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class ZhuCeController extends Controller
 5 {
 6     
 7     function ZhuCe()
 8     {
 9         $cw="";
10         if(!empty($_GET))
11         {
12             $cw=$_GET["cw"];    
13         }
14         if(empty($_POST))
15         {
16             $this->assign("error",$cw);
17             $this->display();
18         }
19         else
20         {            
21             $model=new\Home\Model\TextModel();
22             //$model=D("Text");
23             if(!$model->create())//有返回值
24             {
25                 $e=$model->getError();
26                 $url="ZhuCe/cw/{$e}";
27                 $this->error("註冊失敗!",$url,1);
28             }
29             else
30             {
31                 $model->add();    
32     
33             }
34 
35         }        
36         
37     }
38 }
View Code

Model/TextModel.class.php:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 class TextModel extends Model
 5 {    
 6     protected $_validate=array(
 7     array('uid','require','用戶名不能爲空!'),
 8     array('pwd','require','密碼不能爲空!'),
 9     array('pwd','pwd1','兩次輸入的密碼不一致!',1,'confirm'),
10     array('age','18,50','年齡必須在18-50歲之間!',1,'between'),
11     array('email','email','郵箱格式不正確!'),
12     array('email','','郵箱已被註冊!',1,'unique'),//unique能夠驗證非主鍵字段
13     ); 
14 }
View Code

View/Zhuce/ZhuCe.html:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>表單驗證</title>
 6 </head>
 7 
 8 <body>
 9 <form action="__ACTION__" method="post">
10 <div>用戶名:<input type="text" name="uid" /></div><br />
11 <div>密&nbsp;&nbsp;&nbsp;&nbsp;碼:<input type="text" name="pwd" /></div>
12 <div>確認密碼:<input type="text" name="pwd1" /></div><br />
13 <div>年齡:<input type="text" name="age" /></div><br />
14 <div>郵箱:<input type="text" name="email" /></div><br />
15 <div>姓名:<input type="text" name="name" /></div><br />
16 <!--顯示錯誤信息 -->
17 <div style=" width:200px; height:30px; border:#F00 solid 2px; line-height:30px; vertical-align:middle; text-align:center;"><{$error}></div><br />
18 <div><input type="submit" value="註冊" /></div>
19 </form>
20 </body>
21 </html>
View Code

 

運行結果:

結果1:

   

==>     

 

結果2:

           ==>      

 

在進行自動驗證的時候,系統會對定義好的驗證規則進行依次驗證。若是某一條驗證規則沒有經過,則會報錯,getError方法返回的錯誤信息(字符串)就是對應字段的驗證規則裏面的錯誤提示信息。

 

 

動態驗證:

若是採用動態驗證的方式,就比較靈活,能夠根據不一樣的須要,在操做同一個模型的時候使用不一樣的驗證規則

Home/Controller/ZhuCeController.class.php:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class ZhuCeController extends Controller
 5 {
 6     
 7     function ZhuCe()
 8     {
 9         $cw="";
10         if(!empty($_GET))
11         {
12             $cw=$_GET["cw"];    
13         }
14         if(empty($_POST))
15         {
16             $this->assign("error",$cw);
17             $this->display();
18         }
19         else
20         {            
21             //動態驗證:
22             $model=new \Home\Model\TestModel();
23             $rules=array(
24                 array('uid','require','用戶名不能爲空!'),
25                 array('pwd','require','密碼不能爲空!'),
26                 array('pwd','pwd1','兩次輸入的密碼不一致!',1,'confirm'),
27                 array('age','18,50','年齡必須在18-50歲之間!',1,'between'),
28                 array('email','email','郵箱格式不正確!'),
29                 array('email','','郵箱已被註冊!',1,'unique'),//unique能夠驗證非主鍵字段
30             );
31             
32             if(!$model->validate($rules)->create())
33             {
34                 echo $model->getError();
35             }
36             else
37             {
38                 $model->add();    
39     
40             }
41         }        
42         
43     }
44 }
View Code

Model/TextModel.class.php:(空模型)

1 <?php
2 namespace Home\Model;
3 use Think\Model;
4 class TextModel extends Model
5 {    
6     
7 }
View Code

View/Zhuce/ZhuCe.html:(同靜態驗證)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>表單驗證</title>
 6 </head>
 7 
 8 <body>
 9 <form action="__ACTION__" method="post">
10 <div>用戶名:<input type="text" name="uid" /></div><br />
11 <div>密&nbsp;&nbsp;&nbsp;&nbsp;碼:<input type="text" name="pwd" /></div>
12 <div>確認密碼:<input type="text" name="pwd1" /></div><br />
13 <div>年齡:<input type="text" name="age" /></div><br />
14 <div>郵箱:<input type="text" name="email" /></div><br />
15 <div>姓名:<input type="text" name="name" /></div><br />
16 <!--顯示錯誤信息 -->
17 <div style=" width:200px; height:30px; border:#F00 solid 2px; line-height:30px; vertical-align:middle; text-align:center;"><{$error}></div><br />
18 <div><input type="submit" value="註冊" /></div>
19 </form>
20 </body>
21 </html>
View Code

相關文章
相關標籤/搜索