thinkphp表單驗證

這個知識點,就能夠經過「登陸」和「註冊」的頁面來學習這個知識點了
首先先作一個「登陸」功能
1、登陸功能(父類)
(1)登陸的控制器
在個人控制器文件夾中新建一個登錄控制器
個人路徑是這樣的:
javascript

而後裏面要書寫正確才能夠,其中要有命名空間,還有繼承父類的控制器php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller
{
public function denglu()
{
if ( empty ( $_POST )) //判斷傳過來的值是否是空的
{
$this ->show(); //空的顯示頁面
}
else
{
 
}
 
}
}

(2)編寫登陸的頁面 css

個人這個頁面我放在了html

這個登陸頁面都是寫過不少遍了,就不解釋了,這裏用的仍是表單元素java

?
1
2
3
4
5
6
7
< form action="__ACTION__" method="post">
< div >用戶名:< input type="text" name="uid" /></ div >
< br />
< div >密 碼:< input type="password" name="pwd" /></ div >
< input type="submit" value="登陸" />
 
</ form >

看下基本的運行頁面效果!!注意瀏覽器的地址欄的書寫:http://localhost/tp/index.php/Home/Login/denglujquery

(3)補充php頁面中的不然語句ajax

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
else
{
$u = M( "user" ); //造表
$uid = $_POST [ "uid" ]; //接收傳出過來得用戶名
$pwd = $_POST [ "pwd" ]; //接收傳過來的密碼
$attr = $u ->find( $uid ); //查找一條數據
 
f( $attr [ "password" ]== $pwd && ! empty ( $pwd )) //判斷密碼是否是相等還有是否是空的
{
session( "uid" , $uid ); //session存住用戶名
$this ->success( '登陸成功!' ,U( 'Home/shouye' )); //跳轉頁面("提示信息","跳轉的頁面","時間")
}
else
{
$this ->error( "登陸失敗!" );
}
}

運行看下結果:數據庫

1)輸入帳號和密碼,密碼是錯誤的時瀏覽器

2)輸入帳號和密碼,密碼是正確的時session

3)時間已過,跳轉到首頁面

這樣有個bug就是,這個首頁即便沒有登陸也能夠查看這個頁面,因此咱們要加一個條件,來判斷這個沒有登陸時,不能走這個頁面,也就是返回登陸頁面,可是每一個方法都要判斷就會顯得很繁瑣,又不能直接修改原控制器文件,因此,能夠在他們之間在建一個控制器文件,做爲他們的橋樑

(4)搭建的他們之間的橋樑

(4.1)新建的一個控制器類文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
namespace Home\Controller;
use Think\Controller;
class FuController extends Controller
{
//若是一個類要實例化,要使用一個構造方法__construct()
public function __construct()
{
//調用父類的構造:執行父類以後再用本身的
parent::__construct();
 
//判斷session是否存在
if (!session( '?uid' ))
{
   $this ->success( '請先登陸!' ,U( 'Login/denglu' ));
   exit ;
}
 
}
}

(4.2)這樣以後,將除了Login的控制器外,其餘的都要修改爲這橋樑控制器類

?
1
2
3
4
5
namespace Home\Controller;
use Home\Controller\FuController; //使用橋樑的控制器類
class HomeController extends FuController //繼承的就不是原類了,而是寫的控制器類文件
{
}

運行以後查看效果,直接登陸首頁的頁面,會出現下面的頁面

 

2、註冊功能(表單驗證)

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

其中有兩種驗證:靜態驗證和動態驗證

(1)靜態驗證

注意:靜態定義方式由於必須定義模型類,因此只能用D函數實例化模型

1.咱們能夠在IndexController.class.php類文件中新建一個方法

?
1
2
3
4
5
6
7
8
9
10
11
public function zhuce()
{
if ( empty ( $_POST ))
{
$this ->show();
}
else
{
//使用後面的驗證信息
}
}

2.在View文件中新建一個Index文件夾,新建註冊的顯示頁面

注意:若是使用收集表單元素,裏面的name要和數據庫中的保持一致

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< form action="__ACTION__" method="post">
< div >用戶名:< input type="text" name="uid" /></ div >
< br />
< div >密 碼:< input type="password" name="pwd" /></ div >
< br />
< div >確認密碼:< input type="password" name="pwd" /></ div >
< br />
< div >姓名:< input type="password" name="amen" /></ div >
< br />
< div >性別:< input type="password" name="pwd" /></ div >
< br />
< div >年齡:< input type="password" name="pwd" /></ div >
< input type="submit" value="註冊" />
 
</ form >

看下運行效果

3.添加表單驗證

(1)靜態驗證

注意:在模型類裏面經過$_validate屬性定義驗證規則。

這裏要新建一個模板文件UserModel.class,記得要在Model文件夾中

?
1
2
3
4
5
6
7
8
9
10
<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model
{
   //在表單驗證的時候,要用這個定義$_validate
   protected $_validate = array (
     array ( '驗證字段' , '驗證規則' , '驗證碼必須!' ), //這就是驗證的條件
  );
}

再寫驗證的時候要記住一下幾點:

(1)驗證字段 (必須)

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

(2)驗證規則 (必須)

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

(3)提示信息 (必須)

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

(4)驗證條件 (可選)

包含下面幾種狀況:

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

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

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

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

4.咱們可讓上面的註冊頁面再一些時候顯示驗證信息

  4.1用戶名爲空時,提示信息

?
1
2
3
protected $_validate = array (
array ( 'uid' , 'require' , '用戶名不能爲空!' ), //判斷用戶名是否是空的
);

  4.2怎麼使用這個驗證信息,咱們要在IndexController.class.php類文件中編寫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public function zhuce()
{
   if ( empty ( $_POST ))
  {
$this ->show();
  }
   else
  {
$u = D( "user" ); //造模型對象
$r = $u ->create(); //自動驗證字段
if ( $r )
{
   //$u->add(); //添加到數據庫
}
else
{
   exit ( $u ->getError()); //顯示錯誤信息
}
  }
}

  4.3運行能夠看下結果

這是靜態驗證,不能出如今文本框的後面,這樣能夠用動態驗證,其餘的條件能夠根據注意的那幾條本身進行練習

 

(2)動態驗證

注意:使用模型類的validate方法動態建立自動驗證規則。

總的來講就是要用ajax來寫,給想要顯示驗證的上添加一個id,便於傳值;並且也要引入jQuery文件

?
1
< script src="__PUBLIC__/js/jquery-1.11.2.min.js"></ script >

主體中的內容

?
1
2
< div >用戶名:< input type="text" name="uid" id="uid" /></ div > <!--給個id名-->
< span id="tishi"></ span > <!--顯示提示的地方-->

js的編寫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
< script type="text/javascript">
$("#uid").blur(function(){
var uid = $(this).val();
$.ajax({
url:"__ACTION__",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(data){
//這裏是驗證的返回結果
}
})
})
</ script >

方法中的寫法(完整的)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public function yanzheng()
{
if ( empty ( $_POST ))
{
$this ->show();
}
else
{
//定義驗證規則
$rules = array (
array ( 'uid' , 'require' , '用戶名不能爲空!' ),
);
 
$u = D( "user" );
 
if ( $u ->validate( $rules )->create())
{
$this ->ajaxReturn( "OK" , "eval" ); //若是驗證成功返回OK
}
else
{
$this ->ajaxReturn( $u ->getError(), "eval" ); //若是不成功,就返回提示信息
}
}
}

最後的顯示頁面中的內容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
success: function (data){
//驗證經過後的結果
if (data== "OK" )
{
$( "#tishi" ).html( "經過" ); //提示信息
$( "#tishi" ).css( "color" , "green" ); //提示的顏色
}
else
{
$( "#tishi" ).html(data); //提示的驗證信息
$( "#tishi" ).css( "color" , "red" );
}
}

運行看下提示結果

 

父級和表單驗證就是這樣的,熟悉他的使用規則就能夠了

相關文章
相關標籤/搜索