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

作者:陈山河z 时间:2023-11-15 06:33:05 

之前的表单验证都是用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,希望对大家有所帮助.

来源:http://www.cnblogs.com/chenshanhe/p/7204066.html

标签:tp,验证,ajax
0
投稿

猜你喜欢

  • Python 使用 environs 库定义环境变量的方法

    2022-06-06 08:58:51
  • python判断文件夹内是否存在指定后缀文件的实例

    2021-12-27 23:05:19
  • vue-cli-service build 环境设置方式

    2024-05-25 15:17:08
  • pytorch中的 .view()函数的用法介绍

    2022-10-15 19:50:17
  • Pycharm学习教程(5) Python快捷键相关设置

    2021-08-08 18:56:44
  • php计算两个整数的最大公约数常用算法小结

    2023-11-20 00:29:01
  • 解决pytorch读取自制数据集出现过的问题

    2023-04-23 15:15:43
  • Pyqt QImage 与 np array 转换方法

    2022-01-03 01:18:53
  • 用Python给文本创立向量空间模型的教程

    2021-07-13 17:06:41
  • python各类经纬度转换的实例代码

    2023-12-24 12:19:58
  • golang gorm框架数据库的连接操作示例

    2024-01-21 06:52:56
  • 详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)

    2023-08-22 18:03:06
  • 接口数据安全保证的10种方式

    2022-06-08 08:59:35
  • java.sql.SQLException: 内部错误: Unable to construct a Datum from the specified input

    2010-07-16 13:23:00
  • Python使用scrapy抓取网站sitemap信息的方法

    2023-04-02 20:03:18
  • python判断变量是否为int、字符串、列表、元组、字典的方法详解

    2022-09-28 05:11:57
  • Pytorch深度学习addmm()和addmm_()函数用法解析

    2021-01-02 04:04:25
  • 详解MySQL中的SQRT函数的使用方法

    2024-01-28 03:59:32
  • opencv转换颜色空间更改图片背景

    2023-12-20 19:01:29
  • ASP编程入门进阶(十四):Browser & Linkin

    2008-06-12 07:08:00
  • asp之家 网络编程 m.aspxhome.com