本文以实例讲述了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(); //这里两个冒号是调用静态方法
}
}
?>
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!