0

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 以外の別のページに送信されることです。
実際には、リンクの代わりに、各リンクの代わりに 4 つの送信ボタンが必要で、それぞれが addAll.php ではなく、独自のファイルにフォームを送信します。

ユーザーがリンク間を移動して再び戻ったときにチェックしたチェックボックスを保存できるようにするだけでよく、最終的に「すべて追加」送信ボタンをクリックするまで続きます。したがって、リンクをクリックした後、ユーザーと一緒にチェックボックスを新しいページに移動したいので、保存されているので、後で戻って「すべて追加」をクリックした場合、POST データを見てチェックボックスを再チェックできます。 .

これに対する解決策はありますか?

4

1 に答える 1

1

このようなことをすることはお勧めしませんが、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 にさまざまなファイルをインクルード/要求させることもできます。

チェックボックス.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 を書いていません。これはテストされていませんが、少なくとも考えられる解決策を示す必要があります。

于 2013-08-28T23:19:40.380 に答える