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 相关文章推荐
PHP 身份证号验证函数
May 07 PHP
php 静态变量的初始化
Nov 15 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
PHP 验证码的实现代码
Jul 17 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
PHP判断浏览器、判断语言代码分享
Mar 05 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
php中动态变量用法实例
2015/06/10 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
在模板页面的js使用办法
2010/04/01 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
python脚本替换指定行实现步骤
2017/07/11 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
市场部管理制度
2014/02/02 职场文书
商业融资计划书
2014/04/29 职场文书
村党支部换届选举方案
2014/05/02 职场文书
工作求职信
2014/07/04 职场文书
年检委托书
2014/08/30 职场文书
合作意向协议书
2015/01/29 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
领导视察通讯稿
2015/07/18 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python