是否可以获取多个具有相同名称的输入,然后从PHP访问它们?想法是这样的:我有一个表格,允许输入不确定数量的物理地址以及其他信息。如果我只是在几个条目中为每个字段赋予相同的名称,并通过post提交该数据,PHP是否可以访问它?

例如,我在一个页面上有五个输入,命名为“ xyz”,我想使用PHP访问它们。我可以做些什么:

    $_POST['xyz'][0]


如果这样,那会使我的生活轻松十倍,因为我可以通过表格发送无限量的信息并获取它由服务器处理,只需遍历名称为“ xyz”的项目数组即可。

#1 楼

更改输入的名称:

<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”。


请注意,这可能是错误的解决方案。显然,这取决于您要发送的数据。

评论


谢谢您的帮助。由于这是我问题的最完整答案,因此我选择它作为答案。但是,来自Interstellar_coder的答案也很好,但是您已经解释说,如果使用不正确,这可能是一个陷阱。我将限制项目的最大数量,并且我将在此表单上进行很多验证,因此,除非此方法中固有的问题未在此处进行说明,否则我不会遇到任何安全问题。

–亚当
2011-10-25 2:14

@Adam:重新阅读您的问题后,这是一种非常容易接受的方法。您可能想更进一步,并获得address [0] [street] address [0] [city] address [0] [zip],address [1] [street] address [1] [city] address [1 ] [zip] ...例如,您可以使用$ _POST ['address'] [0] ['city']阅读这些内容

–埃里克
2011-10-25 13:03

那么如何在HTML中命名呢?这样可以大大减轻难度。我要采用的方法是将几个字段命名为:l1 [],l2 [],city [],state [],zip [],zip4 []。然后,对于第一个地址,我只需在每个字段中使用$ i == 0。因此,如果我正确地理解了您的方法,则可能会这样命名我的元素:name =“ address [] [city]”用于城市字段。那是对的吗?

–亚当
2011年10月25日16:04

@亚当:可能。我认为您可能需要将索引放在第一个[]中,例如[0]。这使得HTML更加难以生成,但是在PHP端读取数据并不困难

–埃里克
2011-10-25 20:30

我想到的问题是:该字段是否会在数组内以随机顺序出现?还是按格式排列它们(即使有些字段留空)?

–rajeev
13年1月16日在15:59

#2 楼

在您的html中,您可以传入名称数组,即

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


这样,php将接收地址数组。

评论


正确正确的答案,这就是为什么我投票赞成。但是您没有对此做太多解释,这就是为什么我没有选择它作为我的问题的答案的原因。这已经帮助了我很多,因为我已经尝试了一段时间了(您可能在我之前的一个问题中注意到了)。我以前的方法是简单地将所有输入添加到带有*分隔值的隐藏字段中并重置输入字段,但是这种方法要好十倍,因为如果发现以前添加的地址是不正确

–亚当
11-10-25在16:17

请注意,空数组的POST计数为1,索引为“ 0”时没有任何内容。您需要使用'empty'关键字if(!empty($ arrayName)){//执行某项操作}

–Fi Horan
16年8月26日在13:16

#3 楼

Eric的回答是正确的,但问题是字段未分组。
想象一下,有多个街道和城市属于同一地区:

<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'] ];


要按地址对它们进行分组,我宁愿建议使用Eric在注释部分中也提到的内容:

<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'],
              ]
        ]


#4 楼

对于任何其他发现此问题的人-值得注意的是,您可以在输入名称中设置键值。感谢具有相同Name属性的POSTing Form Fields中的答案,您还可以在不使用引号的情况下交互字符串或整数。

答案假定您不介意PHP返回的键值,但是您可以设置name=[yourval](字符串或整数),然后它允许您引用现有记录。

评论


自己解析这是胡说八道。没有任何情况需要这样做。

–贾维德
17年2月6日在16:38

#5 楼

可以是:

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