ThinkPHP3.1新特性之字段合法性检测详解


Posted in PHP onJune 19, 2014

ThinkPHP3.1版增加了表单提交的字段合法性检测,可以更好的保护数据的安全性。这一特性是3.1安全特性中的一个重要部分。

表单字段合法性检测需要使用create方法创建数据对象的时候才能生效,具体有两种方式:

一、属性定义

可以给模型配置insertFields 和 updateFields属性用于新增和编辑表单设置,使用create方法创建数据对象的时候,不在定义范围内的属性将直接丢弃,避免表单提交非法数据。

insertFields 和 updateFields属性的设置采用字符串(逗号分割多个字段)或者数组的方式,例如:

class UserModel extends Model{
  protected $insertFields = array('account','password','nickname','email');
  protected $updateFields = array('nickname','email');
 }

设置的字段应该是实际的数据表字段,而不受字段映射的影响。

在使用的时候,我们调用create方法的时候,会根据提交类型自动识别insertFields和updateFields属性:

D('User')->create();

使用create方法创建数据对象的时候,新增用户数据的时候,就会屏蔽'account','password','nickname','email' 之外的字段,编辑的时候就会屏蔽'nickname','email'之外的字段。

下面是采用字符串定义的方式,同样有效:

class UserModel extends Model{
  protected $insertFields = 'account,password,nickname,email';
  protected $updateFields = 'nickname,email';
 }

二、方法调用

如果不想定义insertFields和updateFields属性,或者希望可以动态调用,可以在调用create方法之前直接调用field方法,例如,实现和上面的例子同样的作用:

在新增用户数据的时候,使用:

$User = M('User');
$User->field('account,password,nickname,email')->create();
$User->add();

而在更新用户数据的时候,使用:

$User = M('User');
$User->field('nickname,email')->create();
$User->where($map)->save();

这里的字段也是实际的数据表字段。field方法也可以使用数组方式。

使用字段合法性检测后,你不再需要担心用户在提交表单的时候注入非法字段数据了。显然第二种方式更加灵活一些,根据需要选择吧!

PHP 相关文章推荐
PHP5常用函数列表(分享)
Jun 07 PHP
解析PHP提交后跳转
Jun 23 PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
PHP自动生成表单代码分享
Jun 19 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 #PHP
ThinkPHP的Widget扩展实例
Jun 19 #PHP
ThinkPHP3.1的Widget新用法
Jun 19 #PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 #PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 #PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 #PHP
php定界符
Jun 19 #PHP
You might like
初学CAKEPHP 基础教程
2009/11/02 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
浅谈php和.net的区别
2014/09/28 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
一个js实现的所谓的滑动门
2007/05/23 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
Python 制作糗事百科爬虫实例
2016/09/22 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
设计师珠宝:Ylang 23
2018/05/11 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
物理系毕业生自荐书范文
2014/02/22 职场文书
学徒工职责
2014/03/06 职场文书
请假条范文大全
2014/04/10 职场文书
真诚的求职信
2014/07/04 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
个人合伙协议书范本
2014/10/14 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python