这个 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"
.
正常情况下,我会像这样获取提交的值,但它会变成一个变量:
$first_name = $_POST['first_name'];
form
是只提交提交按钮所在的 <form>
-tag 中的值,还是有其他解决方案可以防止这些值在其他表单之间混淆?
由于您的表单标签位于 foreach 循环内,因此是的:每个提交按钮将仅提交与单击的提交按钮位于同一表单上的first_name
和last_name
值。
但是,您的 html 无效。有效的html将指示您要么在表格单元格(td
标签)中创建每个表单,要么找到一种不同的方法来将保存按钮与特定字段(使用某些javascript或不同的标记)相关联。看到这个答案:https://stackoverflow.com/a/1249715/2061789
您需要为每个表单使用不同的表格。但是,您可以通过根据计数器保留不同的名称来区分字段。喜欢这个:
<?
$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++;
} ?>