Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中通过POST使用相同名称的多个输入_Php_Html_Arrays_Forms_Post - Fatal编程技术网

在php中通过POST使用相同名称的多个输入

在php中通过POST使用相同名称的多个输入,php,html,arrays,forms,post,Php,Html,Arrays,Forms,Post,是否可以获得多个相同名称的输入来发布,然后从PHP访问它们?这个想法是这样的:我有一个表单,允许输入无限数量的物理地址以及其他信息。如果我只是在几个条目中给每个字段取相同的名称,然后通过post提交数据,PHP能够访问它吗 比如说,我在一个名为“xyz”的页面上有五个输入,我想使用PHP访问它们。我可以做一些类似于: $_POST['xyz'][0] 如果是这样的话,我的生活会轻松十倍,因为我可以通过一个表单发送无限量的信息,并通过名为“xyz”的项目数组让服务器处理这些信息。更改输入

是否可以获得多个相同名称的输入来发布,然后从PHP访问它们?这个想法是这样的:我有一个表单,允许输入无限数量的物理地址以及其他信息。如果我只是在几个条目中给每个字段取相同的名称,然后通过post提交数据,PHP能够访问它吗

比如说,我在一个名为“xyz”的页面上有五个输入,我想使用PHP访问它们。我可以做一些类似于:

    $_POST['xyz'][0]

如果是这样的话,我的生活会轻松十倍,因为我可以通过一个表单发送无限量的信息,并通过名为“xyz”的项目数组让服务器处理这些信息。

更改输入的名称:

<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" />

如果是这样的话,我的生活会轻松十倍,因为我可以发送一封电子邮件 通过表单处理的信息量不确定 服务器只需使用 名称为“xyz”


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

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

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


这样,php将接收一个地址数组

对于任何其他找到此项的人-值得注意的是,您可以在输入名称中设置键值。由于中的答案,您还可以在不引用的情况下相互作用字符串或整数

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

它可以是:

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

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" />
要按地址对他们进行分组,我建议使用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" />

谢谢你的帮助。因为这是对我的问题最完整的答案,我选择它作为答案。然而,星际编码器给出的答案也不错,但您已经解释过,如果使用不当,这可能是一个潜在的陷阱。我将限制项目的最大数量,并且我将在此表单上进行大量验证,因此我不应该遇到任何安全问题,除非此方法中存在未在此处解释的固有问题。@Adam:重读您的问题后,这是一种完全可以接受的方法。您可能希望更进一步,拥有
地址[0][street]
地址[0][city]
地址[0][zip]
地址[1][street]
地址[1][city]
地址[1][zip]
。。。您可以使用
$\u POST['address'][0]['city']
阅读这些内容,例如,在HTML中如何命名这些内容?这可能会大大缓解困难。我将采用的方法是有几个字段的名称如下:l1[],l2[],city[],state[],zip[],zip4[]。然后,对于第一个地址,我只是在每个字段中使用$I==0。因此,如果我正确理解了您的方法,我可能会对我的元素命名如下:name=“address[][city]”作为城市字段。“对吗?”亚当:可能。我认为您可能需要将索引放在第一个
[]
中,例如
[0]
。这使得HTML更难生成,但数据也不难读取。我想到的另一个问题是:字段是否会在数组中以随机顺序排列?或者它们是按表单中的顺序排列的(即使有些字段是空的)?回答正确,这就是我投票支持它的原因。但是你没有解释太多,这就是为什么我没有选择它作为我问题的答案。这对我很有帮助,因为我一直在努力解决这个问题(正如你在我前面的一个问题中注意到的)。我以前的方法是简单地将所有输入添加到带有*分隔值的隐藏字段,然后重置输入字段,但是这种方法要好十倍,因为如果发现以前添加的地址不正确,我可以允许删除这些地址。请注意,空数组的计数为1,在“0”索引中没有任何内容。如果(!empty($arrayName)){//do something},则需要使用'empty'关键字进行检查。自己解析它是毫无意义的。不存在需要这样做的情况。
$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'],
              ]
        ]