ThinkPHP表单自动提交验证实例教程


Posted in PHP onJuly 18, 2014

本文以实例讲述了ThinkPHP表单自动提交验证的实现过程,详细步骤如下所示:

一、模板部分:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<TITLE>ThinkPHP示例:表单提交、自动验证和自动填充</TITLE>
</HEAD>
<BODY>
<div class="main">
<FORM METHOD=POST ACTION="__URL__/insert">
<TABLE cellpadding=2 cellspacing=2>
<TR>
 <TD width="12%">标题:</TD>
 <TD ><INPUT TYPE="text" NAME="title" style="height:23px" class="large bLeft"></TD>
</TR>
<TR>
 <TD >邮箱:</TD>
 <TD ><INPUT TYPE="text" NAME="email" style="height:23px" class="large bLeft"></TD>
</TR>
<TR>
 <TD>内容:</TD>
 <TD><TEXTAREA NAME="content" class="large bLeft" ROWS="8" COLS="25"></TEXTAREA></TD>
</TR>
<TR>
 <TD>验证码:</TD>
 <TD><INPUT TYPE="text" NAME="verify" style="height:23px" class="small" > <img src="__URL__/verify" align="absmiddle" /> 输入对应的数字</TD>
</TR>
<TR>
 <TD></TD>
 <TD><INPUT TYPE="submit" class="button" value="提 交"> <INPUT TYPE="reset" class="button" value="清 空"></TD>
</TR>
<TR>
<TD></TD>
 <TD ><HR></TD>
</TR>
<volist name="list" id="vo">
<TR>
<TD></TD>
 <TD style="border-bottom:1px dotted silver">{$vo.title} <span style="color:gray">[{$vo.email} {$vo.create_time|date='Y-m-d H:i:s',###}]</span></TD>
</TR>
<TR >
<TD></TD>
 <TD ><div class="content">{$vo.content|nl2br}</div></TD>
</TR>
</volist>
</TABLE>
 </FORM>
</div>
</BODY>
</HTML>

二、模型部分form类程序代码:

<?php 
class FormModel extends Model {
 // 自动验证设置
 protected $_validate  =  array(//这里必须定义为$_validata用来验证
 array('title','require','标题必须!',1),
 array('email','email','邮箱格式错误!',2),
 array('content','require','内容必须'),
 array('verify','require','验证码必须!'),
 array('verify','CheckVerify','验证码错误',0,'callback'),//callback 使用方法验证,前面定义的验证规则是一个当前 Model 类的方法 
//这里如果有不太理解的话可以看本类的最后一个方法
 array('title','','标题已经存在',0,'unique','add'),//附加验证unique,unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值
 );
 /*think的验证机制,省去了不少麻烦非空:equire 邮箱:email 验证码正确:CheckVerify
 array()数组内容array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)
 验证条件
 EXISTS_TO_VAILIDATE 或者 0 存在字段就验证 (默认)
 MUST_TO_VALIDATE 或者1 必须验证
 VALUE_TO_VAILIDATE 或者 2 值不为空的时候验证
 附加规则 配合验证规则使用,包括:
 function 使用函数验证,前面定义的验证规则是一个函数名
 callback 使用方法验证,前面定义的验证规则是一个当前 Model 类的方法
 confirm 验证表单中的两个字段是否相同,前面定义的验证规则是一个字段名
 equal 验证是否等于某个值,该值由前面的验证规则定义
 in 验证是否在某个范围内,前面定义的验证规则必须是一个数组
 unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值
 regex 使用正则进行验证,表示前面定义的验证规则是一个正则表达式(默认)
 */
 // 自动填充设置
 //由上面推导,下面这个是自动填充字段了,方便明了
 protected $_auto  =  array(//同样这里必须定义为$_auto
 array('status','1','ADD'),
 array('create_time','time','ADD','function'),//这里指明填充使用函数time()
 );
 /*
 数组因子:
 array(填充字段,填充内容,填充条件,附加规则)
 填充条件包括:
 ADD 新增数据的时候处理(默认方式)
 Update 更新数据的时候处理
 ALL 所有情况下都进行处理
 
 附加规则包括:
 function 使用函数
 callback 回调方法
 field 用其它字段填充
 string 字符串(默认方式)
 */

 public function CheckVerify() {
  return md5($_POST['verify']) == $_SESSION['verify'];
 }
}
?>

三、控制器部分indexaction类程序代码:

<?php 
class IndexAction extends Action{
 // 首页
 public function index(){
  $Form = D("Form");//创建一个对象
  $list = $Form->top6('','*','id desc');//从数据库中读取最新6条记录,并且安id倒序输出
  $this->assign('list',$list);//把数据传到模板里
  $this->display();
 }
 // 处理表单数据
 public function insert() {//此方法对应表单的ACTION="__URL__/insert"
  $Form = D("Form");
  if($Form->create()) {//创建 Form 数据对象,默认通过表单提交的数据进行创建,为下面写入数据库做准备
   $Form->add();// 新增表单提交的数据 ,吧上面创建的数据对象提交
   $this->redirect();//返回上一个模块,页面跳转可以说是
  }else{
   header("Content-Type:text/html; charset=utf-8");
   exit($Form->getError().' [ <A href="javascript:history.back()" rel="external nofollow" >返 回</A> ]');
  }
 }
 // 生成验证码
 //这个方法没什么好说的,固定格式
 public function verify() {
  import("ORG.Util.Image");
   Image::buildImageVerify(); //这里两个冒号是调用静态方法
 }
} 
?>
PHP 相关文章推荐
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
解读PHP中上传文件的处理问题
May 29 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
PDO::inTransaction讲解
Jan 28 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 #PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 #PHP
ThinkPHP关于session的操作方法汇总
Jul 18 #PHP
php中实现精确设置session过期时间的方法
Jul 17 #PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 #PHP
浅谈php安全性需要注意的几点事项
Jul 17 #PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 #PHP
You might like
开发大型PHP项目的方法
2006/10/09 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
会计岗位描述
2014/02/22 职场文书
农村文化活动总结
2014/08/28 职场文书
服务行业演讲稿
2014/09/02 职场文书
小学毕业教师寄语
2019/06/21 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL