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

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

一、静态验证

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

YanzhengController.class.php页面

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

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

  1. <?php
  2. namespace Ceshi\Controller;
  3. use Think\Controller;
  4. class YanzhengController extends Controller
  5. {
  6.  
  7. public function jtyz(){
  8. $n= D("users");
  9.  
  10. if(empty($_POST)){
  11.  
  12. $this->show();
  13.  
  14. }else{
  15. //验证要在model层写
  16. if($n->create()){
  17. echo "验证通过!";
  18. }else{
  19. echo $n->getError(); //获取错误信息
  20. }
  21. }
  22. }
  23.  
  24. public function _empty(){
  25. echo "您访问的操作方法不存在!";
  26. }
  27. }

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form action="__ACTION__" method="post">
  9. <div> 用户名:<input type="text" name="uid"></div>
  10. <div> 请输入密码:<input type="text" name="pwd1"></div>
  11. <div> 请再次输入密码:<input type="text" name="pwd2"></div>
  12. <div> 年龄:<input type="text" name="age"></div>
  13. <div> 邮箱:<input type="text" name="email"></div>
  14. <input type="submit" value="验证" />
  15. </form>
  16. </body>
  17. </html>

  效果图:

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

UsersModel.class.php

  1. <?php
  2. namespace Ceshi\Model;
  3. use Think\Model;
  4. class UsersModel extends Model
  5. {
  6. protected $_validate = array(
  7. //非空验证
  8. array("uid","require","用户名不能为空"),
  9. //相等验证
  10. array("pwd1","require","密码不能为空"),
  11. array("pwd2","pwd1","两次密码输入不一致","0","confirm"),
  12. //范围验证
  13. array("age","18,30","年龄不在范围内","0","between"),
  14. //正则验证
  15. array("email","email","邮箱格式不正确"),
  16. );
  17. }

  

依次验证效果图:

当全部为空时,点击验证

提示:

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

显示:

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

二、动态验证

(1)  YanzhengController.class.php页面

  1. <?php
  2. namespace Ceshi\Controller;
  3. use Think\Controller;
  4. class YanzhengController extends Controller
  5. {
  6.  
  7. //非空验证 静态
  8. // public function jtyz(){
  9. // $n= D("users");
  10. //
  11. // if(empty($_POST)){
  12. //
  13. // $this->show();
  14. //
  15. // }else{
  16. // //验证要在model层写
  17. // if($n->create()){
  18. // echo "验证通过!";
  19. // }else{
  20. // echo $n->getError(); //获取错误信息
  21. // }
  22. // }
  23. // }
  24. //动态
  25. public function dtyz(){
  26.  
  27. if(empty($_POST)){
  28. $this->show();
  29. }
  30. else
  31. {
  32. //验证规则
  33. $rules = array(
  34. array('uid','require','用户名不能为空!'),
  35. );
  36.  
  37. $u= M("users");
  38.  
  39. if($u->validate($rules)->create()){
  40. $this->ajaxReturn("OK","eval"); //如果成功
  41. }else{
  42. $this->ajaxReturn($u->getError(),"eval"); //如果不成功
  43. }
  44.  
  45. }
  46. }
  47. public function _empty(){
  48. echo "您访问的操作方法不存在!";
  49. }
  50. }

  (2) dtyz.html页面:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <!--引入js-->
  7. <script src="__ROOT__/Public/js/jquery-1.11.2.min.js"></script>
  8. </head>
  9. <body>
  10. <form action="__ACTION__" method="post">
  11. <div> 用户名:<input type="text" name="uid" id="uid"><span id="ts"></span></div>
  12. <input type="submit" value="验证" />
  13. </form>
  14. </body>
  15. <script>
  16. //文本框失去焦点时,显示提示信息
  17. $("#uid").blur(function(){
  18. var uid = $(this).val();
  19. $.ajax({
  20. url:"__ACTION__",
  21. data:{uid:uid},
  22. type:"POST",
  23. dataType:"TEXT",
  24. success:function(data){
  25. alert(data);
  26. if(data.trim()=="OK")
  27. {
  28. $("#ts").html("验证通过!");
  29. }else{
  30. $("#ts").html("用户名不能为空!");
  31. }
  32. }
  33. });
  34. })
  35. </script>
  36. </html>

  看一下效果:

当文本框失去焦点时:

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

tp框架---表单验证的更多相关文章

  1. tp框架表单验证

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

  2. tp框架表单验证 及ajax

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

  3. tp框架表单提交注意!不要提交到当前方法

    tp框架  表单提交到当前方法,会重复执行显示部分和保存部分的代码.导致不知名的错误.

  4. ThinkPHP框架表单验证

    对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验证是ThinkPHP模型层提供 ...

  5. php--yii框架表单验证

    在视图层利用表单小部件生成表单时,field只能是数据库中存在的, 例如: use yii\helpers\Html; use yii\widgets\ActiveForm; use yii\capt ...

  6. ThinkPHP框架表单验证AJAX

    验证有两种方式:静态验证与动态验证. 一.静态验证 在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义. 验证时要在test表的Model里面加验证条件:新建testModel.class. ...

  7. Yii 框架表单验证---实例

  8. laravel框架——表单验证

    创建路由 Route::get('test','VerController@index'); Route::post('tosubmit','VerController@tosubmit'); 在控制 ...

  9. php---tp框架---表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册"自动验证"一章 ...

随机推荐

  1. vegas pro 15解决导入的视频和音频有噪声问题,亲测可行

    中文步骤: 按住Shift->点击选项->首选项,松开Shift 点击右上角"内部"选项卡,在最下面的搜索栏输入SO4 找到第二项Enable So4 Compound ...

  2. MyEclipse获取注册码

    最近刚装上MyEclipse,一直弹窗提示注册码过期,开始还能接受,到最后,每发布一个项目便弹窗提醒,顿时感觉烦了,得治理治理这个烦人的注册码,下面是一段自动生成注册名和注册码的代码,只需要直接拿来用 ...

  3. Vue 爬坑之路—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios  ...

  4. Android 性能测试初探(六)

    书接前文 Android 性能测试初探之功耗(五) 本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速.弱网之类的测试,但本系列文章都不去一一探 ...

  5. marquee图片无缝拼接滚动

    marquee图片无缝滚动 先了解一下对象的几个的属性: innerHTML:     设置或获取位于对象起始和结束标签内的 HTML scrollHeight: 获取对象的滚动高度. scrollL ...

  6. Spring Cloud系列(三) 应用监控与管理Actuator

    Spring Cloud系列(二) 应用监控与管理Actuator 前言:要想使用Spring Cloud ,Spring Boot 提供的spring-boot-starter-actuator模块 ...

  7. (23)Spring Boot启动加载数据CommandLineRunner【从零开始学Spring Boot】

    [Spring Boot 系列博客] )前言[从零开始学Spring Boot] : http://412887952-qq-com.iteye.com/blog/2291496 )spring bo ...

  8. (19)Spring Boot 添加JSP支持【从零开始学Spring Boot】

    [来也匆匆,去也匆匆,在此留下您的脚印吧,转发点赞评论: 您的认可是我最大的动力,感谢您的支持] 看完本文章您可能会有些疑问,可以查看之后的一篇博客: 81. Spring Boot集成JSP疑问[从 ...

  9. 洛谷 P1640 BZOJ 1854 [SCOI2010]连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  10. 洛谷 P2587 BZOJ 1034 [ZJOI2008]泡泡堂

    题目描述 //不知道为什么BZOJ和洛谷都没有这幅图了,大牛们几年前的博客上都有这幅图的,把它贴上来吧 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省 ...