thinkphp表单验证
之前的表单验证都是用js写的,这里也可以使用tp框架的验证。但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降。
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证。验证的代码要写在模型层即Model里面。
数据验证有两种方式:
- 静态方式:在模型类里面通过$_validate属性定义验证规则。静态方式定义好以后其它地方都可以使用。
- 动态方式:使用模型类的validate方法动态创建自动验证规则。动态方式比较灵活,哪里使用就写,其它地方不可以使用。
无论是什么方式,验证规则的定义是统一的规则,定义格式为:
array(//验证规则是一个二维数组,里面是以为数组,每个一维数组是一个验证。括号里面的信息都是需要写的。 array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),//1.验证字段(必须的):需要验证哪个字段;2.验证规则(必须的):使用什么规则验证;3.错误提示(必须的):验证失败后提示的信息;4.验证条件(可选的):用什么条件来验证,是可选的条件;5.附加规则(可选的):附加的一些规则;6.验证时间(可选的):比如往数据库里写的时候验证,修改的时候验证; array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]), ...... );
一、静态验证
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");//造YongHu表的对象
$r = $y->create();//自动收集表单,收集表单的时候自动验证。 if($r)//验证通过返回true
{
$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这张表,这是默认的表格的命名。这里要写上实际的表格的名字。
protected $_validate = array(
array("uid","require","用户名不能为空",0),//对用户名加非空验证。手册里面没有非空的验证,自己写。1.字段名为uid;2.require表示字段必须,写在这里意思就是不能为空;3.提示信息;4.self::EXISTS_VALIDATE 或者0 存在字段就验证(默认),这里写0代表的就是存在字段就去验证。
array("pwd",'pwd1',"两次输入的密码不一致",0,"confirm"), //验证2此输入的密码是否相同.confirm表示验证表单中的两个字段是否相同,定义的验证规则是一个字段名,所以第二个字段名写第2此输入密码的密码框的name值pwd1
array("email","email","邮箱格式输入不正确"),//验证邮箱书写是否正确。email是tp框架里面自带的验证方法,代表的是邮箱验证。
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"),//身份证号验证。regex表示正则表达式,第2项验证规则里面就需要写上身份证号的正则表达式。
array("age","18,50","年龄不在范围内",0,"between"),//范围验证,用in、between都可以,这里使用between。如果在输入信息的时候出现大于1个错误,会按照这里的顺序输出第一个错误信息。
);
}
二、动态验证
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>
3.显示页面
thinkphp表单验证的更多相关文章
- Thinkphp 表单验证
在服务器端通过tp框架实现表单验证 用户名.密码.重复密码.邮箱.qq.手机号码.爱好.学历 具体步骤: 制作表单 表单form数据通过create()方法收集(验证功能要求我们必须通过create( ...
- TP框架---thinkphp表单验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面 ...
- ThinkPHP框架下的表单验证
之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...
- thinkphp表单自动验证
ThinkPHP框架表单验证 对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验 ...
- ThinkPHP框架表单验证
对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验证是ThinkPHP模型层提供 ...
- ThinkPHP表单令牌验证功能详细介绍
注:TP版本为3.1.3 在ThinkPHP框架下,两次提交同一个表单,比如提交信息后在浏览器点击后退退回上次的页面,重新点击提交按钮,就会提示“表单令牌错误”的信息. ThinkPHP新版内置了表单 ...
- ThinkPhp框架:父类及表单验证
这个知识点,就可以通过"登录"和"注册"的页面来学习这个知识点了首先先做一个"登录"功能一.登录功能(父类)(1)登录的控制器在我的控制器文 ...
- thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成
目录 1.案例 1.1图片上传 1.2进行图片木马检测 1.3缩略图生成 1.4控制器中调用缩略图生成方法 1.案例 前言:在thinkphp框架的Thinkphp/Library/Thin ...
- thinkphp 隐藏表单验证原理
function savetoken() //创建session('hash') ,然后在魔板中表单中加入隐藏域 getsession('hash'),提交表单验证值是否一样,如果一样验证通过,同时重 ...
随机推荐
- CodeForces Round #527 (Div3) D2. Great Vova Wall (Version 2)
http://codeforces.com/contest/1092/problem/D2 Vova's family is building the Great Vova Wall (named b ...
- 爬虫学习之-git拉取远程错误
本文讲的是把git在最新2.9.2,合并pull两个不同的项目,出现的问题如何去解决 如果合并了两个不同的开始提交的仓库,在新的 git 会发现这两个仓库可能不是同一个,为了防止开发者上传错误,于是就 ...
- 编码转换,基础,copy
阅读目录 编码转换 基础补充 深浅拷贝 文件操作 一,编码转换 1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂, 8个01代码, 8个bit, ...
- NIO网络编程中重复触发读(写)事件
一.前言 公司最近要基于Netty构建一个TCP通讯框架, 因Netty是基于NIO的,为了更好的学习和使用Netty,特意去翻了之前记录的NIO的资料,以及重新实现了一遍NIO的网络通讯,不试不知道 ...
- Qt——数据的隐式共享
一.隐式共享类 在Qt中有很多隐式共享类( Implicitly Shared Classes ),什么是隐式共享呢,请参考官方文档的说明. 好吧,翻译一下—— 许多C++类隐式地共享数据,使得资源使 ...
- xshell代理设置
1.宿主机设置隧道 上面的端口随意,不与本机使用的端口重合即可,下面的端口是管理系统的端口 2.宿主机上面创建的虚机设置代理 3.怎么通过web浏览器直接登录虚机ip网址:https://blog.c ...
- 基于 HTML5 的人脸识别技术
基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/
- 洛谷 P4169 [Violet]天使玩偶/SJY摆棋子 解题报告
P4169 [Violet]天使玩偶/SJY摆棋子 题目描述 \(Ayu\)在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,\(Ayu\) 却忘了她把天使玩偶埋在了哪 ...
- poj 1945 Power Hungry Cows A*
Description: 就是给你一个数,你可以把它自乘,也可以把他乘或除以任意一个造出过的数,问你最多经过多少次操作能变换成目标数 思路:这题真的不怎么会啊.n = 20000,每一层都有很 ...
- Flash平台的分析与RIA的趋势
10月3号,Flash Player 11 和 AIR 3.0正式提供下载,一片安静.最近这两年来,关于Flash的新闻一向是以负面为主,先是 Silverlight 的挑战,然后是 iphone和i ...