这个foreach循环创建了大约120个表行。
在每一行中都有两个输入字段,用户可以在其中更新/更改名字和姓氏。
更改输入值后,用户单击“保存”按钮以使用$ _POST发送输入值。
<table>
<? foreach ($members as $member) {?>
<form name="member" action="" method="POST">
<tr>
<td><input name="id" type="hidden" value="<? echo $member['id'] ?>"></td>
<td><input name="first_name" type="text" value="<? echo $member['first_name'] ?>"></td>
<td><input name="last_name" type="hidden" value="<? echo $member['last_name'] ?>"></td>
<td><input type="submit" value="Save"></td>
</tr>
</form>
<? } ?>
我发现问题是,有120个输入字段包含name="id"
和name="first_name"
以及name="last_name"
。
Normaly我会像这样接受提交的值,但它会变成一个变量:
$first_name = $_POST['first_name'];
form
只会在提交按钮所在的<form>
- 标记内提交值吗?还是有其他解决方案可以防止其他表单之间的值混淆?
答案 0 :(得分:3)
由于您的表单标记位于foreach循环内,因此是:每个提交按钮只会提交与单击的提交按钮位于同一表单上的first_name
和last_name
值。
但是,你的html无效。有效的html将指示您在表格单元格(td
标记)中创建每个表单,或者找到将保存按钮与特定字段(使用某些javascript或不同标记)相关联的不同方式。请参阅此答案:https://stackoverflow.com/a/1249715/2061789
答案 1 :(得分:0)
您需要为每个表单使用不同的表。但您可以根据计数器保留不同的名称来区分字段。像这样:
<?
$i = 0;
foreach ($members as $member) {
?>
<table>
<form name="member" action="" method="POST">
<tr>
<td><input name="<?php echo 'id_'.$i;?>" type="hidden" value="<? echo $member['id'] ?>"></td>
<td><input name="<?php echo 'first_name_'.$i;?>" type="text" value="<? echo $member['first_name'] ?>"></td>
<td><input name="<?php echo 'last_name_'.$i;?>" type="hidden" value="<? echo $member['last_name'] ?>"></td>
<td><input type="submit" value="Save"></td>
</tr>
</form>
</table>
<?php
$i++;
} ?>