PHP中使用php://input处理相同name值的表单数据
程序员文章站
2022-06-09 11:06:41
在去年10月份,我在博客中分析了,当时说的方案是为把name值改成数组类型,php接收到之后,再对数组进行合并处理。这样做的缺点就是不完全兼容前台表单,用户必须要对表单作出...
在去年10月份,我在博客中分析了,当时说的方案是为把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来获取处理之后各个表单的数据。
上一篇: 2020前端面试题目
推荐阅读
-
php获取表单中多个同名input元素的值
-
PHP中实现接收多个name相同但Value不相同表单数据实例
-
PHP中使用php://input处理相同name值的表单数据
-
php使用sqlsrv查询远路sql2008数据表中字段名为中文的字段取不到值
-
html - php如何获取 页面多个相同name的 input 值
-
php获取表单中多个同名input元素的值
-
PHP中使用php://input处理相同name值的表单数据,inputname
-
怎么把php从数据库中获得的值显示到前台表单中 具体例子
-
PHP中使用php://input处理相同name值的表单数据
-
html - php如何获取 页面多个相同name的 input 值