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 FTP类的详解
Jun 13 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 PHP
tp5.1 框架join方法用法实例分析
May 26 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
各种战术和打法的原创者
2020/03/04 星际争霸
一个颜色轮换的简单例子
2006/10/09 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
php集成动态口令认证
2016/07/21 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
python与php实现分割文件代码
2017/03/06 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
python的等深分箱实例
2019/11/22 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
写好自荐信要注意的问题
2013/11/10 职场文书
学校清明节活动总结
2014/07/04 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
计划生育工作汇报
2014/10/28 职场文书
如何写通讯稿
2015/07/22 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS