再问个问题关于智能的数据验证spVerifier如何显示错误信息
发布于:2022-01-17 09:50:54
#1 anythink
我使用
if($this->spArgs('submit'))
{
$memobj = spClass('db_member');
$memobj->verifier = $memobj->verifier_reg; // 切换验证规则
if( false == $memobj->spVerifier($this->spArgs()) ){
}else{
// 不能通过验证
dump($memobj->spVerifier($this->spArgs()) ) //来验证,如果错了如何更好的现实错误信息? 难道?
}
2011-06-11 01:56:02
#2 anythink
如果我要判断用户是否存在
创建了一个
var $addrules = array(
'isused' => 'checkname' // 检查用户是否重复
);
function checkname($val,$right)
{
$result = $this->findBy('username',$val)
if(is_array($result))
{
return false;
}else{
return true;
}
}
这样判断拥护名是否重复 对部?
2011-06-11 02:06:19
#3 anythink
搞不清楚着两个 $val 和 $right 是什么意思
2011-06-11 02:26:05
#4 anythink
验证用户名重复已经搞定
声明
var $addrules = array(
'isused' => array('db_member','checkname') // 使用当前类的'checkname'方法判断
);
设置验证规则
var $verifier_reg = array(
"rules" => array(
'username' => array(
'notnull' => TRUE, // username不能为空
'minlength' => 5, // username长度不能小于5
'maxlength' => 20, // username长度不能大于
'isused' => 'username', //把username植作为验证参数
),
'password' => array(
'notnull' => TRUE,
'minlength' => 6,
),
'password2' => array(
'equalto' => 'password',
),
),
"messages" => array( // 提示信息
'username' => array(
'notnull' => "用户名不能为空",
'minlength' => "用户名不能少于5个字符",
'maxlength' => "用户名不能大于20个字符",
'isused'=>'用户名已经存在',
),
'password' => array(
'notnull' => "密码不能为空",
'minlength' => "密码不能少于5个字符",
),
'password2' => array(
'equalto' => '两次密码输入不正确',
),
)
);
验证函数
/*注册验证是否重名*/
function checkname($val,$right)
{
$result = $this->findBy('username',$val);
if(is_array($result))
{
return FALSE;
}else{
return TRUE;
}
}
现在还有个问题就是 登陆的时候 我如何验证用户名密码是否正确呢? 如何在着2个参数上严正?
2011-06-11 02:36:08
#5 jake
这里,你已经理解了“一个参数”进行验证的方法。目前是想做“两个参数”验证,对吗?
其实验证函数的第三个参数,就是全部的输入值,你可以dump出来看看。
checkname($val,$right, $values)
dump($values);
这样你就获得了用户名和密码两个参数了,然后怎么验证那是程序怎么写的问题,最后返回 true或false代表通过或不通过即可。
具体这里例子,可参考
http://speedphp.com/bbs/thread-219-1-2.html
2011-06-11 07:08:40
#6 anythink
checkname($val,$right, $values)
第三个参数就是 全部的 post表单里的内容啊????
2011-06-11 11:25:25
#7 anythink
之前问的那个问题还没解决呢?
if($this->spArgs('submit'))
{
$memobj = spClass('db_member');
$memobj->verifier = $memobj->verifier_reg; // 切换验证规则
if( false == $memobj->spVerifier($this->spArgs()) ){
}else{
// 不能通过验证 的话我再显示这个代码 如果有错误信息 会重复2次,如何友好的显示该错误信息呢???
dump($memobj->spVerifier($this->spArgs()) )
}
2011-06-11 11:48:14
#8 jake
就是第三个参数是你传入的参数
$memobj->spVerifier(
$this->spArgs())
checkname($val,$right,
$values)
$values就是$this->spArgs()
2011-06-11 18:27:10
#9 anythink
明白了,如何友好的现显示 错误信息呢 ? 我在7楼说了一下????
2011-06-11 20:58:48
#11 anythink
哥,没写着吧...
2011-06-12 12:31:53
#12 anythink
我现在都是这样的....
2011-06-12 12:32:07
#13 anythink
这里我们可以看到,加入信息提示的方法和规则的写作方法差不多,而且与规则是一一对应的。如果某个规则存在对应的提示,那么当该规则不能通过时将返回对应的提示。同时也存在以下两种情况:
规则没有对应信息提示,正如例子中的email的全部规则都没有对应的信息提示,那么规则不能通过时返回的提示将是规则的名称。
信息提示存在,但是对应的规则却不存在。这并无问题,同时在重用性方面会有一定的方便。
相信我们看到了信息提示中有一个“ 'youare' => "看来你不是jake" ”的提示, 这youare就是一个自定义的验证规则。下章,我们将介绍如何创建自定义的验证规则。
-------------------悲剧的风格线-----------------
给个例子把,如何友好的显示错误信息到前端
...
2011-06-12 14:08:18
#14 jake
验证原理和提示如果明白如何操作(看手册)后,可以看看实例
http://speedphp.com/bbs/thread-219-1-2.html
2011-06-12 16:36:24
#15 anythink
天那 竟然摸班里面是这样写的
<{foreach from=$errmsg_arr item=err key=posi}><{if "addcity" == $posi }>
<{$err.0}><{/if}><{/foreach}>
每次都判断一个 input name ,然后 foreach 好麻烦啊,,,
强烈建议优化这个步骤,.... 不然感觉验证好麻烦,,,,,,, -
什么时候出新版本呢 = = 改改贝
2011-06-13 17:28:56
#16 anythink
酸了 我试一下...
2011-06-13 17:30:43
#17 jake
天那 竟然摸班里面是这样写的
每次都判断一个 input name ,然后 foreach 好麻烦啊,,,
强烈建议优化这个 ...
anythink 发表于 2011-6-13 17:28 
其实可以写得简单些,不过我那是那个页面的需要,不同页面对提示有不同的处理,这才是“友好提示”麻烦的地方。
2011-06-13 18:27:12
#18 anythink
我现在想的是,只显示一条关键错误就行了, 比如 用户名不能为空是1 不能超过6个字为 2 不能小雨1个字为3
显示的时候逐错误现实,只显示最近的1个错误 就是 用户名不能为空是1 ,其他的等瑕疵提交再显示
2011-06-13 18:46:37
#19 anythink
哈成功了!
2011-06-13 20:24:31
#20 anythink
发一个函数搞定!
原创 原创!!!
2011-06-13 20:34:53
#21 anythink
希望能得到一些借鉴
写了一个扩展来
function verifierMsg($params)
{
$config = array(
'defaultTag' => 'span', //默认提示的包围标签
'defaultTagClass' => '', //默认提示的标签附加class
'errTag' => 'span', //错误的提示包围标签
'errTagClass' => 'err', //错误的提示包围标签附加class
'showType' => 1, //错误显示方式,1为单独调用,2为全部显示在某个地方
'ShowAre' => 'ul', //全部显示的时候外筐
'ShowAreClass' => 'tab', //外矿css
'ShowInner' => 'li', //内部循环
'ShowInnerClass' => '', //内部循环
);
$set_array = $params['set'];
$input = $params['in'];
$msg = $params['msg'];
$show = $params['showtype'];
if($config['showType'] ==2 || $show==2)
{
if(is_array($set_array))
{
$str .= '<'.$config['ShowAre'].' class="'.$config['ShowAreClass'].'">';
foreach($set_array as $k=>$v)
{
$str .= '<'.$config['ShowInner'].' class="'.$config['ShowInnerClass'].'">' . $v[0] . ''.$config['ShowInner'].'>' ;
}
$str .= ''.$config['ShowAre'].'>';
return $str;
}
}else{
if(is_array($set_array))
{
foreach($set_array as $k=>$v)
{
if($k == $input)
{
return '<'.$config['errTag'].' class="'.$config['errTagClass'].'">' . $v[0] . ''.$config['errTag'].'>' ;
}else{
return '<'.$config['defaultTag'].' class="'.$config['defaultTagClass'].'">' . $msg . ''.$config['defaultTag'].'>' ;
}
}
}else{
return '<'.$config['defaultTag'].' class="'.$config['defaultTagClass'].'">' . $msg . ''.$config['defaultTag'].'>' ;
}
}
}
spAddViewFunction('verifierMsg','verifierMsg');
2011-06-13 20:35:36
#22 anythink
我去 一不小心就提交了!!!!!!
使用起来就是这么简单!!!!!!
{verifierMsg set=$errmsg_arr in=username showtype=2}
加上 showtype=2 就把所有错误都显示出来了!!!
{verifierMsg set=$errmsg_arr in=username msg='输入您的用户名,并记住'}
set 错误提示数组 in 哪个input 的错误信息 msg 没有错误的原始提示信息,有错误就覆盖
有个配制文件, 在函数里, 可以配制 普通信息和错误信息的标签 和 class 方便定义样式!!
完毕!
2011-06-13 20:37:59
#23 anythink
加上 showtype=2 就把所有错误都显示出来了!!! in=username 是手误, 实际用showtype2的时候不写
2011-06-13 20:39:17
#24 anythink
额 来看看么...
2011-06-14 22:47:56
#25 jake
验证提示的方式有很多种,都是根据页面情况和设计来定的。
2011-06-15 16:45:30
#26 anythink
恩所以我才根据实际需求写了这么一个 插件
2011-06-15 18:32:23
#27 gnuser
在if(false==spVerifier(**)){
}else{
输出错误信息
}
这里不就可以简单地处理提示信息吗?为什么还要加个插件?
2011-06-15 19:05:50
#28 anythink
你试试就知道了 那个错误输出能显示个啥.. 太不友好了
2011-06-15 23:53:56
#29 flashack
同样有显示一条错误信息的需求
foreach($userobj->spVerifier($this->spArgs()) as $ver) {
$this->error = $ver[0];
break;
}
2012-01-11 13:22:21
#30 jake
看看手册吧,验证这章其实挺复杂的,但是了解了之后就挺简单的
2012-01-14 09:41:56