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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
php实现高效获取图片尺寸的方法
Dec 12 PHP
php实现统计网站在线人数的方法
May 12 PHP
Yii快速入门经典教程
Dec 28 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
thinkPHP实现基于ajax的评论回复功能
Jun 22 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 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php日期操作技巧小结
2016/06/25 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
js常用代码段整理
2011/11/30 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python进阶篇之字典操作总结
2016/11/16 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
银行求职信
2014/05/31 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
黄河绝恋观后感
2015/06/08 职场文书
志愿者工作心得体会
2016/01/15 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
Python字符串常规操作小结
2022/04/03 Python
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js