プロが教える店舗&オフィスのセキュリティ対策術

ドロップダウンリストをHTMLのフォームで作成したときのことで悩んでいます。

1~10まで選択可能なドロップダウンリストを用意したフォームが2つあるとします。
そのフォームに送信をボタンをsubmitとしておいておきます。

"test.c"というプログラム内のprint文でHTMLコードを記述し、ブラウザで選択した値を、プログラム内で変数として使用したいと考えております。

以下のようなものを記述したとします。

<form name = "select" method="post" action="test.c">

<select name="list1">
<option value = "1"> 1 </option>

</select>

<select name="list1">
<option value = "1"> 1 </option>

</select>

<input type="submit" value="表示">
</form>

として、

[1~10のリスト1]
[1~10のリスト2]
[送信]

というような感じです。

このtest.cをブラウザ上で起動し、送信ボタンをおせば、
・「0~リスト1で選択した数字」をブラウザに表示
・その中で「リスト2で選択した数字」の表示を消す
という処理がtest.cで行われるようなプログラムとします。

例として
・リスト1とリスト2は始めに1が選択されているとします。
・「リスト1で5」、「リスト2で3」を選択して送信を押します。
・test.cのページが更新され、ブラウザ上にはリスト2つと送信ボタン、「0・1・2・4・5」が表示されているとします

ここからが質問になります。

このとき更新されたことにより、2つのリストは初期選択の1が選択された状態に戻っているが、ブラウザ上には前回送信した結果の数字「0・1・2・4・5」が表示されています。

このときに、このままやっぱり3を表示しないのではなく2を消したいとなった場合、リスト2を"2"に選択しなおすだけでなく、リスト1も再度"5"を選択しておかなければならないと思います。
この場合に、更新後のページのリストを前回選択した5と3のままにしておけば、リスト2を3から2に変更するだけで良くなるのですが、このように前回送信した状態を保持してリストを表示することは可能でしょうか。

よろしくおねがいします。

A 回答 (2件)

いくつか方法がありますが・・・私が良く使う方法を説明します。

私はPerl使いですが基本は同じです。
テンプレートのフォームを用意します。
<form ****>
 <select name="ABC">
  <option value="1" $SELECT_ABC_1>選択肢1</option>
  <option value="2" $SELECT_ABC_2>選択肢2</option>
  <option value="3" $SELECT_ABC_3>選択肢3</option>
とかにして、
 ($SELECT_ABC_1,$SELECT_ABC_2,$SELECT_ABC_3) = '';
 if($in{'ABC'} eq '1'){$SELECT_ABC_1 = "selected=\"selected\""}
 elsif($in{'ABC'} eq '2'){$SELECT_ABC_2 = "selected=\"selected\""}
・・・以下略・・
 cookieについても同様にチェックする。

同様に確認画面のときも、
<input type="hidden" name="ABC" value="2">
にする。同時にset-cookieにて、&ABC=2 をいれておく。

Cでも他の言語でも考え方は同じです。

XHTMLは面倒なので、HTMLでよいと思いますが
    • good
    • 0

 可能です。

分かりやすくするためには最初のフォームを含めてすべてプログラムから出力したほうが良いでしょう。
 受け取ったデータは、input type="hidden"で引き継ぎますが、それがあればフォームを作成する際に利用できます。また、フォームの戻るではなくブラウザの戻るを使われた時のためにcookieを併用すると良いでしょう。

この回答への補足

上の例のForm(2個目のリストのnameはlist2です。間違えました。)で、selectを使ったリストの場合、hiddenをどのように使えば、前回の選択結果を保持してリスト中のその要素をselectedしておけるのでしょうか。
初歩的な質問ばかりですいません。

補足日時:2014/12/08 15:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!