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面向对象全攻略 (九)访问类型
Sep 30 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
php中curl使用指南
Feb 05 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
php mysql PDO 查询操作的实例详解
Sep 23 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.ini中文版
2006/10/09 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
Python smallseg分词用法实例分析
2015/05/28 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Python数据结构之翻转链表
2017/02/25 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
创建Django项目图文实例详解
2019/06/06 Python
python、Matlab求定积分的实现
2019/11/20 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
同意离婚答辩状
2015/05/22 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL