web-dev-qa-db-ja.com

PHPのPOSTを介した同じ名前の複数の入力

同じ名前の複数の入力を取得して投稿し、PHPからそれらにアクセスすることは可能ですか?アイデアは次のとおりです。他の情報とともに物理アドレスを無制限に入力できるフォームがあります。これらのフィールドのそれぞれに複数のエントリで同じ名前を付けて、そのデータを投稿で送信した場合、PHPはアクセスできますか?

たとえば、「xyz」という名前の1ページに5つの入力があり、PHPを使用してそれらにアクセスしたいとします。次のようなことができますか:

    $_POST['xyz'][0]

もしそうなら、フォームを介して無制限の量の情報を送信し、「xyz」という名前の項目の配列をループするだけでサーバーで処理できるので、私の人生は10倍簡単になります。

105
Adam

入力の名前を変更します。

<input name="xyz[]" value="Lorem" />
<input name="xyz[]" value="ipsum"  />
<input name="xyz[]" value="dolor" />
<input name="xyz[]" value="sit" />
<input name="xyz[]" value="amet" />

次に:

$_POST['xyz'][0] == 'Lorem'
$_POST['xyz'][4] == 'amet'

もしそうなら、フォームを介して無制限の量の情報を送信し、「xyz」という名前の項目の配列をループするだけでサーバーで処理できるので、私の人生は10倍簡単になります。

これはおそらく間違った解決策であることに注意してください。明らかに、送信するデータによって異なります。

194
Eric

あなたのhtmlでは、名前の配列を渡すことができます

<input type="text" name="address[]" /> 

この方法で、phpはアドレスの配列を受け取ります。

36
aziz punjani

エリックの答えは正しいですが、問題はフィールドがグループ化されていないことです。一緒に属する複数の道路と都市があるとします:

<h1>First Address</h1>
<input name="street[]" value="Hauptstr" />
<input name="city[]" value="Berlin"  />

<h2>Second Address</h2>
<input name="street[]" value="Wallstreet" />
<input name="city[]" value="New York" />

結果は

$POST = [ 'street' => [ 'Hauptstr', 'Wallstreet'], 
          'city' => [ 'Berlin' , 'New York'] ];

アドレスでグループ化するには、コメントセクションでエリックが言及したものを使用することをお勧めします。

<h1>First Address</h1>
<input name="address[1][street]" value="Hauptstr" />
<input name="address[1][city]" value="Berlin"  />

<h2>Second Address</h2>
<input name="address[2][street]" value="Wallstreet" />
<input name="address[2][city]" value="New York" />

結果は

$POST = [ 'address' => [ 
                 1 => ['street' => 'Hauptstr', 'city' => 'Berlin'],
                 2 => ['street' => 'Wallstreet', 'city' => 'New York'],
              ]
        ]
1
Adam

他の人がこれを見つけた場合-入力名にキー値を設定できることに注意してください。 同じ名前の属性を持つフォームフィールドをPOSTする の回答のおかげで、引用符なしで文字列または整数を相互作用させることもできます。

答えは、PHPに返されるキー値を気にしないことを前提としていますが、name=[yourval](stringまたはint)を設定すると、既存のレコードを参照できます。

0
Antony

かもね:

echo "Welcome".$_POST['firstname'].$_POST['lastname'];
0
Azeemunnisa