关于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 相关文章推荐
BBS(php &amp; mysql)完整版(一)
Oct 09 PHP
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
php截取后台登陆密码的代码
May 05 PHP
php实现telnet功能示例
Apr 08 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
php实现的RSS生成类实例
Apr 23 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 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
测试您的 PHP 水平的题目
2007/05/30 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
JS 实现完美include载入实现代码
2010/08/05 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
python版DDOS攻击脚本
2019/06/12 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
综治工作心得体会
2014/09/11 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
安全先进班组材料
2014/12/26 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
整改通知书格式
2015/04/22 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python