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 相关文章推荐
DISCUZ 分页代码
Jan 02 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
Zend的Registry机制的使用说明
May 02 PHP
PHP+javascript制作带提示的验证码源码分享
May 28 PHP
php取得字符串首字母的方法
Mar 25 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
PHP文件操作实例总结
Sep 27 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
PHP实现腾讯与百度坐标转换
Aug 05 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 self,$this,const,static,->的使用
2009/10/22 PHP
php中cookie的使用方法
2014/03/29 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
python二分查找算法的递归实现方法
2016/05/12 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
教师找工作推荐信
2013/11/23 职场文书
建材业务员岗位职责
2013/12/08 职场文书
医药工作岗位求职信分享
2013/12/31 职场文书
5.12护士节活动总结
2015/02/10 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
订货会主持词
2015/07/01 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
使用python绘制横竖条形图
2022/04/21 Python