Home > Article > Backend Development > Use php://input in PHP to process form data with the same name value, inputname_PHP tutorial
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:
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.