PHP中使用php://input处理相同name值的表单数据


Posted in PHP onFebruary 03, 2015

在去年10月份,我在博客中分析了php接收前台name值相同的表单提交数据的处理的问题,当时说的方案是为把name值改成数组类型,php接收到之后,再对数组进行合并处理。这样做的缺点就是不完全兼容前台表单,用户必须要对表单作出更改,而系统需求是所有升级对用户完全透明,所以说这种方式还是不够完美。

经过差不多一年时间的沉淀,发现php提供原始的访问输入/输出流的方法,POST的数据可以通过php://input来获取:

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 php://input 是无效的。

php://input 打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI 的实现,请求体数据被保存的时候, 它可以打开另一个 php://input 数据流并重新读取。 通常情况下,这种情况只是针对 POST 请求,而不是其他请求方式,比如 PUT 或者 PROPFIND。

所以用php获取相同name值的表单数据的思路可以是这样,1,通过php://input获取原始的POST数据; 2,对数据进行处理合并; 3, 重新把处理过的值赋给系统变量$_POST; 下面是定义的一个函数:

function GET_SUBMIT(){
 if(empty($_POST)) return $_POST;
 //判断提交类型
 if($_SERVER["HTTP_CONTENT_TYPE"] != 'application/x-www-form-urlencoded'){
 return $_POST;
 }
 //获取POST原始值
 $data= file_get_contents("php://input");
 if(empty($data)) return $_POST;
 //开始处理
 $POST=array();
 $list=explode('&',$data);
 foreach($list as $key=>$value){
 //获取POST的KEY和Value值
 $postname=urldecode(substr($value,0, stripos($value,"=")));
 $postvalue=urldecode(substr($value,(stripos($value,"=")+1)));
 //对KEY值和Value值进行处理
 //去空格和[]
 $postname=trim($postname,' ,[,]');
 $postvalue=trim($postvalue);
 if(array_key_exists($postname,$POST)){
  $POST[$postname]=$POST[$postname]." ,".$postvalue;
 }else{
  $POST[$postname]=$postvalue;
 }
 }
 return $POST;
}

接下来只要在需要的地方使用”$_POST=GET_SUBMIT()”, 后面就可以通过$_POST来获取处理之后各个表单的数据。

PHP 相关文章推荐
php 随机生成10位字符代码
Mar 26 PHP
php 分页函数multi() discuz
Jun 21 PHP
php与php MySQL 之间的关系
Jul 17 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
Aug 21 PHP
php函数连续调用实例分析
Jul 30 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
PHP7新增函数
Mar 09 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 #PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 #PHP
php上传中文文件名乱码问题处理方案
Feb 03 #PHP
php上传文件常见问题总结
Feb 03 #PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 #PHP
php对象在内存中的存在形式分析
Feb 03 #PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 #PHP
You might like
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
js multiple全选与取消全选实现代码
2012/12/04 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Python正则表达式经典入门教程
2017/05/22 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
python同步windows和linux文件
2019/08/29 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
干部现实表现材料
2014/02/13 职场文书
专科生就业求职信
2014/06/22 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
初中生毕业评语
2014/12/29 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
销售员岗位职责范本
2015/04/11 职场文书
交通事故代理词范文
2015/05/23 职场文书
正规欠条模板
2015/07/03 职场文书