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代码的53条建议
Mar 27 PHP
php中转义mysql语句的实现代码
Jun 24 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
php生成高清缩略图实例详解
Dec 07 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
Yii+upload实现AJAX上传图片的方法
Jul 13 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP使用数组实现队列
2012/02/05 PHP
php数组添加元素方法小结
2014/12/20 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
wxpython布局的实现方法
2019/11/01 Python
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
服装发布会策划方案
2014/05/22 职场文书
银行授权委托书格式
2014/10/10 职场文书
公司出差管理制度范本
2015/08/05 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