ThinkPHP表单自动提交验证实例教程

5年以前  |  阅读数:1140 次  |  编程语言:PHP 

本文以实例讲述了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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
贪吃蛇
文件下载
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例