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编程中字符串处理的5个技巧小结
Nov 13 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
php接口技术实例详解
Dec 07 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
Python实现多属性排序的方法
2018/12/05 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
python实现AdaBoost算法的示例
2020/10/03 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
新大陆软件面试题
2016/11/24 面试题
盛大笔试题
2016/11/05 面试题
建筑实习自我鉴定
2013/10/18 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
小学生检讨书大全
2014/02/06 职场文书
书香校园活动方案
2014/02/28 职场文书
毕业生自荐信格式
2014/03/07 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
安全生产感想
2015/08/07 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
我去timi了,一起去timi是什么意思?
2022/04/13 杂记