不言不语

您现在的位置是: 首页 >  PHP  >  ThinkPHP

ThinkPHP

tp5添加(数据验证)

2020-06-16ThinkPHP
关于thinkphp数据验证详解

在向数据库录入用户提交来的数据前,一定要做好数据验证。

数据验证

在做数据验证时,不但要做后端的数据验证,同时也要做好前端的数据验证

1. 前端验证

前端验证是非常必要的,通常情况上是使用js来实现的,HTML5也加入了原生的表单验证,但是一般情况下会使用js来做前端验证。

前端数据验证的好处

  1. 客户端处理,效率高

  2. 客户端运行,减少服务器间的数据交互,减轻服务器压力。

前验证通过后,才会将数据提交后端进行处理

2.后端数据验证

后端验证是用户数据到数据库的最后一道防线,所以更为重要,必要要做的严谨。大家必要明白,客户端提交来的数据是不可靠的,是可以被篡改的,所以虽然前端验证通过了,在后台也必要进行二次验证,要保证最终的数据准确无误。

知识点

1. 前端数据验证-Layui 自定义验证规则

在这里使用layui前端框架来实现前端的数据验证

Layui自定义验证规则基本用法:

  1. 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 '两次密码不一致';
                }
            }
          });

验证规则的名称可以自定义

  1. 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;

         }


文章评论