[英]Will data order in post form be the same to it in web form?
假設網絡表格中有5個輸入
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
當服務器端收到帖子數據時,我會使用foreach接受數據
$the_same = new array();
foreach($_POST['the_same'] as $data)
$the_same[] = $data;
服務器端保存的數據順序是否與Web表單中的順序相同? 和跨瀏覽器,它可能是所有瀏覽器遵循的標准。
當您在名稱后放置[]
時,PHP已經處理將POSTed / GETed變量轉換為數組。 這樣做而不是自己弄錯了。
在html中更好的方法:
<input name='the_same[]' value='different' />
然后在服務器中:
$the_same = new array();
foreach($_POST['the_same'] as $data) // or $_GET if you prefer
$the_same[] = $data;
這樣就不會覆蓋任何變量。
如果你想在訂單中使用它,你可以使用動態變量或只是顯式訪問數組
the_same1 the_same2 the_same3
既然你知道這些名字,你可以輕松訪問它們
$the_same = array();
for($i=1; ; $i++){
$tmp =$_REQUEST["the_same".$i]
if( empty($tmp) ){
// no more stuff
break;
}
$the_same[] = $tmp;
}
如果您將輸入的名稱更改為the_same[]
- $_REQUEST['the_same']
將成為這些值的數組,首先按元素順序排列(我相信所有當前瀏覽器)。
如果需要,您還可以指定特定訂單,甚至可以使用字符串鍵。 例如, <input name='the_same[apple][2]'/>
將成為$_REQUEST['the_same']['apple'][2]
如果不在輸入名稱上使用[]
,PHP將只看到最后一個值。 構造$_REQUEST
/ $_GET
/ $_POST
數組時,其他值將被后一個值“覆蓋”。
使用它的一個示例可能是使用復選框,因為HTML復選框僅在選中時提交值,您可能希望提交“未檢查”值somtime:
<input type='hidden' name='check' value='not checked' />
<input type='checkbox' name='check' value='checked' />
很可能是的,但你不應該假設這一點。 這取決於您的瀏覽器如何發送輸入,並且通常PHP不保證foreach循環以與添加元素相同的順序迭代。
為您的輸入提供相同的名稱是一種不好的做法。
您可以在每個名稱值后附加一個索引(如果需要,甚至使用javascript),然后在PHP中閱讀此內容以確保維護訂單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.