Home  >  Article  >  Backend Development  >  Use php://input in PHP to process form data with the same name value, inputname_PHP tutorial

Use php://input in PHP to process form data with the same name value, inputname_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:07:591028browse

In PHP, php://input is used to process form data with the same name value, inputname

In October last year, I analyzed in my blog the problem of PHP receiving form submission data with the same name value in the front end. The solution mentioned at that time was to change the name value into an array type. After PHP received it, it would Arrays are merged. The disadvantage of this is that it is not fully compatible with the front-end form, and users must make changes to the form. The system requirement is that all upgrades are completely transparent to users, so this method is still not perfect.

After almost a year of accumulation, I found that php provides a primitive method of accessing the input/output stream. POST data can be obtained through php://input:

Copy code The code is as follows:

php://input is a read-only stream that provides access to the requested raw data. In the case of POST requests, it is better to use php://input instead of $HTTP_RAW_POST_DATA, as it does not rely on specific php.ini directives. Also, in this case $HTTP_RAW_POST_DATA is not populated by default, potentially requiring less memory than activating always_populate_raw_post_data. When enctype=”multipart/form-data”, php://input is invalid.
The data stream opened by php://input can only be read once; the data stream does not support the seek operation. However, depending on the implementation of SAPI, when the request body data is saved, it can open another php://input data stream and re-read it. Typically, this is only the case for POST requests, not other request methods such as PUT or PROPFIND.

So the idea of ​​using php to obtain form data with the same name value can be as follows: 1. Get the original POST data through php://input; 2. Process and merge the data; 3. Re-assign the processed values Give the system variable $_POST; the following is a function defined:

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;
}

Next, just use "$_POST=GET_SUBMIT()" where needed, and you can later use $_POST to obtain the data of each form after processing.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/953149.htmlTechArticlePHP uses php://input to process form data with the same name value. inputname In October last year, I The blog analyzes the problem of PHP receiving form submission data with the same front-end name value,...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn