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

Ada*_*dam 110 html php forms arrays post

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

比方说,例如,我在一个名为"xyz"的页面上有五个输入,我想使用PHP访问它们.我可以这样做:

    $_POST['xyz'][0]
Run Code Online (Sandbox Code Playgroud)

如果是这样,那将使我的生活变得容易十倍,因为我可以通过表单发送无限量的信息,并通过循环遍历名为"xyz"的项目数组来由服务器处理.

Eri*_*ric 200

更改输入的名称:

<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" />
Run Code Online (Sandbox Code Playgroud)

然后:

$_POST['xyz'][0] == 'Lorem'
$_POST['xyz'][4] == 'amet'
Run Code Online (Sandbox Code Playgroud)

如果是这样,那将使我的生活变得容易十倍,因为我可以通过表单发送无限量的信息,并通过循环遍历名为"xyz"的项目数组来由服务器处理.

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

  • @Adam:重新阅读你的问题后,这是一个完全可以接受的方法.你可能想进一步走一步,并有'地址[0] [街道]``地址[0] [市]``地址[0] [zip]`,`地址[1] [街道]``地址[1] [city]``address [1] [zip]`...你可以用`$ _POST ['address'] [0] ['city']`读取这些内容,例如 (8认同)

azi*_*ani 36

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

<input type="text" name="address[]" /> 
Run Code Online (Sandbox Code Playgroud)

这样php就会收到一组地址.

  • 好的和正确的答案,这就是我投票的原因.你没有解释太多,这就是为什么我没有选择它作为我的问题的答案.这对我有所帮助,因为我一直试图将这个问题弄清楚一段时间(正如你在之前的一个问题中所注意到的那样).我之前的方法是简单地将所有输入添加到带有*分隔值的隐藏字段并重置输入字段,但这种方法要好十倍,因为如果发现它们,我将能够删除以前添加的地址不正确. (3认同)

Ada*_*dam 17

埃里克的回答是正确的,但问题是字段没有分组。想象一下,您有多个属于同一类的街道和城市:

<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" />
Run Code Online (Sandbox Code Playgroud)

结果将是

$POST = [ 'street' => [ 'Hauptstr', 'Wallstreet'], 
          'city' => [ 'Berlin' , 'New York'] ];
Run Code Online (Sandbox Code Playgroud)

要按地址对它们进行分组,我宁愿建议使用 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" />
Run Code Online (Sandbox Code Playgroud)

结果将是

$POST = [ 'address' => [ 
                 1 => ['street' => 'Hauptstr', 'city' => 'Berlin'],
                 2 => ['street' => 'Wallstreet', 'city' => 'New York'],
              ]
        ]
Run Code Online (Sandbox Code Playgroud)