TP框架表单验证 【包含ajax方法】

之前的表单验证都是用js写的,这里也可以使用tp框架的验证。但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降。 

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

  数据验证有两种方式:

  1. 静态方式:在模型类里面通过$_validate属性定义验证规则。静态方式定义好以后其它地方都可以使用。
  2. 动态方式:使用模型类的validate方法动态创建自动验证规则。动态方式比较灵活,哪里使用就写,其它地方不可以使用。

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

复制代码

namespace HomeController;
use ThinkController;
class TestController extends Controller
{
  public function add()
  {
    if(empty($_POST))
  { 
    $this->show();
  }
  else
  { 
    $y=new
HomeModelYongHuuModel();

    $r=$y->create();

    if($r)
    {
      $y->add();
    }
    else{
      die($y->getError());
      }
    }
  }
}

复制代码
复制代码

2.在thinkphpApplicationHomeViewTest写上对应的html文件

复制代码
复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<style type="text/css">
*{ font-family:微软雅黑; padding:0px; margin:0px auto}
</style>
<body>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="text" name="pwd" /></div>
<div>确认密码:<input type="text" name="pwd1" /></div>
<div>姓名:<input type="text" name="name" /></div>
<div>邮箱:<input type="text" name="email" /></div>
<div>年龄:<input type="text" name="age" /></div>
<div><input type="submit" value="提交" /></div>
</form>
</div>


</body>
</html>

复制代码

3.在thinkphpApplicationHomeModel里面写模型文件,也就是验证的方法。

复制代码
复制代码

<?php
namespace HomeModel;
use ThinkModel;
class YongHuuModel extends Model
{
  protected $tablePrefix = "";
  protected $trueTableName = 'yonghu';  //自己的真实表名
  //protected $patchValidate = true;
  protected $_validate = array(
    array('uid','require','用户名不能为空!'),  //验证非空
    array('pwd','pwd1','两次输入的密码不一致!',0,'confirm'), //两个字段是否相同
    array('email','email','邮箱格式不正确'),   //验证邮箱格式
    array('name','/^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}([0-9]|X)$/','身份证号不正确!',0,'regex'), //用正则验证身份证号码 
    array('age','18,50','年龄不在范围内',0,'between'),
  );
}

复制代码
复制代码

二、动态验证

1.在ApplicationHomeController里面写方法

复制代码
复制代码
<?php
namespace HomeController;
use ThinkController;
class TestController extends Controller
{
    public function add()
    {
        if(empty($_POST))//如果post数组为空
        {
            $this->show();//显示add.html页面
        }
        else//如果post数组不为空
        {
            $y = D("YongHu");
            $arr = array(//动态验证就是需要在哪验证就在哪里写验证方法。
                array("uid","require","用户名不能为空",0),//讲验证的方法写在方法里面
            );
            if($y->validate($arr)->create())//这里要先调用validate方法,然后将写的验证方法放到validate里面
            {
                $y->add();
            }
            else
            {
                die($y->getError());调出错误信息
            }
        }
    }
}
复制代码
复制代码

2.在thinkphpApplicationHomeViewTest写上对应的html文件

复制代码
复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">

</style>
</head>

<body>
    <form action="__ACTION__" method="post">
        <div>用户名:<input type="text" name="uid" /></div>
        <div>密码:<input type="text" name="pwd" /></div>
        <div>确认密码:<input type="text" name="pwd1" /></div>
        <div>姓名:<input type="text" name="name" /></div>
        <div>邮箱:<input type="text" name="email" /></div>
        <div>年龄:<input type="text" name="age" /></div>
        <div><input type="submit" value="提交" /></div>
    </form>
</body>
<script type="text/javascript">

</script>
</html>
复制代码
复制代码

3.在thinkphpApplicationHomeModel里面写模型文件。

复制代码
复制代码
<?php
namespace HomeModel;
use ThinkModel;
class YongHuModel extends Model
{
    protected $tablePrefix = "";//表示表格前缀为空,就是没有前缀。
    protected $trueTableName = "yonghu";//如果不写这句话,会自动去找Yong_Hu这张表,这是默认的表格的命名。这里要写上实际的表格的名字。
}
复制代码
复制代码

三、Ajax做验证

tp动态验证和静态验证都有一个很大的缺点,那就是在提示错误信息的时候都要跳转到其它页面显示出错误信息。如果需要在当前页面显示出错误信息,就需要用ajax做验证。

1.写显示和ajax处理方法

复制代码
复制代码
<?php
namespace HomeController;
use ThinkController;
class TestController extends Controller
{
    
    public function tianjia()//添加方法,用来显示页面
    {
        $this->show();
    }
    
    
    public function test()//ajax处理方法
    {
        $y = D("YongHu");
        $arr = array(//动态验证就是需要在哪验证就在哪里写验证方法。
                array("uid","require","用户名不能为空"),//讲验证的方法写在方法里面
            );
        if($y->validate($arr)->create())//这里要先调用validate方法,然后将写的验证方法放到validate里面
            {
                $this->ajaxReturn("通过验证","eval");  ajax调用后返回字符串要用 eval
            }
            else
            {
                $this->ajaxReturn($y->getError(),"eval");
            }
    }
}
复制代码
复制代码

2.写显示页面,

复制代码
复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script>
<title>无标题文档</title>
<style type="text/css">

</style>
</head>

<body>
        <div>用户名:<input id="uid" type="text" name="uid" /></div>
        
        <div><input id="btn" type="button" value="验证" /></div>
</body>
<script type="text/javascript">
    $("#btn").click(function(){   这是用的点击事件,有时会用鼠标失去焦距
            var uid = $("#uid").val();
            
            $.ajax({
                url:"__CONTROLLER__/test",  处理页面
                data:{uid:uid},
                type:"POST",
                dataType:"TEXT",
                success: function(data){
                        alert(data);  上个页面返回的字符串
                    }                
                })
        })
</script>

</html>
复制代码
复制代码
原文地址:https://www.cnblogs.com/cyd123/p/7145710.html