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

在去年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值
,以便于您获取更多的相关知识。

时间: 2024-10-26 22:08:58

PHP中使用php://input处理相同name值的表单数据_php技巧的相关文章

BootStrap中的表单大全_javascript技巧

表单 基础表单 对于表单中的input.textarea.select,一般我都会加上类"form-control",它设置元素的默认宽度为100%(并不是绝对,比如下述的内联表单).并且每个元素(包括label和待输入元素)都会加上"form-group".它的样式只有一个.margin-bottom:15px. <form action=""> <div class="form-group"> &l

在xmlhttp中传递cookie和表单数据

cookie|xml|数据 这里涉及到的是一些相对复杂的应用.使用合适的方法,可以在xmlhttp中传递cookie,提交表单. 这些也提醒我们需要防止该方法带来的漏洞. 第一,向服务器传送表单数据Dim forminfo,objXMLHTTPforminfo="user=niceidea&pw=111111"Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")objXMLHTTP.Open &q

表单里面的元素(如input,select)如果不放在表单里面,能单独提交吗

问题描述 表单里面的元素(如input,select)如果不放在表单里面,能单独提交吗 今天看了单位里面同事们写的页面,他们的input和button都没有写在form里面,请问这样input里面的内容能提交吗 解决方案 如图,jquery ajax代码: function commit(){ var para=$("#input1").val(); $.ajax({ url: "XXXX", type: "post", dataType: &q

javaweb-通过request获取表单数据,但封装不到对象中,求大神解答!

问题描述 通过request获取表单数据,但封装不到对象中,求大神解答! # User类有username和password两个属性,封装的时候只能封装进去password,输出map的值的时候,里面是有的-- 以下是封装语句: User form = CommonUtils.toBean(request.getParameterMap(),User.class); 以下是CommonUtils类的toBean()方法:(不允许使用尖括号,泛型就用圆括号代替了-) public static (

ie 8中onsubmit return false 无效问题的解决,表单还是提交了

问题描述 ie 8中onsubmit return false 无效问题的解决,表单还是提交了 ie 8中onsubmit return false 无效问题的解决,表单还是提交了 解决方案 IE8的bughttp://www.gbtags.com/gb/share/2432.htm 有人和你问题相同.用按钮代替吧. 解决方案二: 代码呢..无效说明你代码有问题报错了,没有执行到return false语句.注意你的return false一定要在onsubmit事件中,不要再其他回调中retu

JS中artdialog弹出框控件之提交表单思路详解_javascript技巧

artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口. 前言: 自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应,因此你不必去考虑消息内容尺寸使用它.它的消息容器甚至能够根据宽度让文本居中或居左对齐--这一切全是XHTML+CSS原生实现. 完善的接口 它的接口完善,可以轻易与外部程序配合使用.如异步写入消息.控制位置.尺寸.显示与隐藏.关闭等. 细致的体验 如果不是在输入状态,它支持Esc快捷键关

项目中通过js动态创建层的方法为表单添加错误提示

本文介绍利用动态创建层技术实现无冗余代码为表单自动添加错误提示的方法. 项目中表单输入检测是基本必定会碰到的,本文提供一种方法通过js动态创建层的方法为表单添加错误提示.该代码在IE6和firefox3.5中测试通过. 动态创建层的代码: function createDiv(msg) { //create a new empty p var str = document.createElement("p"); str.id = "newp"; //p ID str

javascritp实现input输入框相关限制用法_表单特效

1.取消按钮按下时的虚线框  在input里添加属性值 hideFocus 或者 HideFocus=true  2.只读文本框内容  在input里添加属性值 readonly  3.防止退后清空的TEXT文档(可把style内容做做为类引用)  <INPUT style=behavior:url(#default#savehistory); type=text id=oPersistInput>  4.ENTER键可以让光标移到下一个输入框  <input onkeydown=&qu

PHP中使用Session配合Javascript实现文件上传进度条功能_php技巧

Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP 5.4以前,实现这样的进度条并不容易,主要有三种方法: 1.使用Flash, Java, ActiveX 2.使用PHP的APC扩展 3.使用HTML5的File API 第一种方法依赖第三方的浏览器插件,通用性不足,且易带来安全隐患.不过由于Flash的使用比较广泛,因此还是有很多网站使用Flash作为解决方案. 第二种方法的不足