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 相关文章推荐
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
使用phpQuery采集网页的方法
Nov 13 PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
Laravel向公共模板赋值方法总结
Jun 25 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
laravel入门知识点整理
2020/09/15 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
JavaScript DOM基础
2015/04/13 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
Python 加密与解密小结
2018/12/06 Python
python程序控制NAO机器人行走
2019/04/29 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Django缓存Cache使用详解
2020/11/30 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
文秘专业自荐信
2013/10/14 职场文书
大学生大二自我鉴定
2013/10/28 职场文书
社区科普工作方案
2014/06/03 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014年平安夜寄语
2014/12/08 职场文书
MySQL索引失效场景及解决方案
2022/07/23 MySQL