最近做一个相册表单提交,例如我提交的数据如下:
array(7) { ["form_token"]=> string(2) "ok" ["album_name"]=> string(6) "ldjsfl" ["album_des"]=> string(0) "" ["album_sort"]=> string(0) "" ["o"]=> string(1) "k" ["l"]=> string(1) "d" [""]=> string(0) "" }
其中最后3个数据,完全不知道是怎么跑出来的。
实在没找到原因,只好先在后台手动过滤。
大致可以看出后面3个数据是由前面3个数据的值演变而来的,如果去一个个将前面3个元素值的第一个字符截取出来,再从数组中unset掉,虽然也可以实现,但这种方式未免太不优雅了,而且当表单值填写了中文时,还不知道后面3条数据的key值会出现什么难以预测的乱码。
废话不多说了,我就说说我的解决办法吧。
本人用的无名框架,所以大家看个大致思想就好。
第1步:
在AlbumModel里添加一个fillable属性,元素对应album数据库表列名。
//album.model.php class AlbumModel extends Model{ protected $fillable = [ 'album_id', 'album_name', 'album_desc', 'album_sort', 'album_cover', 'upload_time', 'is_default', 'status' ]; ... }
第2步:
在父类Model里添加fillable属性,以及获取子类fillable属性值的方法。
//model.php class Model{ protected $fillable; public function getFillableFields(){ return $this->fillable; } ... }
第3步:
在接收表单提交数据的地方,通过fillable属性来过滤掉其它不是数据库列的栏位。
$post_data = array_intersect_key($post_data, array_flip($model_album->getFillableFields()) );
一行到位,你说优雅不优雅。
这样子只要fillable填写的栏位都在数据库里,表单再怎么出现其它脏数据,都无所谓了。
本文为翟码农个人博客蓝翟红尘下php分类有关过滤表单脏数据的原创技术文章,转载请注明出处:http://www.zhai14.com/blog/how-to-deal-with-a-form-submit-with-redundant-data-in-php.html。