本文以实例讲述了ThinkPHP表单自动提交验证的实现过程,详细步骤如下所示:
一、模板部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<!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类程序代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?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类程序代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?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(); //这里两个冒号是调用静态方法 } } ?> |