关于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 相关文章推荐
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
PHPMailer安装方法及简单实例
Nov 25 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
CodeIgniter分页类pagination使用方法示例
Mar 28 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
php xhprof使用实例详解
Apr 15 PHP
Laravel 创建指定表 migrate的例子
Oct 09 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中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
discuz目录文件资料汇总
2014/12/30 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
js实现时钟定时器
2020/03/26 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
Python字符串格式化输出方法分析
2016/04/13 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
python 如何快速复制序列
2020/09/07 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
行政办公室岗位职责
2014/03/18 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
失恋33天观后感
2015/06/11 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python