web-dev-qa-db-ja.com

POST JavaScriptなしのHTMLフォームからの配列

少し複雑なフォームがあり、タプルの配列をネイティブにPOSTすることでサーバー側(PHP)の処理を簡素化したいと考えています。

フォームの最初の部分はserを表します:

  • ファーストネーム
  • 苗字
  • Eメール
  • 住所

フォームの2番目の部分はTreeを表します。

  • フルーツ
  • 高さ

問題は、同じフォームで単一のユーザーに対してPOST multiple Treesができる必要があることです。情報を単一のserの配列でTreesとして送信したいのですが、これはフォームで行うには複雑すぎるかもしれません。頭に浮かぶのは、javascriptを使用して、UserオブジェクトとTreeオブジェクトの配列を持つJSONメッセージを作成することだけです。しかし、より多くのユーザーをサポートするためにjavascriptを避けるのは良いことです(スクリプトをオフにしている人もいます)。

75
styfle

これを確認してください。

<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="email">
<input type="text" name="address">

<input type="text" name="tree[tree1][fruit]">
<input type="text" name="tree[tree1][height]">

<input type="text" name="tree[tree2][fruit]">
<input type="text" name="tree[tree2][height]">

<input type="text" name="tree[tree3][fruit]">
<input type="text" name="tree[tree3][height]">

最終的には$ _POST []配列でこのようになります(簡単に視覚化するためのPHP形式)

$_POST[] = array(
    'firstname'=>'value',
    'lastname'=>'value',
    'email'=>'value',
    'address'=>'value',
    'tree' => array(
        'tree1'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree2'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree3'=>array(
            'fruit'=>'value',
            'height'=>'value'
        )
    )
)
129
Joseph

次のように入力名に空の角かっこを追加することで、同じ名前の複数の入力を投稿し、配列に保存することもできます。

<input type="text" name="comment[]" value="comment1"/>
<input type="text" name="comment[]" value="comment2"/>
<input type="text" name="comment[]" value="comment3"/>
<input type="text" name="comment[]" value="comment4"/>

Phpを使用する場合:

print_r($_POST['comment']) 

あなたはこれを取得します:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
42
Dan