ThinkPHP表单自动提交验证实例教程
本文以实例讲述了ThinkPHP表单自动提交验证的实现过程,详细步骤如下所示:
一、模板部分:
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<TITLE>ThinkPHP示例:表单提交、自动验证和自动填充</TITLE>
</HEAD>
<BODY>
<divclass="main">
<FORMMETHOD=POSTACTION="__URL__/insert">
<TABLEcellpadding=2cellspacing=2>
<TR>
<TDwidth="12%">标题:</TD>
<TD><INPUTTYPE="text"NAME="title"style="height:23px"class="largebLeft"></TD>
</TR>
<TR>
<TD>邮箱:</TD>
<TD><INPUTTYPE="text"NAME="email"style="height:23px"class="largebLeft"></TD>
</TR>
<TR>
<TD>内容:</TD>
<TD><TEXTAREANAME="content"class="largebLeft"ROWS="8"COLS="25"></TEXTAREA></TD>
</TR>
<TR>
<TD>验证码:</TD>
<TD><INPUTTYPE="text"NAME="verify"style="height:23px"class="small"><imgsrc="__URL__/verify"align="absmiddle"/>输入对应的数字</TD>
</TR>
<TR>
<TD></TD>
<TD><INPUTTYPE="submit"class="button"value="提交"><INPUTTYPE="reset"class="button"value="清空"></TD>
</TR>
<TR>
<TD></TD>
<TD><HR></TD>
</TR>
<volistname="list"id="vo">
<TR>
<TD></TD>
<TDstyle="border-bottom:1pxdottedsilver">{$vo.title}<spanstyle="color:gray">[{$vo.email}{$vo.create_time|date='Y-m-dH:i:s',###}]</span></TD>
</TR>
<TR>
<TD></TD>
<TD><divclass="content">{$vo.content|nl2br}</div></TD>
</TR>
</volist>
</TABLE>
</FORM>
</div>
</BODY>
</HTML>
二、模型部分form类程序代码:
<?php
classFormModelextendsModel{
//自动验证设置
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字符串(默认方式)
*/
publicfunctionCheckVerify(){
returnmd5($_POST['verify'])==$_SESSION['verify'];
}
}
?>
三、控制器部分indexaction类程序代码:
<?php
classIndexActionextendsAction{
//首页
publicfunctionindex(){
$Form=D("Form");//创建一个对象
$list=$Form->top6('','*','iddesc');//从数据库中读取最新6条记录,并且安id倒序输出
$this->assign('list',$list);//把数据传到模板里
$this->display();
}
//处理表单数据
publicfunctioninsert(){//此方法对应表单的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().'[<Ahref="javascript:history.back()"rel="externalnofollow">返回</A>]');
}
}
//生成验证码
//这个方法没什么好说的,固定格式
publicfunctionverify(){
import("ORG.Util.Image");
Image::buildImageVerify();//这里两个冒号是调用静态方法
}
}
?>