6月17 表單驗證

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

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

具體步驟:數據庫

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

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

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

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

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

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

驗證字段 (必須)

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

驗證規則 (必須)

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

提示信息 (必須)

用於驗證失敗後的提示信息定義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所有狀況下驗證(默認)

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

1.靜態定義

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

ZhuceController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class ZhuceController extends Controller
{
    public function ZhuCe()
    {
        //靜態的驗證
        $cw = "";
        if(!empty($_GET))
        {
            $cw = $_GET["cw"];    
        }
        if(empty($_POST))
        {
            $this->assign("error",$cw);
            $this->display();
                
        }
        else
        {
            $model = new \Home\Model\TestModel();
            //$model = D("test");            
            //var_dump($model);
            if(!$model->create())
            {
                //exit($model->getError());
                
                $e = $model->getError();
                $url = "Zhuce/cw/{$e}";
                $this->error("註冊失敗",$url,1);
            }
            else
            {
                $model->add();    
            }

        }
    }
    
    
    
}
View Code

 

TestModel.class.php

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

 

Zhuce.html

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<h1>註冊</h1>
<form action="__ACTION__" method="post">
<div>用戶名:<input type="text" name="uid" /></div><br />

<div>密碼:&nbsp;&nbsp;<input type="text" name="pwd" /></div>

<div>確認密碼:<input type="text" name="pwd1" /></div><br />

<div>年齡:<input type="text" name="age" /></div><br />

<div>郵箱:<input type="text" name="email" /></div><br />

<div>姓名:<input type="text" name="name" /></div><br />
<br />
<div><{$error}></div>
<input type="submit" value="註冊" />

</form>
</body>
</html>
View Code

部分案例顯示效果:

      

 

2.動態驗證

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

ZhuceController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class ZhuceController extends Controller
{
    public function ZhuCe()
    {
        //靜態的驗證
        $cw = "";
        if(!empty($_GET))
        {
            $cw = $_GET["cw"];    
        }
        if(empty($_POST))
        {
            $this->assign("error",$cw);
            $this->display();
                
        }
        else
        {
            //動態的驗證,以用戶名的驗證爲例,此時不須要新建模型
            $model = new \Home\Model\TestModel();
            $rules = array(
                array('uid','require','用戶名不能爲空'),
                array('pwd','require','密碼不能爲空'),
                array('pwd','pwd1','兩次輸入的密碼不一致',1,'confirm'),
                array('age','18,50','年齡必須在18到50之間',1,'between'),
                array('email','email','郵箱格式不正確'),
                array('email','','郵箱已被註冊',1,'unique'),//unique能夠驗證非主鍵字段
            );
            
            if(!$model->validate($rules)->create())
            {
                echo $model->getError();    
            }
            else
            {
                $model->add();    
            }
            
        }
    }
    
    
    
}
View Code

TestModel.class.php(是一個空白的)

<?php
namespace Home\Model;
use Think\Model;
class TestModel extends Model
{
    
}
View Code

 

Zhuce.html(與靜態驗證相同)

相關文章
相關標籤/搜索