关于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 相关文章推荐
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 PHP
PHP字符串长度计算 - strlen()函数使用介绍
Oct 15 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
php导入模块文件分享
Mar 17 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP通过curl获取接口URL的数据方法
May 31 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
php实现的pdo公共类定义与用法示例
Jul 19 #PHP
PHP多进程编程实例详解
Jul 19 #PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 #PHP
php实现生成code128条形码的方法详解
Jul 19 #PHP
php-beanstalkd消息队列类实例分享
Jul 19 #PHP
php+ajax实现异步上传文件或图片功能
Jul 18 #PHP
Joomla框架实现字符串截取的方法示例
Jul 18 #PHP
You might like
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
php实现word转html的方法
2016/01/22 PHP
js 字符串转化成数字的代码
2011/06/29 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
详解Vue中的watch和computed
2020/11/09 Javascript
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
微信小程序python用户认证的实现
2019/07/29 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
小区停车场管理制度
2014/01/27 职场文书
财产公证书样本
2014/04/04 职场文书
2014年评职称工作总结
2014/11/20 职场文书
课外活动总结
2015/02/04 职场文书
世界遗产的导游词
2015/02/13 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技