在PHP 中處理具有相同名稱屬性的表單欄位
在PHP 中,當提交具有多個共享相同名稱屬性的輸入欄位的表單時,出現一種奇怪的行為。 $_POST 陣列中只有具有該名稱的最後一個欄位的值可用。當嘗試檢索具有相同名稱的所有欄位的值時,這可能是一個重大障礙。
行為背後的原因
PHP 解析原始查詢字串以填充$_POST 數組,覆蓋任何現有的同名值。因此,當遇到多個同名欄位時,只記錄最後一個。
陣列結構欄位名稱
建議修正此問題為每個輸入欄位指派一個陣列結構名稱。例如,您可以使用“foo[]”和“bar[]”,而不是將它們命名為“foo”和“bar”。此變更將在 $_POST 中建立一個數組,其中鍵是通用名稱,值儲存在數組中。
使用陣列結構欄位名稱的範例程式碼
<form method="post"> <input name="a[]" value="foo"/> <input name="a[]" value="bar"/> <input name="a[]" value="baz"/> <input type="submit" /> </form>
在此範例中,$_POST['a'] 將是一個包含["foo", "bar", "baz"].
存取原始查詢字串
或者,如果您需要存取原始查詢字串,您可以使用file_get_contents('php:/ /輸入')功能。這將為您提供整個字串,然後您可以自己解析該字串。
解析原始查詢字串的範例程式碼
$post = array(); foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) { list($key, $value) = explode('=', $keyValuePair); $post[$key][] = $value; }
此程式碼將建立一個陣列將每個名稱對應到一個值數組,解決多個欄位具有相同名稱屬性的問題。
以上是如何在 PHP 中處理同名的多個表單欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!