質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

6556閲覧

PHP セッションを使用したフォーム 出力について

zer0root

総合スコア28

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2015/10/07 05:45

編集2015/10/13 04:39

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zer0root

2015/10/08 07:37

元の画面に戻ったときに選択した入力値を保持したままにしとく為の部分はどこにあたるのでしょうか?
退会済みユーザー

退会済みユーザー

2015/10/08 07:46 編集

<?php if ($strPref == filter_input(INPUT_POST, 'prefecture')) { ?> <option value="<?= h($strPref) ?>" selected="selected"> <?= h($strPref) ?> </option> <?php } else { ?> コピペで動くソースを提示したのですから、実行さえすればわかるはずですが… そもそも、あなたのやりたいことを実現するのに、SESSIONは不要です。
guest

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

KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zer0root

2015/10/07 06:39

PHPの学習をしてるので今回はjsは封印して実装したいなあと思っておりました.... jsでの実装時には是非ソースの方参考にさせていただきます!ありがとうございます。
guest

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

KenjiObata

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

フォーム表示のPHPと、入力を受け付けるPHPが別なのでしょうか?
サンプルで書かれているのがフォーム表示側だけなので、別なのだなと解釈しました。


フォーム表示側では、セッションに値が入っていなければ、初期値をセッションへ設定。
optionを出力するところでセッションと同じ値なら"selected"を出力。

入力受付側では、渡された内容をセッションへ入れる。
エラーがあればフォーム表示へリダイレクト。
入力がOKならセッションの値を削除。

で、できます。
この場合、エラーでフォーム画面へ戻ったあとに別画面へ行って、再度フォームを開くと、先ほど選択したものが選ばれている状態になります。戻したい場合はフォーム入力画面にも初期化のフラグを付けて、任意に初期化できるようにすると良いでしょう。

投稿2015/10/13 04:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zer0root

2015/10/13 04:43 編集

回答ありがとうございます。表示と入力を受け付けるphpは別になっています。 質問部分に追記させていただいたのですがvar_dumpでは入力値がとれているのでセッションにはデータが入ってると思うのですが、selectedの使い方が悪いのかセッションデータがこれでは取れていないのかどっちになるんでしょうか?
退会済みユーザー

退会済みユーザー

2015/10/13 04:47

そもそも、例で上がっているPHPから出力されるHTMLは <select value="値2"> <option value="値1">選択肢1</option> <option value="値2">選択肢2</option> </select> というHTMLが生成されますが、 <select> <option value="値1">選択肢1</option> <option value="値2" <?php if(セッション値==値2) echo "selected" ?> >選択肢2</option> </select> じゃないんですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問