当一个页面上有多个表单/提交按钮可用时,处理提交的 $_POST 值


Handle submitted $_POST values, when more than one form/submit button is available on one page

这个 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_namelast_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++;
} ?>