質問するログイン新規登録

回答編集履歴

1

確認画面からエントリーフォーム画面にPOST

2017/12/21 12:47

投稿

Tomak
Tomak

スコア1652

answer CHANGED
@@ -1,49 +1,118 @@
1
- 質問文のコードだと、**セレクボックスB(belong)**が生成されタイミング、セレクトボックスA値を**変更(onChange)**たときのみなので、確認画面から戻ると消えてしいます
1
+ 方の回答のメントをみると、**確認画面 → エンリーフォーム**へ戻場合は`history.back()`で戻っているですね。。。既に他の方の回答コメントに書いてありますように、**history.back()**ではやりいこを実装すはできせん(一部のブラウザでは実現できません)
2
2
 
3
+ 質問文を編集するか追記しておいたほうが良いと思います。
4
+
5
+ 確実に実現するには、**確認画面 → エントリーフォーム**へ戻るときも、既にPOSTされている値をPOSTするようにすればよいです。確認画面から完了画面でPOSTしているのであれば、同じロジックを使いまわしできると思います。どうしてもPOSTしたくない場合は、セッションを使います。しかし、こちらのほうがセッションをクリアするタイミングを考慮しなければならないので面倒です。
6
+
7
+ #### 確認画面
8
+
9
+ ```php
10
+ <input name="back" type="button" onClick="history_back();" value=" 入力画面へ戻る ">
11
+
12
+ <script type="text/javascript">
13
+ function history_back()
14
+ {
15
+ var form = document.createElement('form');
16
+ form.action = '/base.html';
17
+ form.method = 'post';
18
+ document.body.appendChild(form);
19
+
20
+ //セレクトボックスA
21
+ var branch_name = document.createElement('input');
22
+ branch_name.type = 'hidden';
23
+ branch_name.name = 'branch_name';
24
+ branch_name.value = <?php echo $branch_name; //セレクトボックスA ?>;
25
+ form.appendChild(branch_name);
26
+
27
+ //セレクトボックスB
28
+ var belong = document.createElement('input');
29
+ belong.type = 'hidden';
30
+ belong.name = 'belong';
31
+ belong.value = <?php echo $belong; //セレクトボックスB ?>;
32
+ form.appendChild(belong);
33
+
34
+ form.submit();
35
+ }
36
+ </script>
37
+ ```
38
+
39
+ **セレクトボックスB(belong)**が生成されるタイミングは、セレクトボックスAの値を**変更(onChange)**したときのみなので、確認画面から戻ると消えてしまいます。
40
+
3
41
  これを防ぐには、セレクトボックスAが既に選択状態(確認画面から戻ってきた場合)の時にもセレクトボックスBを生成するJavaScript関数`BelongList()`を実行しなければなりません。
4
42
 
5
- セレクトボックスAをJavaScriptで生成しているのか、PHPで生成しているのか不明だったのでとりあえず、PHPだと想定して回答します。
43
+ #### エントリー画面 - セレクトボックスA
6
44
 
7
- **PHP**
45
+ 確認画面からPOSTした値を取得して、セレクトボックスをPHPで選択状態にします。
8
46
 
9
47
  ```php
48
+ <SELECT autofocus size="1" name="branch_name" id="branch_name" onChange="BelongList(this.options[selectedIndex].value);">
10
49
  <?php
11
- //ここでBプルダウンの値を計算して配列に格納する。
12
- //データサンプル
13
- //belong_value[11] = new Array("0","1001","1002","1003");
14
- //belong_length[11] = 3;
15
- //belong_text[11] = new Array("---","北海道","北海道倶楽部","札幌クラブ");
16
50
 
51
+ $sql = "select ID,branch_name from t_branch order by ID";
52
+ $rs = mysql_query($sql);
53
+
17
54
  //↓↓追加↓↓
18
-
19
- //ブランチセレクトボックスのPOST値取得(確認画面から戻った場合)
55
+ //セレクトボックスAのPOST値取得(確認画面から戻った場合)
20
56
  $branch_post = (int)filter_input(INPUT_POST, 'branch_name', FILTER_SANITIZE_NUMBER_INT);
21
57
 
58
+ while($row=mysql_fetch_array($rs)){
22
- $branch_option = '';
59
+ //↓↓追加↓↓
60
+ $selected = $posted_branch === $row["ID"] ? ' selected="selected"' : '';
61
+ print("<OPTION value=". $row["ID"] . $selected .">". $row["branch_name"] . "</OPTION>\n");
62
+ }
23
63
 
24
- foreach ($belong_text as $idx => $label) {
25
- $selected = $branch_post === $belong_value[$idx] ? ' selected' : '';
26
- $branch_option .= '<OPTION value="'.$belong_value[$idx].'"'.$selected.'>'.$label.'</OPTION>'."\n";
27
- }
28
64
  ?>
65
+ </SELECT>
29
66
  ```
30
67
 
31
- **JavaScript**
68
+ #### エントリー画面 - JavaScript
32
69
 
33
- そして、セレクトボックスAが、表示時に選択状態にあるか確認して`BelongList()`を実行するJavaScriptコードを追加します。
70
+ セレクトボックスAが、表示時に選択状態にあるか確認して`BelongList()`を実行するJavaScriptコードを追加します。
34
71
 
35
72
  ```js
36
- var selected = parseInt(document.form_kojin.branch_name.value);
73
+ //データベースよりJavaScriptにて「所属名」を配列に格納する
74
+ belong_value = new Array();
75
+ belong_text = new Array();
76
+ belong_length = new Array();
37
77
 
78
+ <?php
79
+ //ここでBプルダウンの値を計算して配列に格納する。
80
+ //データサンプル
81
+ //belong_value[11] = new Array("0","1001","1002","1003");
82
+ //belong_length[11] = 3;
83
+ //belong_text[11] = new Array("---","北海道","北海道倶楽部","札幌クラブ");
84
+ ?>
85
+
86
+ //↓↓追加↓↓
87
+
88
+ //セレクトボックスA値
89
+ var posted_branch_name = parseInt(document.form_kojin.branch_name.value);
38
90
  if (selected > 0) {
39
- BelongList(selected);
91
+ BelongList(posted_branch_name);
40
92
  }
41
- ```
42
93
 
43
- **セレクトボックスA**
94
+ //セレクトボックスB値
95
+ var posted_belong = <?php echo ($val = filter_input(INPUT_POST, 'belong', FILTER_SANITIZE_NUMBER_INT)) ? $val : 0; ?>;
44
96
 
45
- ```html
97
+ //↑↑ここまで↑↑
46
- <SELECT autofocus size="1" name="branch_name" id="branch_name" onChange="BelongList(this.options[selectedIndex].value);">
98
+
47
- <?php echo $branch_option; ?>
99
+ function BelongList(idx){
48
- </SELECT>
100
+ //選択リストに項目を追加
101
+ for(i=0;i<belong_length[idx];i++){
102
+ document.form_kojin.belong.length=belong_length[idx];
103
+ document.form_kojin.belong.options[i].text = belong_text[idx][i];
104
+ document.form_kojin.belong.options[i].value= belong_value[idx][i];
105
+
106
+ //↓↓追加↓↓
107
+ if (posted_belong == belong_value[idx][i]) {
108
+ document.form_kojin.belong.options[i].selected = true;
109
+ }
110
+ }
111
+ //選択リストがブランクの場合
112
+ if(i==0){
113
+ document.form_kojin.belong.length=1;
114
+ document.form_kojin.belong.options[i].text = "---";
115
+ document.form_kojin.belong.options[i].value= 0;
116
+ }
117
+ }
49
118
  ```