❶ 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里面,在自动验证规则里面调用回调函数。