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

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

  数据验证有两种方式:

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

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

<?php

namespace Home\Controller;
use Think\Controller;
class TestController extends Controller
{
  public function add()
  {
    if(empty($_POST))
  { 
    $this->show();
  }
  else
  { 
    $y=new
\Home\Model\YongHuuModel();

    $r=$y->create();

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

2.在thinkphp\Application\Home\View\Test写上对应的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.在thinkphp\Application\Home\Model里面写模型文件,也就是验证的方法。

<?php
namespace Home\Model;
use Think\Model;
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}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/','身份证号不正确!',0,'regex'), //用正则验证身份证号码 
    array('age','18,50','年龄不在范围内',0,'between'),
  );
}

二、动态验证

1.在Application\Home\Controller里面写方法

<?php
namespace Home\Controller;
use Think\Controller;
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.在thinkphp\Application\Home\View\Test写上对应的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.在thinkphp\Application\Home\Model里面写模型文件。

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

三、Ajax做验证

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

1.写显示和ajax处理方法

<?php
namespace Home\Controller;
use Think\Controller;
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

TP框架表单验证 【包含ajax方法】相关推荐

  1. JQuery002: 表单验证及ajax数据提交

    一.三种情况下触发验证事件 输入框失去焦点 -> $('input[!type=button]').blur(function() {}) 输入框输入中 -> $('input[!type ...

  2. html怎么校验用户名重复,layui的表单验证支持ajax判断用户名是否重复的实例

    如下所示: 在一个表单中,在提交前我们想判断该用户名是否存在,在layui中不支持.onblur()失去焦点事件,用按钮来手动触发,表单又不太美观,可以使用form表单的verify来进行验证. ht ...

  3. Validation-jQuery表单验证插件使用方法

    作用 jquery.validate是jquery旗下的一个验证框架,借助jquery的优势,我们可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法,并且对国际化也有很好的支持. 使用前的布置 ...

  4. elementUI框架:表单验证书写方式

    验证form,注意prop.rules指定的名字需一致: 也可以单独指定具体某一验证::rules="$rules.Login.userName" 校验方式 this.$refs[ ...

  5. jQuery Validate 提交表单验证失败扩展方法

    由于Validate没有提供表单提交过后,验证不通过触发方法.这里做一下扩展. 引用场景:每次提交表单元素验证不通过触发方法 打开源代码 找到focusInvalid 方法, 这里是提交表单时验证不通 ...

  6. 表单验证Jquery扩展方法类

    /** 表单数据验证 **/ $.fn.Validform = function () {var Validatemsg = "";var Validateflag = true; ...

  7. ajax实现表单验证 html,Ajax+ajax做的表单验证

    //Ajx实现异步示例,blur实现失去焦点触发 jQuery('#formname').blur(check); function check(){ alert("开始执行Ajax&quo ...

  8. html中表单的校验的插件,功能强大的jquery.validate表单验证插件

    本文实例为大家分享了jquery.validate表单验证的使用方法,供大家参考,具体内容如下 1 .表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助 ...

  9. 表单验证设计的用户体验基本原则

    转自:http://www.oschina.net/translate/ux-form-validation?from=20130331 英文原文:The Ultimate UX Design of ...

最新文章

  1. k8s 通过环境变量获取Pod信息
  2. VMware 使用 OVF 模版部署虚拟机
  3. 和rna用什么鉴定_RNA-seq:测序原理之文库构建
  4. HTTP 知识点之一:头部解释(转)
  5. C++ Primer这本书怎么样?
  6. 制作全功能系统维护U盘 PE Linux BT3 DOS
  7. LaTeX tikz初探——利用emoji画GPS卫星2D分布图(2)
  8. 【JQuery NoviceToNinja系列】目录
  9. wait, notify, notifyAll
  10. Red Hat 6 安装 Yum源
  11. 浙大学霸Facebook总部跳楼:永远不要把公司当成“家”
  12. linux脚本彩色提示,在shell脚本里显示带颜色的字(linux)
  13. php 不通过表单post,php – 简单表单不通过_POST发送数据
  14. 最新消息,我的Zcash钱包收到鱼池的ZEC打款了
  15. celeste第二章_《蔚蓝(Celeste)》全水晶之心收集攻略
  16. ssms管理linux数据库,使用 SSMS 管理 Linux 上的 SQL Server - SQL Server | Microsoft Docs
  17. 矿大课表ics文件生成小工具
  18. 22张图带你了解IP地址有什么作用
  19. Gateway网关的使用
  20. 很有意思的十句话,说说背后的故事。

热门文章

  1. Ribbon、Feign和OpenFeign的区别来了
  2. IDEA开发中,类的头位置生成作者时间信息
  3. 重磅!GitHub官方App官宣发布了
  4. 大连富海计算机专修学校怎么样,大连富海计算机专修学校贴吧吧规(2018年版)...
  5. jh锂电保护电路_锂电池过充电、过放电、过流及短路保护电路原理及电路图
  6. android 弹出框带标题栏,Android开发靠标题栏的弹框
  7. mysql员工脚本_mySQL常用脚本汇总
  8. 总结3:IDEA中使用${pageContext.request.contextPath}填写路径时出错
  9. gsettings命令使用简介
  10. 外国经典儿童读物合集pdf_帮助父母在线购买儿童读物–用户体验案例研究