簡體   English   中英

郵寄形式的數據順序是否與網絡表單中的相同?

[英]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表單中的順序相同? 和跨瀏覽器,它可能是所有瀏覽器遵循的標准。

那么, W3C關於HTML表單的建議確實說:

控件名稱/值按它們在文檔中出現的順序列出。

不過,我認為讓你的應用程序嚴格依賴於這個細節有點冒險。

當您在名稱后放置[]時,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM