问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp 如何进行表单前端自动验证

发布网友 发布时间:2022-04-29 05:57

我来回答

2个回答

懂视网 时间:2022-04-29 10:19

对注册到test表的表单进行验证

在注册之前要对表单进行验证:

用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证。

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证。

数据验证可以进行数据类型、业务规则、安全判断等方面的验证操作。

数据验证有两种方式:

  • 静态方式:在模型类里面通过$_validate属性定义验证规则。

  • 动态方式:使用模型类的validate方法动态创建自动验证规则。

  • 无论是什么方式,验证规则的定义是统一的规则,定义格式为:

    array(
    array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
    array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
    ......
    );

    验证字段 (必须)

    需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。如果定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。

    验证规则 (必须)

    要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统还内置了一些常用正则验证的规则,可以直接作为验证规则使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。

    提示信息 (必须)

    用于验证失败后的提示信息定义

    验证条件 (可选)

    包含下面几种情况:

  • self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)

  • self::MUST_VALIDATE 或者1 必须验证

  • self::VALUE_VALIDATE或者2 值不为空的时候验证

  • 附加规则 (可选)

    配合验证规则使用,包括下面一些规则:

    1.jpg

    验证时间(可选)

  • self::MODEL_INSERT或者1新增数据时候验证

  • self::MODEL_UPDATE或者2编辑数据时候验证

  • self::MODEL_BOTH或者3全部情况下验证(默认)

  • 这里的验证时间需要注意,并非只有这三种情况,你可以根据业务需要增加其他的验证时间。

    验证有两种方式:静态验证与动态验证。

    一、静态验证

    在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义。

    验证时要在test表的Model里面加验证条件:新建testModel.class.php,在模型类里面定义了$_validate属性如下:

    <?php
    namespace HomeModel;
    use ThinkModel;
    class testModel extends Model
    {
     //静态验证
     protected $_validate = array( 
     array('uid','require','用户名不能为空'), 
     array('pwd','require','密码不能为空'),
     array('repwd','pwd','确认密码不正确',1,'confirm'),
     array('age','18,50','年龄必须在18-50岁之间',1,'between'),
     array('email','email','邮箱格式不正确'),
     
     ); 
     
    }

    定义好验证规则后,就可以在使用create方法创建数据对象的时候自动调用:

    <?php
    namespace HomeController;
    use HomeControllerCheckController;
    class ZhuCeController extends CheckController
    {
     function ZhuCe()
     {
     //静态验证,不能在后面直接显示,必须全部通过验证才能注册
     $cw = "";
     if(!empty($_GET))
     {
      $cw = $_GET["cw"]; 
     }
     if(empty($_POST))
     {
      $this->assign("error",$cw);
      $this->display();
     }
     else
     {
      $model = new HomeModel	estModel();
      //$model = D("test"); //动态验证可以用D方法
      
      if(!$model->create())
      {  
      $e = $model->getError();
      $url = "ZhuCe/cw/{$e}";
      $this->error("注册失败!",$url,1);
      }
      else
      {
      $model->add(); 
      }

    模板ZhuCe.html:

    <body>
    <form action="__ACTION__" method="post">
    <div>用户名:<input type="text" name="uid" id="uid" /> </div><br />
    <div>密码:<input type="text" name="pwd" id="pwd" /></div><br />
    <div>确认密码:<input type="text" name="repwd" id="repwd" /> </div><br />
    <div>年龄:<input type="text" name="age" id="age" /> </div><br />
    <div>邮箱:<input type="text" name="email" id="email" /> </div><br />
    <div>姓名:<input type="text" name="name" /></div><br />
    <div><{$error}></div> <!--显示错误信息-->
    <input type="submit" value="注册" />
    </form>

    请求ZhuCe方法:

    2.jpg

    二、动态验证

    如果采用动态验证的方式,就比较灵活,可以根据不同的需要,在操作同一个模型的时候使用不同的验证规则,例如上面的静态验证方式可以改为:

    <?php
    namespace HomeController;
    use HomeControllerCheckController;
    class ZhuCeController extends CheckController
    {
     function ZhuCe()
     { 
     if(empty($_POST))
     {  
      $this->display();
     }
     else
     {
      //$model = new HomeModel	estModel();
      $model = D("test"); //动态验证可以用D方法  
      //动态验证
      $rules = array(
      array('uid','require','用户名不能为空')
      );
      //调用validate()加入验证规则
      $r = $model->validate($rules)->create();//若验证失败返回false,成功返回注册的test表数组信息
      //var_dump($r);
      if(!$r)
      {
      echo $model->getError(); //若验证失败则输出错误信息 
      }
      else
      {
      $model->add(); 
      }
      
     } 
     }

    我们还可以在表单后面直接显示错误提示,这就要用到ajax。以验证用户名非空为例:

    在模板ZhuCe.html中:

    <script src="../../../../../jquery-1.11.2.min.js"></script> 
    </head>
    
    <body>
    <form action="__ACTION__" method="post">
    <div>用户名: <input type="text" name="uid" id="uid" /> <span id="ts"></span></div><br />
    <div>密码:  <input type="text" name="pwd" id="pwd" /> <span id="pts"></span></div><br />
    <div>确认密码:<input type="text" name="repwd" id="repwd" /> <span id="rpts"></span></div><br />
    <div>年龄:  <input type="text" name="age" id="age" /> <span id="nts"></span></div><br />
    <div>邮箱:  <input type="text" name="email" id="email" /> <span id="ets"></span></div><br />
    <div>姓名:  <input type="text" name="name" /></div><br />
    <!--<div><{$error}></div> --> <!--显示错误信息-->
    <input type="submit" value="注册" />
    </form>
    </body>
    </html>
    <script type="text/javascript">
    $(document).ready(function(e) {
     $("#uid").blur(function(){
     var uid = $(this).val();
     $.ajax({
      
      url:"__CONTROLLER__/Yhm", <!--提交到方法,而不是页面-->
      data:{uid:uid}, <!--因为做的是表单验证,所以提交时要与表单name值一致,相当于提交表单 -->
      type:"POST",
      dataType:"TEXT", <!--返回数据类型要与ajaxReturn中的参数对应,TEXT对应eval-->
      success: function(data){
      //alert(data);
      var str = "";
      if(data.trim()=="OK")
      {
       str = "<span style='color:green'>"+data+"</span>";
      }
      else
      {
       str = "<span style='color:red'>"+data+"</span>"; 
      }
      
      $("#ts").html(str);
      }
      }); 
     })

    在ZhuCe控制器中再做一个Yhm方法:

    //验证用户名非空
     function Yhm()
     {
     $model = D("test"); 
     $rules = array(
      array('uid','require','用户名不能为空')
      );
      
      if(!$model->validate($rules)->create())
      {
      $fh = $model->getError();
      $this->ajaxReturn($fh,'eval'); //ajax返回数据,默认返回json格式,eval返回字符串,因为dataType是TEXT,所以用eval格式
      }
      else
      {
      $fh = "OK"; 
      $this->ajaxReturn($fh,'eval');
      }
     }

    请求ZhuCe方法:

    3.jpg

    其他验证也是类似的方法,提交相应数据到对应方法,使用相应的验证规则。

    推荐教程:《TP5》

    热心网友 时间:2022-04-29 07:27

    thinkphp3.2.3的D方法创建数据库模型

    模型中设置一个protect字段$_validate,配置认证规则

    调用D方法返回的对象的create方法对表单数据进行验证

    thinkphp自动验证功能介绍

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    2024年9月走亲访友黄道吉日 2024年9月哪天适合走亲访友 2024年7月5日是走亲访友的黄道吉日吗 2024年7月5日适合走亲访友吗 交强险还需要交车船税吗 测评| 平安家易保(家财险):限商品房,自住版、房东版、租客版 女的23岁去读大学年龄是不是太大了? 请问中国石化怎么操作?23.00元买入的,能继续持有吗?中国石化的股改是怎... 600028我是21元买入的,现已经跌到15元多了,怎么办呀?赔死了!!_百度知 ... 请问600028中国石化现在还可以买吗? ...一个游戏机插在电视上耍的那种小游戏,超级玛丽,冒险岛等,你们还玩... 最难小游戏排行榜(十大最难玩的家庭小游戏) 招行信用卡被冻结还能开卡吗 上升星座怎么算?什么是上升星座? 上升,月亮还有其他星座是什么? 太阳星座、金星星座和上升星座是怎样划分的 上升星座还有什么水星火星都是什么求解 星座还分太阳和上升啊,怎么分的,除了这个还有什么 星座分为上升星座和什么 什么叫上升星座?还有什么太阳,月亮的。 如何在淘宝投诉商家 爱心包容简短讲章 基督宝血的意义是什么 启示录3章18节是什么意思这节经文不明白 光明之子与黑暗之子怎么样 光明之子的道理是什么? 请问微信删掉以后,用怎么加不上!这个已删除的好友,在哪里可以找到? 小米手机里的录音怎么发到朋友圈- 问一问 微信删除好友怎么才能加回来我不知道他 录音怎样发到朋友圈里 微信删除好友怎么才能加回来我不知道他 优学派怎么把微信添加到桌面- 问一问 招商银行信用卡被冻结,可以再开通吗?? 您好,我的招商银行信用卡冻结了,快一年了,是否可以解开? 招商银行信用卡被永久性冻结了还能不能开通呢? 招商银行信用卡逾期冻结,现在还能申请开通使用吗? 招商银行信用卡被停卡后能再开卡吗 招行信用卡被停 现在还清了 还能开通吗? 我的招商银行信用卡被封了怎么办 招行信用卡冻结了,还可以办其他行的信用卡吗?会有影响吗? 货拉拉抢单有没有什么技2022年 货拉拉司机怎么样才能抢到单 货拉拉抢单最快的手机 太平洋健康保险和太平洋保险是一个公司吗- 问一问 thinkphp 注册功能怎么验证表单 太平洋健康险的产品好不好 化妆步骤和需要的东西 一定要全 太平洋20年健康保险 如何判断股市资金流入与流出?要最简单的方法。 消费型的健康险太平洋 化妆需要哪些东西和步骤 怎么看大盘的资金流入和流出啊谁知道啊,我新手?