PHP中使用php://input处理相同name值的表单数据
2015-02-03 11:53
721 查看
在去年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://input处理相同name值的表单数据
- 解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
- PHP中实现接收多个name相同但Value不相同表单数据
- PHP中实现接收多个name相同但Value不相同表单数据实例
- PHP中实现接收多个name相同但Value不相同表单数据实例
- PHP中POST提交数据name,使用$name无法得到值
- php处理excel时间数据--——使用PHPExcel判别和格式化Excel中的日期格式
- php使用memcache处理缓存数据
- PHP代码中input控件使用id无法POST传值,使用name就可以
- php获取form表单中name相同的表单项
- 【php】使用重定向,伪装表单处理页面不存在
- 使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
- 如果一张表单中有多个文本框的name属性值相同,action中应怎样处理
- PHP中POST提交数据name,使用$name无法得到值
- jquery序列化form表单使用ajax提交后处理返回的json数据
- Struts2中表单数据怎样实例化 <input name=user.name>struts实现拿值方法
- 使用 PHP 的 SimpleXML 扩展处理 YouTube 数据并将其集成到 PHP 应用程序中
- PHP 安全手册 第六条 表单 不希望变动的数据要设置为常量 使用session 进行跟踪
- <php+mysql>PHP基础,使用PHP访问表单数据
- 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同