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