PHP で同じ名前の複数のフォームフィールドを処理するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-23 04:19:25
オリジナル
156 人が閲覧しました

How Can I Handle Multiple Form Fields with the Same Name in PHP?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート