PHP初心者です。
実装したいところ
→元の画面に戻ったときに選択した入力値を保持したままにしときたいです(現在は初期値に戻ってしまう為)
※エラー時は入力値確認ページには遷移せずに直接入力ページに遷移するようになっています
※var_dumpで確認したところ出力では入力値がとれているのでセレクトボックスの表示だけが変わらない状態です。
できれば簡単なif文で処理したいのですがどのような書き方がいいのでしょうか?
ご教示お願い致します。
lang
1 2<td class="aiueo"> 3<td> 4<select name="prefecture" id="prefecture" value = "<?php if (isset($_SESSION['prefecture'])) { echo $_SESSION['prefecture']; } ?>"> 5<br> 6 7<option value="">都道府県の選択</option> 8<option value="北海道" >北海道</option> 9<option value="青森県" >青森県</option> 10<option value="岩手県" >岩手県</option> 11....中略 12</select></td> 13</tr>
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
php
1<?php 2opcache_invalidate(__FILE__, true); 3 4$arrPref = [ 5 '北海道', '青森県', '岩手県', '宮城県', '秋田県' 6 , '山形県', '福島県', '茨城県', '栃木県', '群馬県' 7 , '埼玉県', '千葉県', '東京都', '神奈川県', '新潟県' 8 , '富山県', '石川県', '福井県', '山梨県', '長野県' 9 , '岐阜県', '静岡県', '愛知県', '三重県', '滋賀県' 10 , '京都府', '大阪府', '兵庫県', '奈良県', '和歌山県' 11 , '鳥取県', '島根県', '岡山県', '広島県', '山口県' 12 , '徳島県', '香川県', '愛媛県', '高知県', '福岡県' 13 , '佐賀県', '長崎県', '熊本県', '大分県', '宮崎県' 14 , '鹿児島県', '沖縄県' 15]; 16 17function h($string) 18{ 19 return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 20} 21 22//更新処理 23if (null != filter_input_array(INPUT_POST)) { 24 25 //初期化 26 $err = []; 27 28 // バリデーション処理 29 if ("" == filter_input(INPUT_POST, 'prefecture')) { 30 $err['prefecture'] = '都道府県を選択してください。'; 31 } 32 33 //エラーがない時の処理 34 if (0 == count($err)) { 35 header("location: next.php"); 36 } 37} 38?> 39<!DOCTYPE HTML> 40<html lang = "ja-JP"> 41 <head> 42 <meta charset = "UTF-8"> 43 <title></title> 44 </head> 45 <body> 46 <form action="" method="post"> 47 <select name="prefecture"> 48 <?php foreach ($arrPref as $strPref) { ?> 49 <option value="">----</option> 50 <?php if ($strPref == filter_input(INPUT_POST, 'prefecture')) { ?> 51 <option value="<?= h($strPref) ?>" selected="selected"> 52 <?= h($strPref) ?> 53 </option> 54 <?php } else { ?> 55 <option value="<?= h($strPref) ?>"> 56 <?= h($strPref) ?> 57 </option> 58 <?php } ?> 59 <?php } ?> 60 </select> 61 <?php if (isset($err['prefecture'])) { ?> 62 <p><?php echo h($err['prefecture']); ?></p> 63 <?php } ?> 64 <button type="submit">登録</button> 65 </form> 66 </body> 67</html>
投稿2015/10/07 07:16
退会済みユーザー
総合スコア0
0
以下のように、onloadのイベントで、javascriptで設定するのでは、いかがでしょうか?
PHP
1<script type="text/javascript"> 2var select_data = <?php echo isset($_SESSION['prefecture'])?"'".$_SESSION['prefecture']."'":"''"; ?>; 3 4function body_init(){ 5 var options = document.getElementById('prefecture').options; 6 for(var i = 0; i < options.length; i++){ 7 if(options[i].value === select_data){ 8 options[i].selected = true; 9 break; 10 }; 11 }; 12}; 13</script> 14</head> 15<body onload="body_init();"> 16<select name="prefecture" id="prefecture"> 17<option value="">都道府県の選択</option> 18<option value="北海道" >北海道</option> 19<option value="青森県" >青森県</option> 20<option value="岩手県" >岩手県</option> 21</select>
投稿2015/10/07 06:37
総合スコア924
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
selectのoption 文には、 "selected"を付加しないと選択状態にはなりません。
html
1■選択前 2<option value="">都道府県の選択</option> 3<option value="北海道" >北海道</option> 4<option value="青森県" >青森県</option> 5<option value="岩手県" >岩手県</option> 6....中略 7</select> 8 9■選択後(青森県が選択状態) 10<option value="">都道府県の選択</option> 11<option value="北海道" >北海道</option> 12<option value="青森県" selected>青森県</option> 13<option value="岩手県" >岩手県</option> 14....中略 15</select> 16
私がよく行う手法は、option文丸ごとphpで出力する方法です。
例では、県の比較を文字そのままで行っていますが、valueを数値化にして比較する方法の方が無難かと思います。
また、例は文字コードのことを考慮していないので、utf-8、sjisなど環境に合わせて調整する必要があるかと思います。
php
1 2<?php 3 4$prefecture = array( 5'北海道', '青森県', '岩手県', '宮城県', '秋田県', 6'山形県', '福島県', '茨城県', '栃木県', '群馬県', 7'埼玉県', '千葉県', '東京都', '神奈川県', '新潟県', 8'富山県', '石川県', '福井県', '山梨県', '長野県', 9'岐阜県', '静岡県', '愛知県', '三重県', '滋賀県', 10'京都府', '大阪府', '兵庫県', '奈良県', '和歌山県', 11'鳥取県', '島根県', '岡山県', '広島県', '山口県', 12'徳島県', '香川県', '愛媛県', '高知県', '福岡県', 13'佐賀県', '長崎県', '熊本県', '大分県', '宮崎県' 14'鹿児島県', '沖縄県' 15); 16 17function select_prefecture($select=null) 18{ 19 global $prefecture; 20 21 // 出力バッファ初期化 22 $out_buff = null; 23 24 foreach($prefecture as $name) // 県名分 25 { 26 // セレクトを初期化 27 $selected = null; 28 29 if ($select == $name) // 選択されている県 ? 30 { 31 // セレクトセット 32 $selected = " selected"; 33 } 34 35 // OPTION文を出力 36 $out_buff .= "<option value=\"${name}\"${selected}>${name}</option>"; 37 } 38 39 // 処理終了 40 return $out_buff; 41} 42 43?> 44 45 46 47<td class="aiueo"> 48<td> 49<select name="prefecture" id="prefecture"> 50<option value="">都道府県の選択</option> 51<?php 52if (isset($_SESSION['prefecture']) == true) // セッションで県が設定されている ? 53{ 54 // 県名セット 55 $prefecture = $_SESSION['prefecture']; 56} 57else 58{ 59 // 初期化 60 $prefecture = null; 61} 62 63// option文を出力 64echo select_prefecture($prefecture); 65?> 66</select> 67</td> 68</tr> 69コード
投稿2015/10/13 08:17
総合スコア440
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
フォーム表示のPHPと、入力を受け付けるPHPが別なのでしょうか?
サンプルで書かれているのがフォーム表示側だけなので、別なのだなと解釈しました。
フォーム表示側では、セッションに値が入っていなければ、初期値をセッションへ設定。
optionを出力するところでセッションと同じ値なら"selected"を出力。
入力受付側では、渡された内容をセッションへ入れる。
エラーがあればフォーム表示へリダイレクト。
入力がOKならセッションの値を削除。
で、できます。
この場合、エラーでフォーム画面へ戻ったあとに別画面へ行って、再度フォームを開くと、先ほど選択したものが選ばれている状態になります。戻したい場合はフォーム入力画面にも初期化のフラグを付けて、任意に初期化できるようにすると良いでしょう。
投稿2015/10/13 04:09
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/13 04:43 編集
退会済みユーザー
2015/10/13 04:47
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/08 07:37
退会済みユーザー
2015/10/08 07:46 編集