- ベストアンサー
セレクトメニューとチェックボックスの値が初期値に戻る現象を解消する方法
- フォームの入力画面にてセレクトメニューやチェックボックスを選択して確認画面に進んだ後、戻るボタンを押すと値が初期値に戻ってしまう現象が起きている。この現象を解消する方法としては、セレクトメニューとチェックボックスの値をセッション変数に保存し、入力画面の再表示時にセッション変数の値をフォームの初期値にセットすることで解消できる。
- 具体的な手順は以下の通りです。まず、入力画面でセレクトメニューやチェックボックスの値を受け取り、セッション変数に保存します。その後、セレクトメニューとチェックボックスの要素を表示する部分で、セッション変数の値を初期値にセットします。これにより、再表示時にはセレクトメニューやチェックボックスの値が初期値でなく保存された値になります。
- 以上の手順により、セレクトメニューとチェックボックスの値が初期値に戻ってしまう現象を解消できます。この方法を実装することで、ユーザーが入力した値が保存され、戻るボタンを押しても値が初期値に戻らずに再表示されるようになります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 記述にミスがありました。訂正します。 $selected=''; for ($i = $start; $i <= $end; $i++) { ではなく、 for ($i = $start; $i <= $end; $i++) { $selected=''; が正しいです。 ごめんなさい。
その他の回答 (3)
- maenet1972
- ベストアンサー率68% (26/38)
動作を確認しながらやっていた訳ではなかったので、改めて確認したらおもいっきり構文ミスしていましたね、、、ゴメンナサイ。 正しくは、これを for($i=1,$i<=count($chk_arrays);$i++){ ↓ for($i=0;$i<count($chk_arrays);$i++){ こうしてみてください。
補足
有難う御座います。 下記の内容で試してみたのですが、 <?php $chk_arrays=array('GK','DF','MF','FW','MG'); for($i = 0; $i < count($chk_arrays);$i++) { $checked=''; if($_SESSION['position'][$i] == $chk_arrays[$i]) { $checked=' checked'; } echo "<input type='checkbox' name='position[".$i."]' value='".$chk_arrays[$i]."'".$checked.">".$chk_arrays[$i]; } ?> 確認画面にて戻るボタンを押すとチェックが外れてしまいます。 SESSIONでやっているため$_POSTではなく$_SESSIONにしたのですが、間違っていないでしょうか? 質問ばかりで申し訳ありません。
- maenet1972
- ベストアンサー率68% (26/38)
No1です。 <input type='checkbox' name='position[]' value='GK'>GK <input type='checkbox' name='position[]' value='DF'>DF <input type='checkbox' name='position[]' value='MF'>MF <input type='checkbox' name='position[]' value='FW'>FW <input type='checkbox' name='position[]' value='MG'>MG これでも決して間違いではないのですが、どうせPHPのファイルに記載するなら、このチェックBOXも自動で流してあげるようにしましょう(あとあと修正も楽になります)。 $chk_arrays=array('GK','DF','MF','FW','MG'); for($i=1,$i<=count($chk_arrays);$i++){ $checked=''; if($_POST['position'][$i]==$chk_arrays[$i]){ $checked=' checked'; } echo "<input type='checkbox' name='position[".$i."]' value='".$chk_arrays[$i]."'".$checked.">".$chk_arrays[$i]; }
補足
ご教授有難う御座います。 $chk_arrays=array('GK','DF','MF','FW','MG'); for($i=1,$i<=count($chk_arrays);$i++){ $checked=''; if($_POST['position'][$i]==$chk_arrays[$i]){ $checked=' checked'; } echo "<input type='checkbox' name='position[".$i."]' value='".$chk_arrays[$i]."'".$checked.">".$chk_arrays[$i]; } にて試してみたのですが、エラーが表示されてします。 Web サイト側でページを表示できません と表示されてします。
- maenet1972
- ベストアンサー率68% (26/38)
ソースを見る限り、不明な部分は入力画面に戻す時に使用するのがhiddenなのか$_SESSIONなのか、、、。 まず、セレクトメニューは 返ってきた値が何なのかで判別して“selected”を入れてあげる必要があります。もちろんチェックボックスも同様に、“checked”を入れてあげます。 イメージとしてはこんな感じ、、、。 $selected=''; for ($i = $start; $i <= $end; $i++) { $selected=($_POST["year"]==sprintf("%04d",$i)) ? " selected":""; print '<option value="' . sprintf("%04d",$i) . '"'.$selected.'>' . sprintf("%04d",$i) . '</option>' . "\n"; } ちなみに$_POST["year"]にしたのは、あくまでもhiddenで'year'を設定して返した場合の例です。
補足
お忙しい中、ご回答ありがとうございます。 現在、手元にファイルがないたので、後ほど試してみます。 度々ご質問で申し訳ないのですが、チェックボックスの場合はどのように記述したらよろしいでしょうか? <tr> <td><label for="position">希望ポジション</label></td> <td> <input type='checkbox' name='position[]' value='GK'>GK <input type='checkbox' name='position[]' value='DF'>DF <input type='checkbox' name='position[]' value='MF'>MF <input type='checkbox' name='position[]' value='FW'>FW <input type='checkbox' name='position[]' value='MG'>MG </td> </tr> 初心者なもので何もわからずご質問ばかりで申し訳ありません。 よろしくお願いいたします。