• 技术文章 >后端开发 >php教程

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

    2016-05-16 20:24:10原创560
    在去年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来获取处理之后各个表单的数据。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php可应用于面包屑导航的迭代寻找家谱树实现方法_php技巧 下一篇:PHP中实现接收多个name相同但Value不相同表单数据实例_php技巧
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP如何使用xlswriter进行大数据的导入导出?(详解)• 详解YII关联查询,详解YII关联_PHP教程• PHP使用SOAP调用.net的WebService问题_PHP教程• [原创]ajax 实现用户注册功能教程三_PHP教程• 四文章类封装对文章的各种操作插入数据库、从数据库取出等等_PHP教程
    1/1

    PHP中文网