关于ThinkPhp 框架表单验证及ajax验证问题


Posted in PHP onJuly 19, 2017

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

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

数据验证有两种方式:

静态方式:在模型类里面通过$_validate属性定义验证规则。静态方式定义好以后其它地方都可以使用。

动态方式:使用模型类的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 = 'yonghuu'; //真实表名
//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");
      }
      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>

总结

以上所述是小编给大家介绍的关于ThinkPhp 框架表单验证及ajax,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
使用字符串函数输出整数化的PHP版本号
Oct 09 PHP
WINXP下apache+php4+mysql
Nov 25 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
php自定文件保存session的方法
Dec 10 PHP
WampServer搭建php环境时遇到的问题汇总
Jul 23 PHP
PHP在线书签系统分享
Jan 04 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
php实现的pdo公共类定义与用法示例
Jul 19 #PHP
PHP实现的Redis多库选择功能单例类
Jul 27 #PHP
PHP策略模式定义与用法示例
Jul 27 #PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 #PHP
php表单文件iframe异步上传实例讲解
Jul 26 #PHP
php实现的统计字数函数定义与使用示例
Jul 26 #PHP
PHP SFTP实现上传下载功能
Jul 26 #PHP
You might like
mysql 性能的检查和优化方法
2009/06/21 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
php模拟post提交数据的方法
2015/02/12 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
浅谈vue的踩坑路
2017/08/31 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
Python list操作用法总结
2015/11/10 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
pymysql的简单封装代码实例
2020/01/08 Python
C语言笔试集
2012/07/24 面试题
南京某公司笔试题
2013/01/27 面试题
专科文秘应届生求职信
2013/11/18 职场文书
中学教师自我鉴定
2014/02/07 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
广告宣传策划方案
2014/05/21 职场文书
党员创先争优心得体会
2014/09/11 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python