PHP での同じ名前属性を持つフォーム フィールドの処理
PHP では、同じ name 属性を共有する複数の入力フィールドを持つフォームを送信するときに、特異な行動が発生します。その名前を持つ最後のフィールドの値のみが $_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:/ /input') 関数。これにより、文字列全体が得られ、その後自分で解析できます。
生のクエリ文字列を解析するサンプル コード
$post = array(); foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) { list($key, $value) = explode('=', $keyValuePair); $post[$key][] = $value; }
このコードは配列を作成します各名前が値の配列にマッピングされ、同じ名前属性を持つ複数のフィールドの問題が解決されます。
以上がPHP で同じ名前の複数のフォームフィールドを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。