Thinkphp实现自动验证和自动完成


Posted in PHP onDecember 19, 2015

Thinkphp的自动验证和自动完成都是根所表单提交的内容来的,对部分数据进行规则验证和处理后插入到数据库。

1、自动验证格式:

array(
  array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
  array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
  ......
);

验证条件:
self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
self::MUST_VALIDATE 或者1 必须验证
self::VALUE_VALIDATE或者2 值不为空的时候验证
验证时间:
self::MODEL_INSERT或者1新增数据时候验证
self::MODEL_UPDATE或者2编辑数据时候验证
self::MODEL_BOTH或者3全部情况下验证(默认)

2、自动完成格式:

array(
  array(完成字段1,完成规则,[完成条件,附加规则]),
  array(完成字段2,完成规则,[完成条件,附加规则]),
   ......
);

完成时间:
self::MODEL_INSERT或者1   新增数据的时候处理(默认)
self::MODEL_UPDATE或者2   更新数据的时候处理
self::MODEL_BOTH或者3 所有情况都进行处理

小实例(注册)
HTML布局:

Thinkphp实现自动验证和自动完成

<form class="form-horizontal" action="{:U('Login/register')}" method="post" autocomplete="off" enctype="multipart/form-data">
  <div class="form-group">
    <label class="col-lg-2 control-label">用户名</label>
    <div class="col-lg-4">
      <input class="form-control" type="text" name="username" />
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 control-label">密码</label>
    <div class="col-lg-4">
      <input class="form-control" type="password" name="password" />
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 control-label">重复密码</label>
    <div class="col-lg-4">
      <input class="form-control" type="password" name="repassword" />
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 control-label">头像</label>
    <div class="col-lg-4">
      <input class="form-control" type="file" name="portrait" id="imgpath" />
      <img style="width: 100%;" src="" id="showimgpath" alt="头像"/>
      <span class="help-block">关像的大小为80*80px</span>
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 control-label">性别</label>
    <div class="col-lg-4">
      <div class="btn-group" data-toggle="buttons">
        <label class="btn btn-default active">
          <input type="radio" name="gender" autocomplete="off" value="1" checked /> 男
        </label>
        <label class="btn btn-default">
          <input type="radio" name="gender" autocomplete="off" value="0" /> 女
        </label>
      </div>
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 control-label">电话号码</label>
    <div class="col-lg-4">
      <input class="form-control" type="input" name="phone" />
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 control-label">邮箱</label>
    <div class="col-lg-4">
      <input class="form-control" type="input" name="email" />
    </div>
  </div>
  <div class="form-group">
    <div class="col-lg-2 col-lg-offset-2">
      <button class="btn btn-primary btn-block btn-submit" type="submit">注册</button>
    </div>
  </div>
</form>

模型(MemberModel)

<?php
namespace Admin\Model;
use Think\Model;
class MemberModel extends Model {

  /* 自动验证 */
  protected $_validate = array(
    array('username', '', '用户名是唯一的!', self::EXISTS_VALIDATE, 'unique', self::MODEL_INSERT),
    array('password', 'require', '没有填写密码!', self::EXISTS_VALIDATE, '', self::MODEL_INSERT),
    array('repassword', 'password', '重复密码不正确!', self::EXISTS_VALIDATE, 'confirm', self::MODEL_INSERT),
    array('phone','11','电话号码长度不对!', self::EXISTS_VALIDATE, 'length', self::MODEL_INSERT),
    array('email', 'email', '邮箱格式不正确!',self::EXISTS_VALIDATE, '', self::MODEL_INSERT)
  );

  /* 自动完成 */
  protected $_auto = array(
    array('password', 'encrypt', self::MODEL_INSERT, 'callback'),
    array('state','1',self::MODEL_INSERT),
    array('portrait', 'portrait', self::MODEL_INSERT, 'callback'),
    array('create_time', 'createTime', self::MODEL_INSERT, 'callback')
  );

  /* 给密码加密 */
  public function encrypt() {
    return md5(crypt(I('post.password/s'), 'zh'));
  }

  /* 创建时间 */
  public function createTime() {
    return time();
  }

  /* 上传头像 */
  public function portrait() {
    if($_FILES['portrait']['name']) { // 如果上传的头像
      $upload = new \Think\Upload();// 实例化上传类
      $upload->maxSize  =   3145728 ;// 设置附件上传大小
      $upload->exts   =   array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
      $upload->rootPath =   './Uploads/portrait/'; // 设置附件上传根目录
      // 上传单个文件
      $info  =  $upload->uploadOne($_FILES['portrait']);
      if(!$info) {// 上传错误提示错误信息
        $this->error($upload->getError());
      }else{// 上传成功 获取上传文件信息
        $portraitPath = './Uploads/portrait/'.$info['savepath'].$info['savename'];
        $image = new \Think\Image();
        $image->open($portraitPath);
        // 生成一个居中裁剪为80*80的缩略图
        $image->thumb(150, 150,\Think\Image::IMAGE_THUMB_CENTER)->save($portraitPath);
        return $info['savepath'].$info['savename'];
      }
    }
  }
}

对应的数据表结构:

Thinkphp实现自动验证和自动完成

在控制器中检测及插入到数据库:

/* 注册 */
public function register() {
  if(IS_POST) {
    $member = D('member');
    if($member->create()) {
      if($member->add()) {
        $this->success('注册成功!');
      } else {
        $this->error('注册失败!');
      }
    } else {
      exit($member->getError());
    }
  }
  $this->display();
}

以上就是本文的全部内容,希望对大家的学习有所帮助

PHP 相关文章推荐
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
PHP调用MySQL的存储过程的实现代码
Aug 12 PHP
php addslashes和mysql_real_escape_string
Jan 24 PHP
php 中的4种标记风格介绍
May 10 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
php实现可逆加密的方法
Aug 11 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 PHP
降低PHP Redis内存占用
Mar 23 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
TP5框架安全机制实例分析
Apr 05 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 #PHP
基于ThinkPHP实现批量删除
Dec 18 #PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 #PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 #PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 #PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 #PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 #PHP
You might like
php中的时间处理
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
实现Python与STM32通信方式
2019/12/18 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
Python 操作 MySQL数据库
2020/09/18 Python
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
省级青年文明号申报材料
2014/05/23 职场文书
建筑施工安全责任书
2014/07/24 职场文书
开发房地产协议书
2014/09/14 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书