使用 PHP 获取 2 个同名 HTML 输入标签的值

Get the values of 2 HTML input tags having the same name using PHP

提问人:maggie 提问时间:6/27/2013 最后编辑:Shankar Narayana Damodaranmaggie 更新时间:6/27/2013 访问量:4778

问:

假设我有下表:

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

PHP 的HTML格式

评论

2赞 Joum 6/27/2013
如果它“具有动态添加行”,是否可以简单地将整数值附加到名称中?
0赞 Pitchinnate 6/27/2013
不能有同名的输入,否则它们将在 POST 数组中相互覆盖。
0赞 Yang 6/27/2013
实际上你做错了,因为 1) 由于行是动态的,你可以简单地使用替代语法遍历数组 2) 一旦 PHP 遇到相同的名称,最后一个仍然存在。所以,你对此无能为力,你必须处理数组。
0赞 maggie 6/27/2013
我知道我可以使用计数器之类的东西,但是还有另一个功能会受到影响,如果它们有不同的名称,则更难实现

答:

9赞 Quentin 6/27/2013 #1

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

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

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

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

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

7赞 Barmar 6/27/2013 #2

当你有重复的名字时,你必须给它们起数组样式的名字:

<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
  }
}

评论

0赞 maggie 6/27/2013
当我使用 $id = $_POST['id'] 时,它给了我 undefind 索引 id
0赞 Barmar 6/27/2013
是在用户提交表单之前还是之后?
0赞 maggie 6/27/2013
在他提交表格后。如何将一个数组分配给另一个数组?
0赞 maggie 6/27/2013
哦,我认为当我使用 $id = $_POST['id'] 时语法是错误的
0赞 Barmar 6/27/2013
然后,只要填写了 ID 字段,这应该有效。然后你可以做foreach ($_POST['id'] as $index => $id)
0赞 Racso 6/27/2013 #3

快速解决方案:

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

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

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

评论

1赞 maggie 6/27/2013
我知道我仍然可以使用其他名称和类似的东西,但是还有另一个功能会受到影响,如果它们有不同的名称,则更难实现
0赞 Prem Baranwal 6/27/2013 #4

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

评论

1赞 maggie 6/27/2013
我知道我仍然可以使用其他名称和类似的东西,但是还有另一个功能会受到影响,如果它们有不同的名称,则更难实现