使用PHP获取具有相同名称的2个HTML输入标记的值

时间:2013-06-27 13:22:23

标签: php html

假设我有下表:

<form  action="bla.php" method=post>
<table class="pv-data">
<tr>
<td><input type="text" name="id" size="2" value=1 /></td>
<td><input type="text" name="longitude" size="7"/></td>
<td><input type="text" name="latitude" size="7"/></td>
</tr>
<tr>
<td><input type="text" name="id" size="2" value=2 /></td>
<td><input type="text" name="longitude" size="7"/></td>
<td><input type="text" name="latitude" size="7"/></td>
</tr>
</table>
<input type="submit" name="submit" value="SUBMIT">
</form>

我想将此表中的值分配给php变量,因此在bla.php

如果我使用$id = $_REQUEST['id'];,则仅使用最后一个值,因为有两个具有相同名称的输入标记。

那么我可以在php中请求这些具有相同名称的标签的2个值吗?

p.s不要告诉我更改输入标签的名称,因为该表比这更复杂,并且它具有动态添加行: 我的真实代码是:http://jsfiddle.net/CchES/9/

4 个答案:

答案 0 :(得分:9)

当PHP填充$_POST时,如果多个数据片段具有相同的名称,并且该名称未以[]结尾,那么只有一个数据将存在以显示在$_POST数组中。

重命名字段,使名称以[]结尾。

  

不要告诉我更改输入标记的名称,因为表格比这更复杂,并且它有动态添加行

动态不应成为在名称末尾加[]的障碍。

如果你真的无法更改名称,那么有可能完全绕过$_POST并解析原始数据(via php://input),但是当它填充{II}时,它会成为IIRC,PHP clobbers }。

答案 1 :(得分:7)

如果你有重复的名字,你必须给它们数组样式的名字:

<form  action="bla.php" method=post>
<table class="pv-data">
<tr>
<td><input type="text" name="id[]" size="2" value=1 /></td>
<td><input type="text" name="longitude[]" size="7"/></td>
<td><input type="text" name="latitude[]" size="7"/></td>
</tr>
<tr>
<td><input type="text" name="id[]" size="2" value=2 /></td>
<td><input type="text" name="longitude[]" size="7"/></td>
<td><input type="text" name="latitude[]" size="7"/></td>
</tr>
</table>
<input type="submit" name="submit" value="SUBMIT">
</form>

执行此操作时,$_POST['id']$_POST['latitude']$_POST['longitude']将是包含值的数组。

您的表单处理代码可以迭代这些:

for ($i = 0; $i < count($_POST['id']); $i++) {
  if (isset($_POST['latitude'][$i], $_POST['longitude'][$i])) { // Make sure both are filled in
    // Do stuff with this row of the form
  }
}

答案 2 :(得分:0)

快速解决方案:

更改您拥有的代码中的输入标记名称并不复杂。试试这个:

<input type="text" name="id"'+counter+' size="2" value="'+counter+'"/>

这样,你会得到像id-1,id-2,id-3 ......

这样的名字

答案 3 :(得分:0)

嗯,我知道有动态行生成。但这并不意味着您无法为每行中的文本框提供不同的名称。你绝对可以让它与众不同。我在jsfiddle中看到了你的代码。在附加时,您只需计算表格中的行数,相应地,您可以对其+1,并将其存储在变量中。并在文本框的名称中连接此变量。那么,每次都会点击添加单位,行中的文本框会有不同的名称。这是正确的解决方案。