从没有JavaScript的HTML表单中发布数组


90

我的表单有点复杂,我希望通过本地发布一个元组数组来简化服务器端(PHP)处理。

表单的第一部分代表一个User

  • 名字
  • 电子邮件
  • 地址
  • 等等

表单的第二部分代表一棵树

  • 水果
  • 高度
  • 等等

问题是我需要能够以相同形式为单个用户发布棵树。我想以的数组作为单个用户发送信息,但这对于表单而言可能太复杂了。唯一想到的是使用javascript使用User对象和Tree对象数组创建一些JSON消息。但最好避免使用javascript支持更多用户(某些人已关闭脚本)。


1
数组保证顺序吗?我想要一个具有多个字段的Tree对象数组,所以这意味着我必须使用多个数组来表示Tree,并且必须对数组进行排序,以便我可以确定它们表示的树。
styfle'1

Answers:


153

检查这一。

<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]无效自动索引数组?
摇晃

我如何获取此提交的数据作为js中的数组/对象以在提交回调中使用...我尝试过new formData($("form")[0]),jQuery$("form").serializeArray()name="tree[tree1][fruit]"以字符串形式返回
..help

注:它不使用jQuery职能工作,收集表单数据.serialize().serializeArray()
SubjectDelta

64

您还可以发布多个具有相同名称的输入,并通过在输入名称中添加空方括号来将它们保存到数组中,如下所示:

<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' )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.