JavaScriptを使用せずにHTMLフォームから配列をPOSTする


90

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

フォームの最初の部分はユーザーを表します

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

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

  • フルーツ
  • 高さ

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


1
アレイは順序を保証しますか?複数のフィールドを持つTreeオブジェクトの配列が欲しいので、これは、Treeを表すために複数の配列を使用する必要があり、配列がどのTreeを表すかを理解できるように配列を並べ替える必要があることを意味します。
スタイフル2012年

回答:


154

これをチェックしてください。

<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'
        )
    )
)

6
配列のインデックス作成で許可される文字は何ですか?、。: `@を使用できますか?例:tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _はキーの命名で唯一安全な区切り文字ですか?
CoR 2014年

4
だろうtree[][fruit]tree[][height]、アレイ自動的にインデックスに有効ではありませんか?
2016

この送信されたデータをjsの配列/オブジェクトとして取得して送信コールバックで使用するにはどうすればよいですか...私は試しましたがnew formData($("form")[0])、jQueryは$("form").serializeArray()両方ともname="tree[tree1][fruit]"文字列として返されます....ヘルプ
santosh

注:それはようコレクトフォームデータにjqueryの機能は動作しません.serialize().serializeArray()
SubjectDelta

65

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

<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' )
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.