thinkphp5 中咋验证不存在的表单字段

浏览:99 发布日期:2018/07/27 分类:求助交流 关键字: thinkphp
情况是这样的,我在html表单中有,<input name='username'></input><input name='password'></input>
然后提交到服务器用tp5的验证器验证,
'username|用户名' => 'require|min:3',
'password|密码' => 'require|min:6',

如果我提交的 username是空,是可以验证的。
如果我提交的表单数据根本不存在,username这个字段,这种就发生系统错误了。就是我用工具构造一个post请求,只提交了 password字段。那么服务器在验证username的时候,就会返回"系统错误"。应该是这个username不存在导致的。显然这不是我想看到的结果,他应该与提交的username是空是一种情况。但是他现在返回系统错误,这种情况怎么解决呢?

经过百度,我知道这个array_key_exists 函数可以判断username这个数组键是否存在。可以解决问题。

可以做个函数循环判断,是否存在。或者不断的if,else 语句判断,每个字段都要这么来一次,感觉这种太恶心了。太多的if else了。

但是我想问一下,是不是tp5里面有现成的方法可以自动判断处理。不用我这么啰嗦判断。

主要是想别被人,恶意构造post参数,瞎提交,引起系统漏洞。

-----------------------------------------
ps.............

我解决了,我定义了一个配置文件,每个需要表单提交的都归类了一下,

return [
'user' => [
'ArrangeLtrt' => 0,
'Rank' => 0,
'AccType' => 0,
'userName' =>0,
'RefereeUserid'=>0,
'ArrangeUserid'=>0,
'passWord'=>0,
'confirmPwd'=>0,
'rPwd'=>0,
'confirmrPwd'=>0,
'fullName'=>0,
'Mail'=>0,
'idcardType'=>0,
'idCard'=>0,
'Country'=>0,
'Mobi'=>0,
'CoinAddress'=>0,
'BysgSn'=>0,
'Bysg'=>0
],

// 更新不存在数组中的元素
function ckupepy($oldr=[],&$arr = []){
foreach ($oldr as $key => $value){
!array_key_exists($key,$arr) ? $arr[$key]="":true;
}
}
定义一个common.php 的处理函数,每次客户端提交过来的数据(数组),如果少于需要验证的字段集合,追加到要验证的 data数组里,这样就保证了,要验证的数据,名字都是有的,没有的加进去,默认值是 "".

这样处理过的data数据,再去验证,就不会出现找不到数组元素的问题。
最佳答案
评论( 相关
后面还有条评论,点击查看>>