tp5添加(数据验证)
在向数据库录入用户提交来的数据前,一定要做好数据验证。
数据验证
在做数据验证时,不但要做后端的数据验证,同时也要做好前端的数据验证
1. 前端验证
前端验证是非常必要的,通常情况上是使用js来实现的,HTML5也加入了原生的表单验证,但是一般情况下会使用js来做前端验证。
前端数据验证的好处
客户端处理,效率高
客户端运行,减少服务器间的数据交互,减轻服务器压力。
前验证通过后,才会将数据提交后端进行处理
2.后端数据验证
后端验证是用户数据到数据库的最后一道防线,所以更为重要,必要要做的严谨。大家必要明白,客户端提交来的数据是不可靠的,是可以被篡改的,所以虽然前端验证通过了,在后台也必要进行二次验证,要保证最终的数据准确无误。
知识点
1. 前端数据验证-Layui 自定义验证规则
在这里使用
layui
前端框架来实现前端的数据验证
Layui自定义验证规则基本用法:
js(自定义验证规则)部分
//自定义验证规则 form.verify({ account: function(value){ if(value.length < 5){ return '账号至少得5个字符啊'; } } ,passwd: [/(.+){6,12}$/, '密码必须6到12位'] ,repasswd: function(value){ if($('#L_pass').val()!=$('#L_repass').val()){ return '两次密码不一致'; } } });
验证规则的名称可以自定义
html部分
使用
lay-verify
属性来调用验证规则,多个规则之前用|
分隔
<form class="layui-form"> <div class="layui-form-item"> <label for="username" class="layui-form-label"> <span class="x-red">*</span>账号 </label> <div class="layui-input-inline"> <input type="text" id="account" name="account" required="" lay-verify="required|account" autocomplete="off" class="layui-input" placeholder="请输入管理员账号"> </div> </div> <div class="layui-form-item"> <label for="L_pass" class="layui-form-label"> <span class="x-red">*</span>密码 </label> <div class="layui-input-inline"> <input type="password" id="passwd" name="passwd" required="" lay-verify="passwd" autocomplete="off" class="layui-input" placeholder="请输入密码"> </div> </div> <div class="layui-form-item"> <label for="L_repass" class="layui-form-label"> <span class="x-red">*</span>确认密码 </label> <div class="layui-input-inline"> <input type="password" id="repasswd" name="repasswd" required="" lay-verify="repasswd" autocomplete="off" class="layui-input" placeholder="请输入确认密码"> </div> </div> <div class="layui-form-item"> <label for="L_repass" class="layui-form-label"> </label> <button class="layui-btn" lay-filter="add" lay-submit=""> 添加 </button> </div> </form>
2. 后端数据验证-ThinkPHP5 验证器
在ThinkPHP中提供了非常方便的后端数据验证-验证器。在这里呢,就使用验证器来实现后端的数据验证。
验证器的基本用法
1. 创建验证器
在这里咱们为后台模块创建单独验证器,所以在后台模块admin
中创建验证器目录validate
,在该目录中创建验证器Manager.php
。
创建后目录结构如下:Manager.php
其内容如下:
<?php namespace app\admin\validate;use think\Validate;class Manager extends Validate{ protected $rule=[ 'id'=>'require', 'account'=>'require|min:5|unique:manager', 'passwd'=>'require|min:6', 'repasswd'=>'require|confirm:passwd', ]; protected $message=[ 'id.require'=>'id输入不正确', 'account.require'=>'账号不能为空', 'account.min'=>'账号不能小于5个字符', 'account.unique'=>'账号已存在', 'passwd.require'=>'密码不能为空', 'passwd.min'=>'密码长度不能小于6个字符', 'repasswd.require'=>'确认密码不能为空', 'repasswd.confirm'=>'两次密码输入不一致', ]; protected $scene=[ 'add'=>['account','passwd','repasswd'], 'edit'=>['account','passwd','repasswd'], ];}
关于验证器的更多的用法(自定义验证规则、内置验证)等,请参考ThinkPHP5官方手册
验证:
添加:
$validate = Validate('Lecturer');
if(!$validate->check($aa)){
$this->error($validate->getError());
return;
}
编辑:
$validate = Validate('Lecturer');
if(!$validate->scene('edit')->check($aa)){//场景验证
$this->error($validate->getError());
return;
}