3

假设我有下表:

<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'];只使用最后一个值,因为有两个输入标签具有相同的名称。

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

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

4

4 回答 4

9

当 PHP 填充$_POST时,如果多条数据具有相同的名称,并且该名称不以该名称结尾,[]那么只有一个会存活并出现在$_POST数组中。

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

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

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

如果您真的无法更改名称,则可以$_POST完全绕过并解析原始数据(通过php://input),但是 IIRC,PHP 在填充时会破坏它$_POST

于 2013-06-27T13:26:01.950 回答
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
  }
}
于 2013-06-27T13:27:02.300 回答
0

好吧,我知道有动态行生成。但这并不意味着您不能为每行中的文本框赋予不同的名称。你绝对可以让它与众不同。我在 jsfiddle 中看到了您的代码。在追加时,您只需计算表中的行数,因此您可以 +1 并将其存储在变量中。并以文本框的名称连接此变量。因此,每次单击添加单元时,该行中的文本框都会有不同的名称。那是正确的解决方案。

于 2013-06-27T13:31:12.450 回答
0

快速解决方案:

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

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

这样,您将获得类似 id-1、id-2、id-3 的名称...

于 2013-06-27T13:28:21.430 回答