最近在一個詢盤留言管理系統時候一個問題,留言的前臺的表單當中出現很多name值相同的input框,這些框是由用戶填寫的各不相同的值,現在要遷移到php平臺上,而且要求不能改變前臺的任何表單(因為用到這個表單的網站實在是太多了,所以必須要考慮轉移的兼容性,就連form的提交地址也不能變,必須是提交到某個asp頁面上)。form提交地址問題,可以用偽靜態或其它方法直接解決。由于以前的系統是由asp做的,asp在處理相同name值的表單的時候,是直接用逗號把前臺提交的值連起來,而php卻不一樣,它接收相同的name的input的時候,是最后一個把前面的值給覆蓋掉了。那么,怎么樣在不改寫前臺的基礎上,做到能接受到所有name相同的input的值呢?當時腦子里浮現兩個想法,第一個是讓這個input的name以數組的方式傳到后臺,然后作出處理,但是很快被否定掉了,因為這樣也必須要改動前臺的代碼,讓
<input type="text" name="a" />改成<input type="text" name="a[]" />。第二個想法是php配置當中,有沒有類似的設置可以讓php像asp這樣處理相同name值的表單,查了半天資料,也沒有找到。
最后發現,只能退而求其次,稍微改動一下前臺,把name換成數組,幸好這樣去用的網站并不多。那么接下來就是后臺處理數據的問題了,前臺的name有一部分改了,這時候就會出現一種情況,php不知道由form提交過來的是字符串還是數組,那么怎么樣去做呢,我的辦法是寫一個函數:
- function input_treat($input){
- if(gettype($input)=="string"){
- return htmlentities(trim($input),ENT_QUOTES);
- }else if(gettype($input)=="array"){
- $nd="";
- foreach($input as $v){
- $nd .=htmlentities(trim($v),ENT_QUOTES)." ";
- }
- return $nd;
- }else{
- return false;
- }
- }
新聞熱點
疑難解答