首頁 php框架 ThinkPHP ThinkPHP框架表單驗證介紹

ThinkPHP框架表單驗證介紹

May 12, 2020 am 09:30 AM
thinkphp

ThinkPHP框架表單驗證介紹

對註冊到test表的表單進行驗證 

在註冊之前要對表單進行驗證:

使用者名稱非空驗證,兩次輸入密碼必須一致即相等驗證,年齡在18~50之間即範圍驗證,郵箱格式正規驗證。

自動驗證是ThinkPHP模型層提供的一種資料驗證方法,可以在使用create建立資料物件的時候自動進行資料驗證。

資料驗證可以進行資料類型、業務規則、安全判斷等方面的驗證操作。

資料驗證有兩種方式:

  • 靜態方式:在模型類別裡面透過$_validate屬性定義驗證規則。

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

無論是什麼方式,驗證規則的定義是統一的規則,定義格式為:

array(
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
......
);
登入後複製

驗證欄位(必須)

需要驗證的表單字段名稱,這個字段不一定是資料庫字段,也可以是表單的一些輔助字段,例如確認密碼和驗證碼等等。有個別驗證規則和欄位無關的情況下,驗證欄位是可以隨意設定的,例如expire有效期限規則是和表單欄位無關的。如果定義了欄位對應的話,這裡的驗證欄位名稱應該是實際的資料表欄位而不是表單欄位。

驗證規則(必須)

要進行驗證的規則,需要結合附加規則,如果在使用正規驗證的附加規則情況下,系統也內建了一些常用正規驗證的規則,可以直接作為驗證規則使用,包括:require 欄位必須、email 信箱、url URL位址、currency 貨幣、number 數字。

提示訊息(必須)

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

驗證條件(可選)

包含以下幾種情況:

  • self::EXISTS_VALIDATE 或0 存在欄位就驗證(預設)

  • self ::MUST_VALIDATE 或1 必須驗證

  • self::VALUE_VALIDATE或2 值不為空的時候驗證 

#附加規則(可選)

配合驗證規則使用,包含以下一些規則:  

ThinkPHP框架表單驗證介紹

驗證時間(可選)

  • self::MODEL_INSERT或1新增資料時候驗證

  • #self::MODEL_UPDATE或2編輯資料時候驗證

  • #self::MODEL_BOTH或3全部情況下驗證(預設)

這裡的驗證時間需要注意,並非只有這三種情況,你可以根據業務需要增加其他的驗證時間。

驗證有兩種方式:靜態驗證與動態驗證。

一、靜態驗證 

在模型類別裡面預先定義好模型的自動驗證規則,我們稱為靜態定義。

驗證時要在test表的Model裡面加驗證條件:新建testModel.class.php,在模型類別裡面定義了$_validate屬性如下:

