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

时间:2013-10-16 19:06:46

标签: php

这个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> - 标记内提交值吗?还是有其他解决方案可以防止其他表单之间的值混淆?

2 个答案:

答案 0 :(得分:3)

由于您的表单标记位于foreach循环内,因此是:每个提交按钮只会提交与单击的提交按钮位于同一表单上的first_namelast_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++;
} ?>