【问题标题】:Handle submitted $_POST values, when more than one form/submit button is available on one page当一个页面上有多个表单/提交按钮时,处理提交的 $_POST 值
【发布时间】:2013-10-17 03:52:11
【问题描述】:

这个 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 是否只提交提交按钮所在的&lt;form&gt;-tags 内的值,还是有其他解决方案可以防止这些值在其他表单之间混淆?

【问题讨论】:

    标签: php


    【解决方案1】:

    由于您的表单标签在您的 foreach 循环内,因此可以:每个提交按钮只会提交与单击的提交按钮在同一表单上的 first_namelast_name 值。

    但是,您的 html 无效。有效的 html 将规定您要么在表格单元格中创建每个表单(td 标签),要么找到一种不同的方式将保存按钮与特定字段相关联(使用一些 javascript 或不同的标记)。看到这个答案:https://stackoverflow.com/a/1249715/2061789

    【讨论】:

    • 谢谢!当表单在 foreach 循环之外时,解决方案是什么?任何教程?谢谢!
    • 如果表单标签在每个循环之外,则表单将包含具有重复名称的&lt;input&gt; 元素:first_namelast_name。首先,使用重复的"name" 属性是完全错误的,其次,表单会行为不端:它不会为输入提交正确的值。
    • @SasankaPanguluri 谢谢 - 但是当表单超出 form-tag 时,有人怎么能处理这个问题?
    • @Divey - 但是在td 标签中创建一个新的茶杯,就像在你的链接答案中一样,当还有td 标签时将不起作用?
    • @Mike 这很复杂。但是,方法如下:保留hidden input 字段以跟踪表单中"first name""last name" 字段的数量。让我们呼叫该号码$count。并在每个名称标签上附加一个数字。在循环内,只需说 "first_name$count" 和姓氏也是如此。在循环外初始化$count。在} 之前,增加$count
    【解决方案2】:

    您需要为每个表格使用不同的表格。但是您可以根据计数器通过保留不同的名称来区分字段。像这样:

    <?
    $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++;
    } ?>
    

    【讨论】:

    • td 在每个表内。您将从输入名称中读取变量。
    • 对不起,我的意思是th:当表格还包含第一行th 标签时,表格结构会是什么样子?因为这一行不应该在foreach 循环中
    猜你喜欢
    • 2019-08-23
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多