tp框架---表单验证

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

关于基础知识,请查看手册“自动验证”一章。

一、静态验证

(1)在Ceshi/Controller/路径下新建Yanzheng控制器。

     YanzhengController.class.php页面

注意:静态定义方式因为必须定义模型类,所以只能用D函数实例化模型

     create方法是对表单提交的POST数据进行自动验证

<?php
namespace Ceshi\Controller;
use Think\Controller;
class YanzhengController extends  Controller
{

		   public function jtyz(){		   	
		   	$n= D("users");
		
		   	if(empty($_POST)){
		   		
		   		$this->show();
		   		
		   	}else{  
		   	 //验证要在model层写
			      if($n->create()){
			      	echo "验证通过!";
			      }else{
			      	echo $n->getError();  //获取错误信息
			      }			   		
		   	}
		}

  public function _empty(){
   	echo "您访问的操作方法不存在!";
   } 
}

 (2)在view层做jtyz.html页面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<form action="__ACTION__" method="post">
		<div> 用户名:<input type="text" name="uid"></div>
		<div> 请输入密码:<input type="text" name="pwd1"></div>
		<div> 请再次输入密码:<input type="text" name="pwd2"></div>
		<div> 年龄:<input type="text" name="age"></div>
		<div> 邮箱:<input type="text" name="email"></div>
		<input type="submit" value="验证" />
		</form>
	</body>
</html>

  效果图:

 

 

(3)在model层写静态验证的验证:(路径如图)

UsersModel.class.php

<?php
namespace Ceshi\Model;
use Think\Model;
class UsersModel extends Model
{
	 protected $_validate = array(    
	 //非空验证
	 array("uid","require","用户名不能为空"),
	 //相等验证
	 array("pwd1","require","密码不能为空"),
	 array("pwd2","pwd1","两次密码输入不一致","0","confirm"),
	 //范围验证
	  array("age","18,30","年龄不在范围内","0","between"),
	 //正则验证
	  array("email","email","邮箱格式不正确"),
	  );
}

  

 依次验证效果图:

当全部为空时,点击验证

提示:

 

 当输入用户名后,点击验证:

 

显示:

 

两次密码输入不一致时,会提示;年龄不在范围内会提示;邮箱格式不正确时会提示;否则会提示验证通过。

二、动态验证 

(1)  YanzhengController.class.php页面

<?php
namespace Ceshi\Controller;
use Think\Controller;
class YanzhengController extends  Controller
{

 //非空验证 静态
//		   public function jtyz(){		   	
//		   	$n= D("users");
//		
//		   	if(empty($_POST)){
//		   		
//		   		$this->show();
//		   		
//		   	}else{  
//		   		 //验证要在model层写
//			      if($n->create()){
//			      	echo "验证通过!";
//			      }else{
//			      	echo $n->getError();  //获取错误信息
//			      }			   		
//		   	}
//		}
//动态
		 public function dtyz(){
		   	
		   	
		   	if(empty($_POST)){
		   		$this->show();
		   	}
		   	else
		   	{   
		   		//验证规则
		   	    $rules = array(    
                array('uid','require','用户名不能为空!'),
                 );
					 
				 $u= M("users");
					  					  
			      if($u->validate($rules)->create()){
			      	$this->ajaxReturn("OK","eval"); //如果成功
			      }else{
			      	$this->ajaxReturn($u->getError(),"eval");  //如果不成功
			      }
			   		
		   	}
		}
  public function _empty(){
   	echo "您访问的操作方法不存在!";
   } 
}

  (2) dtyz.html页面:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--引入js-->
		<script src="__ROOT__/Public/js/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>			
		<input type="submit" value="验证" />
		</form>
	</body>
	<script>
		//文本框失去焦点时,显示提示信息
		$("#uid").blur(function(){
			var uid = $(this).val();
			$.ajax({
				url:"__ACTION__",
				data:{uid:uid},
				type:"POST",
				dataType:"TEXT",
				success:function(data){
					alert(data);
					 if(data.trim()=="OK")
					 {
					 	$("#ts").html("验证通过!");
					 }else{
					 	$("#ts").html("用户名不能为空!");
					 }
				}
			});
		})
	</script>
</html>

  看一下效果:

 

当文本框失去焦点时:

当文本框有内容时,再失去焦点:

 

posted @ 2017-07-09 11:50  陈观爱  阅读(327)  评论(0编辑  收藏  举报