使用PHP中的一个按钮提交多个表单

时间:2012-11-27 03:51:09

标签: php forms post

我有一些动态添加的文本框和一些静态文本框。我遇到的问题是当我从其中一个动态表单中删除一个项目时,除非我用表单标签包装它,它只会从列表中删除最后一项。但是,当我将其包装在表单标签中时,静态文本框将不会发布。基本上我只是想知道如果我想提交文本框,如何正确使用标签。

例如,

<form method="post">
<textbox 1>
<textbox 2>
<textbox 3>

<?
 $tasks->task_form();

?>
 <another textbox> //these text boxes don't POST when the dynamic forms have tags wrapped around them
 <another textbox>
<?    
 $users->dynamic_form_2();
?>

</form>

例如,这是task_form

function task_form(){

//textbox and submit to add tasks here (omitted to keep shorter)

foreach (array_combine($task, $task_num) as $task => $task_num){
            ?>
            <form method="post">
            <tr><td><? echo $task; ?></td><td><? echo $task_num; ?></td>
            <td><input type="submit" name="remove_task" value="Remove"/></td>
            <td><input type="hidden" name="task_name" value="<? echo $task; ?>"/>
            <td><input type="hidden" name="task_num" value="<? echo $task_num; ?>"/></td></tr>
            </form>
            <?
        }

}

如果我没有在动态表单周围放置表单标签,那么无论我尝试删除哪一个表单,都会删除该表单中的最后一个项目。但是,使用表单标记时,某些文本框中的值根本不会POST。

3 个答案:

答案 0 :(得分:2)

这可能不是最干净的解决方案,但您可以使用jQuery之类的工具包,点击其中一个提交按钮,只需对每个表单并行发送ajax个查询,完成后,重定向到另一个页面。

我仍然强烈建议您查看表单,它可能应该只是一个表单!

答案 1 :(得分:1)

不,您不能使用纯HTML / PHP提交多个表单。

你必须

  • 重写表单以同时提交所有内容(这通常听起来比实际更难)或
  • 修改服务器逻辑以检查刚刚提交了哪些表单(可能使用isset($_POST['whatever']))。

AJAX解决方案可行,但也有利弊。

答案 2 :(得分:0)

只需从循环中删除标记:

foreach (array_combine($task, $task_num) as $task => $task_num){
            ?>
            <tr><td><? echo $task; ?></td><td><? echo $task_num; ?></td>
            <td><input type="submit" name="remove_task" value="Remove"/></td>
            <td><input type="hidden" name="task_name" value="<? echo $task; ?>"/>
            <td><input type="hidden" name="task_num" value="<? echo $task_num; ?>"/></td></tr>
            <?
        }

正如其他人所解释的那样,你无法嵌套表格。无论如何,您的字段属于同一个表单,因此您只需添加所需的字段即可。

个人而言,我已经转移到JQuery来处理表单的提交,因为它为用户提供了更好的体验(你可以立即给他反馈而不是循环到服务器),并且它也可以解放,因为你没有&#39 ; t确实需要表单标签甚至输入(如果你愿意,可以使用可写的div)。