欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP中使用php://input處理相同name值的表單數(shù)據(jù)

 更新時(shí)間:2015年02月03日 11:53:26   投稿:junjie  
這篇文章主要介紹了PHP中使用php://input處理相同name值的表單數(shù)據(jù),本文是另一種處理相同name值表單數(shù)據(jù)的方法,文中同時(shí)給出另一種方法,需要的朋友可以參考下

在去年10月份,我在博客中分析了php接收前臺(tái)name值相同的表單提交數(shù)據(jù)的處理的問(wèn)題,當(dāng)時(shí)說(shuō)的方案是為把name值改成數(shù)組類型,php接收到之后,再對(duì)數(shù)組進(jìn)行合并處理。這樣做的缺點(diǎn)就是不完全兼容前臺(tái)表單,用戶必須要對(duì)表單作出更改,而系統(tǒng)需求是所有升級(jí)對(duì)用戶完全透明,所以說(shuō)這種方式還是不夠完美。

經(jīng)過(guò)差不多一年時(shí)間的沉淀,發(fā)現(xiàn)php提供原始的訪問(wèn)輸入/輸出流的方法,POST的數(shù)據(jù)可以通過(guò)php://input來(lái)獲取:

復(fù)制代碼 代碼如下:

php://input 是個(gè)可以訪問(wèn)請(qǐng)求的原始數(shù)據(jù)的只讀流。 POST 請(qǐng)求的情況下,最好使用 php://input 來(lái)代替 $HTTP_RAW_POST_DATA,因?yàn)樗灰蕾囉谔囟ǖ?php.ini 指令。 而且,這樣的情況下 $HTTP_RAW_POST_DATA 默認(rèn)沒(méi)有填充, 比激活 always_populate_raw_post_data 潛在需要更少的內(nèi)存。 enctype=”multipart/form-data” 的時(shí)候 php://input 是無(wú)效的。
php://input 打開(kāi)的數(shù)據(jù)流只能讀取一次; 數(shù)據(jù)流不支持 seek 操作。 不過(guò),依賴于 SAPI 的實(shí)現(xiàn),請(qǐng)求體數(shù)據(jù)被保存的時(shí)候, 它可以打開(kāi)另一個(gè) php://input 數(shù)據(jù)流并重新讀取。 通常情況下,這種情況只是針對(duì) POST 請(qǐng)求,而不是其他請(qǐng)求方式,比如 PUT 或者 PROPFIND。

所以用php獲取相同name值的表單數(shù)據(jù)的思路可以是這樣,1,通過(guò)php://input獲取原始的POST數(shù)據(jù); 2,對(duì)數(shù)據(jù)進(jìn)行處理合并; 3, 重新把處理過(guò)的值賦給系統(tǒng)變量$_POST; 下面是定義的一個(gè)函數(shù):

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;
 //開(kāi)始處理
 $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)));
 //對(duì)KEY值和Value值進(jìn)行處理
 //去空格和[]
 $postname=trim($postname,' ,[,]');
 $postvalue=trim($postvalue);
 if(array_key_exists($postname,$POST)){
  $POST[$postname]=$POST[$postname]." ,".$postvalue;
 }else{
  $POST[$postname]=$postvalue;
 }
 }
 return $POST;
}

接下來(lái)只要在需要的地方使用”$_POST=GET_SUBMIT()”, 后面就可以通過(guò)$_POST來(lái)獲取處理之后各個(gè)表單的數(shù)據(jù)。

相關(guān)文章

最新評(píng)論