提问人:maggie 提问时间:6/27/2013 最后编辑:Shankar Narayana Damodaranmaggie 更新时间:6/27/2013 访问量:4778
使用 PHP 获取 2 个同名 HTML 输入标签的值
Get the values of 2 HTML input tags having the same name using PHP
问:
假设我有下表:
<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 填充时,如果多个数据段具有相同的名称,并且该名称不以结尾,则只有一个数据将存活下来出现在数组中。$_POST
[]
$_POST
重命名字段,使名称以 结尾。[]
不要告诉我更改输入标签的名称,因为该表比这更复杂一些,并且它具有动态添加行
动态不应该成为名字末尾的障碍。[]
如果您真的无法更改名称,那么可以完全绕过并解析原始数据(通过 php://input
),但是 IIRC、PHP 在填充时会破坏它。$_POST
$_POST
当你有重复的名字时,你必须给它们起数组样式的名字:
<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
}
}
评论
foreach ($_POST['id'] as $index => $id)
快速解决方案:
更改您拥有的代码中的输入标签名称并不复杂。试试这个:
<input type="text" name="id"'+counter+' size="2" value="'+counter+'"/>
这样,您将获得 id-1、id-2、id-3 等名称......
评论
好吧,我知道有动态行生成。但这并不意味着您不能为每行中的文本框提供不同的名称。你绝对可以让它与众不同。我在 jsfiddle 中看到了你的代码。在追加时,您只需计算表中的行数,然后相应地,您可以将其 +1 并将其存储在变量中。并将此变量连接到文本框的名称中。因此,每次它都会单击“添加单位”,行中的文本框将具有不同的名称。这是正确的解决方案。
评论