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 相关文章推荐
用PHP和MySQL保存和输出图片
Oct 09 PHP
超级简单的发送邮件程序
Oct 09 PHP
一个高ai的分页函数和一个url函数
Oct 09 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
php UNIX时间戳用法详解
Feb 16 PHP
php封装的验证码类分享
Feb 26 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 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中Smarty模板初体验
2011/08/08 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python3+PyQt5实现柱状图
2018/04/24 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python字符串对象实现原理详解
2019/07/01 Python
pandas的qcut()方法详解
2019/07/06 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
python speech模块的使用方法
2020/09/09 Python
医学生自我鉴定范文
2014/03/26 职场文书
认购协议书范本
2014/04/22 职场文书
2015年库房工作总结
2015/04/30 职场文书
公司表扬稿范文
2015/05/05 职场文书
公司周年庆典致辞
2015/07/30 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers