2

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

例如,

<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>
            <?
        }

}

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

4

3 回答 3

2

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

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

于 2012-11-27T03:56:22.483 回答
1

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

你必须

  • 重新编写表单以同时提交所有表单(这通常听起来比实际更难)或
  • 重新设计您的服务器逻辑以检查刚刚提交的几个表单中的哪一个(可能使用isset($_POST['whatever']))。

AJAX 解决方案可以工作,但也有其优点和缺点。

于 2012-11-27T03:53:28.823 回答
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 来处理表单的提交,因为它为用户提供了更好的体验(你可以立即给他反馈而不是循环到服务器),而且它也很解放,因为你真的不需要表单标签甚至输入(如果你愿意,你可以使用可写的 div)。

于 2012-11-27T04:08:52.657 回答