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 相关文章推荐
一个php作的文本留言本的例子(一)
Oct 09 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
php 判断数组是几维数组
Mar 20 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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 Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP fclose函数用法总结
2019/02/15 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
pandas DataFrame数据转为list的方法
2018/04/11 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
python创建子类的方法分析
2019/11/28 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
物业管理计划书
2014/01/10 职场文书
村干部培训班主持词
2014/03/28 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
事业单位鉴定材料
2014/05/25 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS