Forms 表单嵌套,表单中有更多提交按钮

Forms 表单嵌套,表单中有更多提交按钮,forms,checkbox,submit,Forms,Checkbox,Submit,我知道不能在html中嵌套表单。因此,我需要帮助来实现以下功能 我有一个复选框列表: <form action="addAll.php" method="post"> <ul> <li><input type="checkbox" name="boxes[]" value="1"> <a href="#">No. 1</a></li> <li><input type="che

我知道不能在html中嵌套表单。因此,我需要帮助来实现以下功能

我有一个复选框列表:

<form action="addAll.php" method="post">
  <ul>
    <li><input type="checkbox" name="boxes[]" value="1"> <a href="#">No. 1</a></li>
    <li><input type="checkbox" name="boxes[]" value="2"> <a href="#">No. 2</a></li>
    <li><input type="checkbox" name="boxes[]" value="3"> <a href="#">No. 3</a></li>
    <li><input type="checkbox" name="boxes[]" value="4"> <a href="#">No. 4</a></li>
  </ul>
  <input type="submit" value="Add all">
</form>

单击“提交”按钮“添加全部”时,将收集值并发送到addAll.php文件。到目前为止,一切顺利

列表中有链接,如图所示。现在需要的功能是,当我单击一个链接时,表单将提交到addAll.php以外的另一个页面。
因此,实际上,我需要四个提交按钮来代替每个链接,每个按钮将表单提交到自己的文件中,而不是addAll.php

我只需要能够保存这些复选框,当用户在链接之间来回导航时,会选中这些复选框,直到他最终在某个点上单击“添加所有”提交按钮。因此,我希望在单击链接后,将用户的复选框带到新页面,这样就可以保存该链接,并且如果用户稍后返回单击“全部添加”,我可以通过查看帖子数据来重新选中复选框


有解决方案吗?

我不建议这样做,但对我来说,这似乎是我能想到的最接近于不使用javascript的解决方案

addAll.php

...
function redirect($url) {
    $query_string = urlencode('?boxes=['.implode(',', $_POST['boxes']).']');
    $base_url = some_awkward_way_of_getting_the_base_url();
    $url_full = $url_base.$url;
    header('Location: '.$url_full.$query_string);
}

function alternative($url) {
    $_SESSION['boxes'] = $_POST['boxes'];
    $base_url = some_awkward_way_of_getting_the_base_url();
    $url_full = $url_base.$url;
    header('Location: '.$url_full);
}

if (isset($_POST['submit_nr1']))
    redirect('nr1.php');

else if (isset($_POST['submit_nr2']))
    redirect('nr2.php');

else if (isset($_POST['submit_nr3']))
    redirect('nr3.php');

else if (isset($_POST['submit_nr4']))
    redirect('nr4.php');

else if (isset($_POST['submit_all']))
    handle_accordingly();
...
或者,您可以让addAll.php根据不同的情况包含/需要不同的文件,而不是执行头重定向

checkbox.php

...
<form action="addAll.php" method="post">
  <ul>
    <li>
        <input type="checkbox" name="boxes[]" value="1">
        <input type="submit" name="submit_nr1" value="No. 1"/>
    </li>
    <li>
        <input type="checkbox" name="boxes[]" value="2">
        <input type="submit" name="submit_nr2" value="No. 2"/>
    </li>
    <li>
        <input type="checkbox" name="boxes[]" value="3">
        <input type="submit" name="submit_nr3" value="No. 3"/>
    </li>
    <li>
        <input type="checkbox" name="boxes[]" value="4">
        <input type="submit" name="submit_nr4" value="No. 4"/>
    </li>
  </ul>
  <input type="submit" name="submit_all" value="Add all">
</form>
...
。。。
...

免责声明:我已经很久没有编写PHP了,这还没有经过测试,但至少应该说明一个可能的解决方案。

您可以使用javascript将复选框的状态存储在cookie或查询字符串中,甚至覆盖forms action属性和submit()。是的。如果可以用html/css解决这个问题,我更愿意这样做。但是JS当然可以解决这个问题。你可以有多个提交按钮,但是它们会提交到addAll.php,所以你必须在服务器端处理事情。处理多个提交按钮的方法是对它们进行不同的命名
..
addAll.php可以有如下功能:
if(isset($\u POST['submit\u nr1']))…
重定向到不同的文件,通过查询字符串或会话传递相关的POST数据。