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 相关文章推荐
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
php 判断数组是几维数组
Mar 20 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
php微信开发之图片回复功能
Jun 14 PHP
php xhprof使用实例详解
Apr 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
桌面中心(四)数据显示
2006/10/09 PHP
用PHP实现的生成静态HTML速度快类库
2007/03/31 PHP
PHP分页显示制作详细讲解
2008/11/19 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
js实现计算器功能
2020/08/10 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
十个Python程序员易犯的错误
2015/12/15 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Python编程argparse入门浅析
2018/02/07 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
python生成特定分布数的实例
2019/12/05 Python
python 写一个水果忍者游戏
2021/01/13 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
自我评价范文点评
2013/12/04 职场文书
保护水资源的标语
2014/06/17 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
硕士学位申请报告
2015/05/15 职场文书