❶ thinkphp 如何進行表單前端自動驗證
thinkphp3.2.3的D方法創建資料庫模型
模型中設置一個protect欄位$_validate,配置認證規則
調用D方法返回的對象的create方法對表單數據進行驗證
thinkphp自動驗證功能介紹
❷ ThinkPHP 自動驗證是怎麼弄得
模型類:
<?php
namespaceHomeModel;
useThinkModel;
classCarsModelextendsModel{
protected$tableName='area';
protected$_validate=array(
array('name','require','Name必須!',1),
array('level','require','Level必須!',1),
array('name','1,4','評論長度不符!',1,'length'),//驗證長度1,4
array('level',array(0,1,2),'Level值的范圍不正確!',2,'in'),//驗證值域
);
}
控制器:
<?php
namespaceHomeController;
useThinkController;
{
publicfunctionindex()
{
$data=array();
$data['name']='';
$data['level']=12;
$cars=D('Cars');
if(!$cars->create($data)){
echo$cars->getError();
}else{
echo'插入成功!';
}
}
}
說明:
ThinkModel::create(mixed $data, string $type)
方法是支持參數輸入的,如果沒有傳參,函數內部會取客戶端POST過來的數據,
如果既沒有傳對象(或者數組)類型的$data,也沒有POST數據,就會報錯,非法的數據對象.
publicfunctioncreate($data='',$type=''){
//如果沒有傳值默認取POST數據
if(empty($data)){
$data=I('post.');
}elseif(is_object($data)){
$data=get_object_vars($data);
}
//驗證數據
if(empty($data)||!is_array($data)){
$this->error=L('_DATA_TYPE_INVALID_');//語言包對應的含義:非法的數據對象
returnfalse;
}
}
綜上所述:需要保證你客戶端POST數據過來了,或者顯式傳入需要驗證的$data到create方法.
❸ thinkphp3.2 自動驗證callback怎麼使用
protected function _validationFieldItem($data,$val) {
switch(strtolower(trim($val[4]))) {
case 'function':// 使用函數進行驗證
case 'callback':// 調用方法進行驗證
$args = isset($val[6])?(array)$val[6]:array();
if(is_string($val[0]) && strpos($val[0], ','))
$val[0] = explode(',', $val[0]);
if(is_array($val[0])){
// 支持多個欄位驗證
foreach($val[0] as $field)
$_data[$field] = $data[$field];
array_unshift($args, $_data);
}else{
array_unshift($args, $data[$val[0]]);
}
if('function'==$val[4]) {
return call_user_func_array($val[1], $args);
}else{
return call_user_func_array(array(&$this, $val[1]), $args);
}
其中$val[6]應該就是規則的第七個參數,是array類型。
規則:
// 自動驗證設置
protected $_validate = array(
array('title', 'checkTitle', '有個參數錯誤啦!', 1, 'callback', 3, array('654321')),
);
public function checkTitle($arg1, $arg2) {
if('123456' === $arg2) {
return TRUE;
} else {
return FALSE;
}
}
也就是說,是可以傳入多個參數的,就是在規則數組中加入第七個元素,類型是array型。裡面就是function或者callback的參數列表,但是不能包含第一個參數,因為第一個參數默認是你要驗證的欄位,框架中用array_unshift($args,$_data);自動幫把第一個參數加個數組中了。
❹ thinkphp驗證器正則常用規則
ThinkPHP的自動驗證常用的正則
一般我們見的比較多的是設置規則為require、email之類的,其實這些本身也是屬於正則表達式驗證方式,只是系統內置定義了一些常用的正則表達式而已。這些內置的正則表達式的定義可以參考model類的regex方法,內置支持的正則定義包括:
require 欄位必須、email 郵箱、url URL地址、currency 貨幣、number 數字、zip 郵編、integer 整數、double 浮點數、english 英文字母,但是並不局限於這些正則規則的,我們完全可以直接在驗證規則裡面使用正則表達式進行定義,這樣我們可以憑借強大的正則表達式來進行表單欄位驗 證,例如:
附上一些表單驗證中比較常用的正則表達式寫法:
匹配特定字元串:
限定符
限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種。
正則表達式的限定符有:
ThinkPHP的自動驗證機制是為了進行表單數據驗證,驗證可以支持function、 callback、confirm、equal、unique和regex,這里要講的是使用正則表達式進行驗證。
特殊字元
許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜杠字元 放在它們前面。下表列出了正則表達式中的特殊字元:
正則表達式(regular expression)描述了一種字元串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
例如:
構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字元與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字元、字元集合、字元范圍、字元間的選擇或者所有這些組件的任意組合。
正則表達式是由普通字元(例如字元 a 到 z)以及特殊字元(稱為"元字元")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字元串。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。
普通字元包括沒有顯式指定為元字元的所有可列印和不可列印字元。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。
非列印字元也可以是正則表達式的組成部分。下表列出了表示非列印字元的轉義序列:
所謂特殊字元,就是一些有特殊含義的字元,如上面說的 runoo*b 中的 ,簡單的說就是表示任何字元串的意思。如果要查找字元串中的 * 符號,則需要對 * 進行轉義,即在其前加一個 : runo*ob 匹配 runo ob。
許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜杠字元 放在它們前面。下表列出了正則表達式中的特殊字元:
限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種。
正則表達式的限定符有:
由於章節編號在大的輸入文檔中會很可能超過九,所以您需要一種方式來處理兩位或三位章節編號。限定符給您這種能力。下面的正則表達式匹配編號為任何位數的章節標題:
請注意,限定符出現在范圍表達式之後。因此,它應用於整個范圍表達式,在本例中,只指定從 0 到 9 的數字(包括 0 和 9)。
這里不使用 + 限定符,因為在第二個位置或後面的位置不一定需要有一個數字。也不使用 ? 字元,因為使用 ? 會將章節編號限制到只有兩位數。您需要至少匹配 Chapter 和空格字元後面的一個數字。
如果您知道章節編號被限制為只有 99 章,可以使用下面的表達式來至少指定一位但至多兩位數字。
上面的表達式的缺點是,大於 99 的章節編號仍只匹配開頭兩位數字。另一個缺點是 Chapter 0 也將匹配。只匹配兩位數字的更好的表達式如下:
或
* 、+限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上一個?就可以實現非貪婪或最小匹配。
例如,您可能搜索 HTML 文檔,以查找括在 H1 標記內的章節標題。該文本在您的文檔中如下:
<H1>Chapter 1 - 介紹正則表達式</H1>
貪婪: 下面的表達式匹配從開始小於符號 (<) 到關閉 H1 標記的大於符號 (>) 之間的所有內容。
非貪婪: 如果您只需要匹配開始和結束 H1 標簽,下面的非貪婪表達式只匹配 <H1>。
如果只想匹配開始的 H1 標簽,表達式則是:
通過在 *、+ 或 ? 限定符之後放置 ?,該表達式從"貪心"表達式轉換為"非貪心"表達式或者最小匹配。
定位符使您能夠將正則表達式固定到行首或行尾。它們還使您能夠創建這樣的正則表達式,這些正則表達式出現在一個單詞內、在一個單詞的開頭或者一個單詞的結尾。
正則表達式的定位符有:
❺ thinkphp3.2.3 動態驗證 怎麼用
動態方式:使用模型類的validate方法動態創建自動驗證規則。 if($User->create()){ $result = $User->add(); } // 寫入數據到資料庫
❻ thinkphp 怎麼自動驗證登陸頁面
代碼如下:
$table_User = D("User");
if(!$table_User->create($_POST,4)){//登陸失敗
$msg['info'] = $User->getError();
$msg['status'] = "error";
$this->ajaxReturn($msg);
} else {
$msg['info'] = "成功登陸,正在跳轉會員中心!";
$msg['status'] = "success";
$msg['url'] = U("Index/index");
$this->ajaxReturn($msg);
}
$this->ajaxReturn($msg);
exit;
array('username','checkUsername','用戶名不正確',1,'function',4), //登錄時驗證賬號
array('password','checkPassword','密碼不正確',1,'function',4), //登錄時驗證賬號
❼ Thinkphp自動驗證怎麼實現的
注意兩點:
在項目的配置文件中配置驗證規則,也就是配置$_validate
使用create方法接受前台提交的參數
❽ thinkphp的表單提交自動驗證是怎麼實現的
自動驗證是實現不了的,不管是表單驗證還是資料庫驗證,都要寫函數。TP有自帶的驗證驗證碼的方法,但是只能驗證一次,表單驗證以後保存到seccion裡面,在自動驗證規則裡面調用回調函數。