关于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
猜你喜欢
- 代码如下:'其中注释中有 ###的需要用户设置 '其中注释中有 参数传递 ** 的 说明要通过参数 传递。'定义变量
- 本文从算法入手同时通过实例来讲解如何在SQL Server数据库中实现最优最简的整个过程。算法是计算机科学中一个重要的研究方向,是解决复杂问
- 语法:Void header(string $string[,bool $replace=true [, int $http_respons
- 1.连接本机数据库 A. 本机若有静态IP,oracle安装好后,就能连接本机oracle数据库。 B. 安装oracle时,本机没有静态I
- 如何制作关联的下拉菜单?看看代码:<form name=f1 METHOD="POST">
- 本文实例讲述了php中Array2xml类实现数组转化成XML的方法。分享给大家供大家参考。具体实现方法如下:<?phpclass A
- 以下的实例为去除指定表中数据类型是VARCHAR,CHAR,NVARCHAR的字段值中的不可见字符。 注释:此处只去掉前后的不可见字符,不包
- 示例代码: BulkStockBll bll = new BulkStockBll(); DataSet ds = bll.GetBulkS
- List:1. 什么叫商品评论?2. 评论体系的存在意义3. 评论体系的现状4. 都有哪些元素5. 该如何设计?6. 评论体系之外1.什么叫
- 想查找mac下python的site-packages目录,如果用网上搜的安装目录之类的去找,进去每一层很多都是软链接形式存在,比较浪费时间
- PHP simplexml_load_file() 函数实例转换 XML 文件为 SimpleXMLElement 对象,然后输出对象的键和
- input高级限制级用法1.取消按钮按下时的虚线框 在input里添加属性值 hideFocus 或者 HideFocus=true2.只读
- 缓动,学名为Tween,缓冲移动的简称。要想页面内容切换起来舒服,就使用淡入淡出特效,要想让页面元素动起来自然,就要使用缓动效果。这两个混合
- 环境:A机器和B机器都是LINUX系统,但由于B机器已经空间不足,所以停掉不停操作数据库的服务后 ,准备在A机器进行导出操作。导出语句 ex
- PDOStatement::fetchPDOStatement::fetch — 从结果集中获取下一行(PHP 5 >= 5.1.0,
- 汉字转换为UTF-8的一段代码终于找到这段代码了,一个ASP写的中文转UTF-8,大家可以试试function chinese2u
- 一个不错的网页拾色器也叫调色版,请看截图:当想要更多颜色时点击“其它颜色...”此时将调用系统自带的那个颜色选择框:注意:只有把〈scrip
- 新搞了台linux云主机,瞎折腾折腾,先装个Python3。Linux环境下有其他软件需要Python2,如YUM,所以安装的Python3
- 发现问题当我用pip安装好opencv-pyton后,我激动得在python项目中导入cv2就像这样:import cv2 as cvbut
- Css3引入了新的盒模型——弹性盒模型,该模型决定一个盒子在其他盒子中的分布方式以及如何处理可用的空间。这与XUL(火狐使用的用户交互语言)