<?php
namespace Home\Model;
use Think\Model;
class testModel extends Model
{
    //静态验证
    protected $_validate = array(    
        array(&#39;uid&#39;,&#39;require&#39;,&#39;用户名不能为空&#39;),        
        array(&#39;pwd&#39;,&#39;require&#39;,&#39;密码不能为空&#39;),
        array(&#39;repwd&#39;,&#39;pwd&#39;,&#39;确认密码不正确&#39;,1,&#39;confirm&#39;),
        array(&#39;age&#39;,&#39;18,50&#39;,&#39;年龄必须在18-50岁之间&#39;,1,&#39;between&#39;),
        array(&#39;email&#39;,&#39;email&#39;,&#39;邮箱格式不正确&#39;),
    
    );    
    
}
登入後複製

定義好驗證規則後,就可以在使用create方法建立資料物件的時候自動呼叫:

<?php
namespace Home\Controller;
use Home\Controller\CheckController;
class ZhuCeController extends CheckController
{
    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");    //动态验证可以用D方法
             
            if(!$model->create())
            {                
                $e = $model->getError();
                $url = "ZhuCe/cw/{$e}";
                $this->error("注册失败!",$url,1);
            }
            else
            {
                $model->add();    
            }
登入後複製

範本ZhuCe.html:

<body>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" name="uid" id="uid" /> </div><br />
<div>密码:<input type="text" name="pwd" id="pwd" /></div><br />
<div>确认密码:<input type="text" name="repwd" id="repwd" /> </div><br />
<div>年龄:<input type="text" name="age" id="age" /> </div><br />
<div>邮箱:<input type="text" name="email" id="email" /> </div><br />
<div>姓名:<input type="text" name="name" /></div><br />
<div><{$error}></div>   <!--显示错误信息-->
<input type="submit" value="注册" />
</form>
登入後複製

請求ZhuCe方法:

ThinkPHP框架表單驗證介紹

二、動態驗證

如果採用動態驗證的方式,就比較靈活,可以根據不同的需要,在操作同一個模型的時候使用不同的驗證規則,例如上面的靜態驗證方式可以改為:

<?php
namespace Home\Controller;
use Home\Controller\CheckController;
class ZhuCeController extends CheckController
{
    function ZhuCe()
    {        
        if(empty($_POST))
        {            
            $this->display();
        }
        else
        {
            //$model = new \Home\Model\testModel();
            $model = D("test");    //动态验证可以用D方法            
            //动态验证
            $rules = array(
                array(&#39;uid&#39;,&#39;require&#39;,&#39;用户名不能为空&#39;)
            );
            //调用validate()加入验证规则
            $r = $model->validate($rules)->create();//若验证失败返回false,成功返回注册的test表数组信息
            //var_dump($r);
            if(!$r)
            {
                echo $model->getError(); //若验证失败则输出错误信息    
            }
            else
            {
                $model->add();    
            }
            
        }    
    }
登入後複製

我們也可以在表單後面直接顯示錯誤提示,這就要用到ajax。以驗證使用者名稱非空為例:

在範本ZhuCe.html中:

<script src="../../../../../jquery-1.11.2.min.js"></script>  
</head>

<body>
<form action="__ACTION__" method="post">
<div>用户名: <input type="text" name="uid" id="uid" /> <span id="ts"></span></div><br />
<div>密码:  <input type="text" name="pwd" id="pwd" /> <span id="pts"></span></div><br />
<div>确认密码:<input type="text" name="repwd" id="repwd" /> <span id="rpts"></span></div><br />
<div>年龄:  <input type="text" name="age" id="age" /> <span id="nts"></span></div><br />
<div>邮箱:  <input type="text" name="email" id="email" /> <span id="ets"></span></div><br />
<div>姓名:  <input type="text" name="name" /></div><br />
<!--<div><{$error}></div> -->  <!--显示错误信息-->
<input type="submit" value="注册" />
</form>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
    $("#uid").blur(function(){
        var uid = $(this).val();
        $.ajax({
            
            url:"__CONTROLLER__/Yhm",  <!--提交到方法,而不是页面-->
            data:{uid:uid},   <!--因为做的是表单验证,所以提交时要与表单name值一致,相当于提交表单 -->
            type:"POST",
            dataType:"TEXT",   <!--返回数据类型要与ajaxReturn中的参数对应,TEXT对应eval-->
            success: function(data){
                //alert(data);
                var str = "";
                if(data.trim()=="OK")
                {
                    str = "<span style=&#39;color:green&#39;>"+data+"</span>";
                }
                else
                {
                    str = "<span style=&#39;color:red&#39;>"+data+"</span>";    
                }
                
                $("#ts").html(str);
                }
            });        
        })
登入後複製

在ZhuCe控制器中再做一個Yhm方法:

//验证用户名非空
    function Yhm()
    {
        $model = D("test");    
        $rules = array(
                array(&#39;uid&#39;,&#39;require&#39;,&#39;用户名不能为空&#39;)
            );
            
            if(!$model->validate($rules)->create())
            {
                $fh = $model->getError();
                $this->ajaxReturn($fh,&#39;eval&#39;);  //ajax返回数据,默认返回json格式,eval返回字符串,因为dataType是TEXT,所以用eval格式
            }
            else
            {
                $fh = "OK";    
                $this->ajaxReturn($fh,&#39;eval&#39;);
            }
    }
登入後複製

請求ZhuCe方法:

ThinkPHP框架表單驗證介紹

其他驗證也是類似的方法,提交對應資料到對應方法,使用對應的驗證規則。

推薦教學:《TP5

以上是ThinkPHP框架表單驗證介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

thinkphp專案怎麼運行 thinkphp專案怎麼運行 Apr 09, 2024 pm 05:33 PM

執行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進入專案目錄,執行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

thinkphp有幾個版本 thinkphp有幾個版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復 bug 和提供新功能。目前最新穩定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩定版本以獲得最佳性能和支援。

thinkphp怎麼運行 thinkphp怎麼運行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本機運作步驟:下載並解壓縮 ThinkPHP Framework 到本機目錄。建立虛擬主機(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數。啟動 Web 伺服器。初始化 ThinkPHP 應用程式。存取 ThinkPHP 應用程式 URL 運行。

laravel和thinkphp哪個好 laravel和thinkphp哪個好 Apr 09, 2024 pm 03:18 PM

Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優於 Laravel,專注於最佳化和快取。 Laravel 性能良好,但對於複雜應用程序,ThinkPHP 可能更適合。

開發建議:如何利用ThinkPHP框架實現非同步任務 開發建議:如何利用ThinkPHP框架實現非同步任務 Nov 22, 2023 pm 12:01 PM

《開發建議:如何利用ThinkPHP框架實現非同步任務》隨著網路技術的快速發展,Web應用程式對於處理大量並發請求和複雜業務邏輯的需求也越來越高。為了提高系統的效能和使用者體驗,開發人員常常會考慮利用非同步任務來執行一些耗時操作,例如發送郵件、處理文件上傳、產生報表等。在PHP領域,ThinkPHP框架作為一個流行的開發框架,提供了一些便捷的方式來實現非同步任務。

thinkphp怎麼安裝 thinkphp怎麼安裝 Apr 09, 2024 pm 05:42 PM

ThinkPHP 安裝步驟:準備 PHP、Composer、MySQL 環境。使用 Composer 建立專案。安裝 ThinkPHP 框架及相依性。配置資料庫連線。產生應用程式碼。啟動應用程式並造訪 http://localhost:8000。

thinkphp效能怎麼樣 thinkphp效能怎麼樣 Apr 09, 2024 pm 05:24 PM

ThinkPHP 是一款高效能的 PHP 框架,具備快取機制、程式碼最佳化、平行處理和資料庫最佳化等優勢。官方性能測試顯示,它每秒可處理超過 10,000 個請求,實際應用中被廣泛用於京東商城、攜程網等大型網站和企業系統。

開發建議:如何利用ThinkPHP框架進行API開發 開發建議:如何利用ThinkPHP框架進行API開發 Nov 22, 2023 pm 05:18 PM

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

See all articles