【问题标题】:append all forms checkbox data with single submit通过单次提交附加所有表单复选框数据
【发布时间】:2012-04-13 22:02:34
【问题描述】:

我有多个表单,每个表单都有多个复选框。对于所有表单,在页面下方的某个位置提供了一个提交,以便在单击时预览所有选中的信息

<form name="a1" action="start.php" method="post"> 
<input type="checkbox" id="add" name="check_list[]" value="x1">x1 
<input type="checkbox" id="add" name="check_list[]" value="x2">x2
<input type="checkbox" id="add" name="check_list[]" value="x3">x3
</form>

<form name="a2" action="start.php" method="post"> 
<input type="checkbox" id="add" name="check_list[]" value="y1">y1 
<input type="checkbox" id="add" name="check_list[]" value="y2">y2
<input type="checkbox" id="add" name="check_list[]" value="y3">y3
</form>

<form name="a3" action="start.php" method="post"> 
<input type="checkbox" id="add" name="check_list[]" value="z1">z1 
<input type="checkbox" id="add" name="check_list[]" value="z2">z2
<input type="checkbox" id="add" name="check_list[]" value="z3">z3
</form>

<div> <input type="submit" value="preview" onclick="addForm()"> </div>

validateform 的位置是

<script type="text/javascript">function addForm(){
document.forms["a1"].submit();
document.forms["a2"].submit();
document.forms["a3"].submit();
}

start.php

<?php
if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
            echo $check."<br/>"; 
    }
}
?>

问题是无法通过函数addForm() 附加所有表单数据 请帮助我了解如何使用 PHP 显示所有表单中的所有复选框信息

【问题讨论】:

  • 为什么不使用一个包含所有元素的表单而不是三个?
  • @Pointy in flash 每个表单都显示有一些动画,所以很明显在我的视图中有多个表单
  • 无论如何我都不是 Flash 专家,但这听起来不像是 PHP 问题。更多的是“如何让所有这些表单在 Flash 中一次提交?”
  • @Codeacula 我将 div-forms 嵌入到 flash showup 中,flash 除了展示之外别无他用

标签: php javascript html forms checkbox


【解决方案1】:

当你在第一个表单“a1”上调用提交函数时,你会自动将数据发送到start.php,其他两个表单不会被提交。最佳解决方案:ajax

XMLHTTPRequest 允许您在不离开页面的情况下发布表单并获得回复,您可以将所有三个表单提交的结果组合在一起并显示它们

【讨论】:

    【解决方案2】:

    以这种方式一次提交多个表单是不可能的。如果您想采用这种方法,则需要使用 AJAX,因为这是让浏览器维护多个活动请求的唯一方法。

    虽然查看代码,但我看不出您需要多个表单的任何理由。你应该能够简单地做到这一点:

    <form name="a1" action="start.php" method="post"> 
      <input type="checkbox" id="add" name="check_list[]" value="x1">x1 
      <input type="checkbox" id="add" name="check_list[]" value="x2">x2
      <input type="checkbox" id="add" name="check_list[]" value="x3">x3
      <input type="checkbox" id="add" name="check_list[]" value="y1">y1 
      <input type="checkbox" id="add" name="check_list[]" value="y2">y2
      <input type="checkbox" id="add" name="check_list[]" value="y3">y3
      <input type="checkbox" id="add" name="check_list[]" value="z1">z1 
      <input type="checkbox" id="add" name="check_list[]" value="z2">z2
      <input type="checkbox" id="add" name="check_list[]" value="z3">z3
      <div><input type="submit" value="preview"></div>
    </form>
    

    ...您甚至不需要任何 Javascript。

    【讨论】:

    • 在 Flash 中,每个表单都显示有一些动画,因此在我看来很明显有多个表单
    • 请详细说明您要完成的工作以及动画的作用。
    • 想必你可以将 div 中的复选框分组,然后根据这些分组显示动画?
    【解决方案3】:

    如果您是相关 HTML 代码的作者,我建议您重构您的代码并只创建一个包含所有选中的 提交按钮的表单。如果是样式问题,您可以简单地将输入元素放置在适当的&lt;fieldset&gt; 元素中。

    否则,如果您遇到并非自己编写的 HTML 代码,我建议您执行以下操作(尽管这确实不是一个很好的解决方案):

    编辑addForm() 函数以在文档某处创建第四个&lt;form&gt; 元素,并将其样式设置为display: none;。然后将以前表单中的所有复选框附加或克隆到这个新表单,然后提交。这应该会为您提供一组复选框,您可以在 PHP 端处理这些复选框,就像正确编写初始 HTML 代码一样。

    【讨论】:

      【解决方案4】:

      如果您希望所有数据都转到 start.php,您应该只使用一个表单。

      旁注:您不应该将输入的 id 属性全部设置为“add”。 id 应该是唯一的。

      【讨论】:

      • 在 Flash 中,每个表单都显示有一些动画,因此在我看来很明显有多个表单
      【解决方案5】:

      如果您必须为此提供多种形式,就像您在评论中声明的那样,那么您需要更广泛的 javascript。

      一个表单提交=一个http请求,3个不起作用,但是您可以做的是绑定所有这些表单,因此当提交一个表单时,您可以收集所有表单中所有输入的数据并序列化该批次然后发送作为 GET 请求。记得禁用默认行为,这样表单就不会这样提交。

      或者,如果您必须有 POST 请求,请创建一个临时表单并使用正确的值创建输入,然后提交该表单。

      【讨论】:

      • 我可以动态地将所有数据放入一个数组中,以便在某种程度上解决这个提交问题!
      【解决方案6】:

      对于提交多个表单,您有两种解决方案:

      1) 使用 Ajax 请求 2) 将所有信息附加到最终表单中并提交,为此您可以简单地使用 jQuery 或 javascript。

      【讨论】:

        猜你喜欢
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 2017-09-19
        • 2010-12-21
        相关资源
        最近更新 更多