TP框架---thinkphp表單驗證

自動驗證是ThinkPHP模型層提供的一種數據驗證方法,能夠在使用create建立數據對象的時候自動進行數據驗證。驗證的代碼要寫在模型層即Model裏面。javascript

  數據驗證有兩種方式:php

  1. 靜態方式:在模型類裏面經過$_validate屬性定義驗證規則。靜態方式定義好之後其它地方均可以使用。
  2. 動態方式:使用模型類的validate方法動態建立自動驗證規則。動態方式比較靈活,哪裏使用就寫,其它地方不可使用。

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

複製代碼
array(//驗證規則是一個二維數組,裏面是覺得數組,每一個一維數組是一個驗證。括號裏面的信息都是須要寫的。 array(驗證字段1,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]),//1.驗證字段(必須的):須要驗證哪一個字段;2.驗證規則(必須的):使用什麼規則驗證;3.錯誤提示(必須的):驗證失敗後提示的信息;4.驗證條件(可選的):用什麼條件來驗證,是可選的條件;5.附加規則(可選的):附加的一些規則;6.驗證時間(可選的):好比往數據庫裏寫的時候驗證,修改的時候驗證; array(驗證字段2,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]), ...... );
複製代碼

 

1、靜態驗證html

1.先在Application\Home\Controller裏面寫方法java

複製代碼
<?php
namespace Home\Controller;
use Think\Controller; class TestController extends Controller { public function add() { if(empty($_POST))//若是post數組爲空  { $this->show();//顯示add.html頁面  } else//若是post數組不爲空  { $y = D("YongHu");//造YongHu表的對象 $r = $y->create();//自動收集表單,收集表單的時候自動驗證。 if($r)//驗證經過返回true  { $y->add();//驗證經過後將收集的表單加到表格裏面。  } else//若是驗證失敗  { die($y->getError());//表示輸出錯誤信息而且退出程序  } } } }
複製代碼

2.在thinkphp\Application\Home\View\Test寫上對應的html文件jquery

複製代碼
<!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> <style type="text/css"> </style> </head> <body> <form action="__ACTION__" method="post"> <div>用戶名:<input type="text" name="uid" /></div> <div>密碼:<input type="text" name="pwd" /></div> <div>確認密碼:<input type="text" name="pwd1" /></div> <div>姓名:<input type="text" name="name" /></div> <div>郵箱:<input type="text" name="email" /></div> <div>年齡:<input type="text" name="age" /></div> <div><input type="submit" value="提交" /></div> </form> </body> <script type="text/javascript"> </script> </html>
複製代碼

3.在thinkphp\Application\Home\Model裏面寫模型文件,也就是驗證的方法。ajax

複製代碼
<?php
namespace Home\Model;
use Think\Model; class YongHuModel extends Model { protected $tablePrefix = "";//表示表格前綴爲空,就是沒有前綴。 protected $trueTableName = "yonghu";//若是不寫這句話,會自動去找Yong_Hu這張表,這是默認的表格的命名。這裏要寫上實際的表格的名字。 protected $_validate = array( array("uid","require","用戶名不能爲空",0),//對用戶名加非空驗證。手冊裏面沒有非空的驗證,本身寫。1.字段名爲uid;2.require表示字段必須,寫在這裏意思就是不能爲空;3.提示信息;4.self::EXISTS_VALIDATE 或者0 存在字段就驗證(默認),這裏寫0表明的就是存在字段就去驗證。 array("pwd",'pwd1',"兩次輸入的密碼不一致",0,"confirm"), //驗證2此輸入的密碼是否相同.confirm表示驗證表單中的兩個字段是否相同,定義的驗證規則是一個字段名,因此第二個字段名寫第2此輸入密碼的密碼框的name值pwd1 array("email","email","郵箱格式輸入不正確"),//驗證郵箱書寫是否正確。email是tp框架裏面自帶的驗證方法,表明的是郵箱驗證。 array("name","/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/","身份證號碼不正確",0,"regex"),//身份證號驗證。regex表示正則表達式,第2項驗證規則裏面就須要寫上身份證號的正則表達式。 array("age","18,50","年齡不在範圍內",0,"between"),//範圍驗證,用in、between均可以,這裏使用between。若是在輸入信息的時候出現大於1個錯誤,會按照這裏的順序輸出第一個錯誤信息。  ); }
複製代碼

 

2、動態驗證正則表達式

1.在Application\Home\Controller裏面寫方法thinkphp

複製代碼
<?php
namespace Home\Controller;
use Think\Controller; class TestController extends Controller { public function add() { if(empty($_POST))//若是post數組爲空  { $this->show();//顯示add.html頁面  } else//若是post數組不爲空  { $y = D("YongHu"); $arr = array(//動態驗證就是須要在哪驗證就在哪裏寫驗證方法。 array("uid","require","用戶名不能爲空",0),//講驗證的方法寫在方法裏面  ); if($y->validate($arr)->create())//這裏要先調用validate方法,而後將寫的驗證方法放到validate裏面  { $y->add(); } else { die($y->getError()); } } } }
複製代碼

2.在thinkphp\Application\Home\View\Test寫上對應的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> <style type="text/css"> </style> </head> <body> <form action="__ACTION__" method="post"> <div>用戶名:<input type="text" name="uid" /></div> <div>密碼:<input type="text" name="pwd" /></div> <div>確認密碼:<input type="text" name="pwd1" /></div> <div>姓名:<input type="text" name="name" /></div> <div>郵箱:<input type="text" name="email" /></div> <div>年齡:<input type="text" name="age" /></div> <div><input type="submit" value="提交" /></div> </form> </body> <script type="text/javascript"> </script> </html>
複製代碼

3.在thinkphp\Application\Home\Model裏面寫模型文件。

複製代碼
<?php
namespace Home\Model;
use Think\Model; class YongHuModel extends Model { protected $tablePrefix = "";//表示表格前綴爲空,就是沒有前綴。 protected $trueTableName = "yonghu";//若是不寫這句話,會自動去找Yong_Hu這張表,這是默認的表格的命名。這裏要寫上實際的表格的名字。 }
複製代碼

 

3、Ajax作驗證

tp動態驗證和靜態驗證都有一個很大的缺點,那就是在提示錯誤信息的時候都要跳轉到其它頁面顯示出錯誤信息。若是須要在當前頁面顯示出錯誤信息,就須要用ajax作驗證。

1.寫顯示和ajax處理方法

複製代碼
<?php
namespace Home\Controller;
use Think\Controller; class TestController extends Controller { public function tianjia()//添加方法,用來顯示頁面  { $this->show(); } public function test()//ajax處理方法  { $y = D("YongHu"); $arr = array(//動態驗證就是須要在哪驗證就在哪裏寫驗證方法。 array("uid","require","用戶名不能爲空"),//講驗證的方法寫在方法裏面  ); if($y->validate($arr)->create())//這裏要先調用validate方法,而後將寫的驗證方法放到validate裏面  { $this->ajaxReturn("經過驗證","eval"); } else { $this->ajaxReturn($y->getError(),"eval"); } } }
複製代碼

2.寫顯示頁面

複製代碼
<!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" /> <script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script> <title>無標題文檔</title> <style type="text/css"> </style> </head> <body> <div>用戶名:<input id="uid" type="text" name="uid" /></div> <div><input id="btn" type="button" value="驗證" /></div> </body> <script type="text/javascript"> $("#btn").click(function(){ var uid = $("#uid").val(); $.ajax({ url:"__CONTROLLER__/test", data:{uid:uid}, type:"POST", dataType:"TEXT", success: function(data){ alert(data); } }) }) </script> </html>
複製代碼

3.顯示頁面

相關文章
相關標籤/搜索