###前提・実現したいこと
PHPとJQUERYで多段階のドロップダウンリストを実装しようとしておりますが、不明点があり、実現できておりません。
###発生している問題・エラーメッセージ
1.部門マスタから取引先の選択までは、Teratail先生におしえていただいて正しく機能していますが、3段階目の発注区分での絞り込みで選択部門+選択取引先でSELECTする方法がわかりません。
(jqueryからPHPに2つのパラメータを渡す方法がわからずにいます。)
また、最初は、選択部門のみで絞り込み選択できるのですが、SUBMITをすると、Selectedされず、----選択してください----のDEFAULTの
状態になります。
2.発注区分の次に店の選択をしますが、上記同様に選択部門+選択取引先+選択発注区分でSELECTする方法がわかりません。選択部門で絞り込み選択できるのですが、SUBMITをすると、Selectedされず、----選択してください----のDEFAULTの状態になります。
エラーメッセージ
###該当のソースコード
PHP
1<?php 2/** 3 * index.php 4 */ 5ini_set('display_errors', 1); 6require 'common.php'; 7 8// 商品リストを検索 9 10$sql_items = 'SELECT dpt, dptmein FROM dpt_mast'; 11//print 'DPTマスタ select'; 12//var_dump($sql_items); 13$arrItems = select($sql_items); 14//var_dump($arrItems); 15 16 17// 購入履歴の検索 18if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'POST') { 19 20 $arr = array(); 21 22 $sql_trading = 'SELECT '; 23 $sql_trading .= 'SUM(t.hatchusu) AS quantity'; 24 $sql_trading .= ', s.venmein as shop_name '; 25 $sql_trading .= ', i.dptmein as item_name '; 26 $sql_trading .= ', l.linmein as lin_name '; 27 $sql_trading .= 'FROM VM_nouhin_jisseki t '; 28 $sql_trading .= 'INNER JOIN ven_mast s ON s.ven = t.ven '; 29 $sql_trading .= 'INNER JOIN dpt_mast i ON i.dpt = t.dpt '; 30 $sql_trading .= 'INNER JOIN lin_mast l ON l.lin = t.lin '; 31// $sql_trading .= 'WHERE 1 '; 32 $sql_trading .= 'WHERE 1=1 '; 33 34 if (0 < filter_input(INPUT_POST, 'shop')) { 35 $sql_trading .= 'AND t.ven = :shop_id '; 36 $arr[':shop_id'] = filter_input(INPUT_POST, 'shop'); 37 } 38 if (0 < filter_input(INPUT_POST, 'item')) { 39 $sql_trading .= 'AND t.dpt = :item_id '; 40 $arr[':item_id'] = filter_input(INPUT_POST, 'item'); 41 } 42 if (0 < filter_input(INPUT_POST, 'hatukbn')) { 43 $sql_trading .= 'AND t.hatukbn = :hatukbn '; 44 $arr[':hatukbn'] = filter_input(INPUT_POST, 'hatukbn'); 45 } 46 if (0 < filter_input(INPUT_POST, 'ten')) { 47 $sql_trading .= 'AND t.ten = :ten '; 48 $arr[':ten'] = filter_input(INPUT_POST, 'ten'); 49 } 50 51// $sql_trading .= 'GROUP BY t.shop_id,t.item_id,t.lin_id '; 52 $sql_trading .= 'GROUP BY s.venmein,i.dptmein,l.linmein'; 53 54 $arrTradings = select($sql_trading, $arr); 55// var_dump($sql_trading); 56} 57?><!DOCTYPE HTML> 58<html lang="ja"> 59 <head> 60 <meta charset="UTF-8"> 61 <title>Ajaxサンプル</title> 62 <style type="text/css"> 63 table { 64 border-collapse: collapse; 65 width: 600px; 66 } 67 table th, table td { 68 border: 1px solid #CCC; 69 } 70 </style> 71 </head> 72 <body> 73 <form method="post"> 74 <p> 75 <label for="item">DPT</label> 76 <select name="item" id="item"> 77 <option value="">---- 選択してください ----</option> 78 79 <?php foreach ($arrItems as $item) : ?> 80 81 <?php if ($item['dpt'] == filter_input(INPUT_POST, 'item')): ?> 82 <option value="<?= h($item['dpt']); ?>" selected="selected"> 83 <?= h($item['dptmein']); ?> 84 </option> 85 <?php else: ?> 86 <option value="<?= h($item['dpt']); ?>"> 87 <?= h($item['dptmein']); ?> 88 </option> 89 <?php endif; ?> 90 91 <?php endforeach; ?> 92 </select> 93 </p> 94 <p> 95 <label for="shop">取引先</label> 96 <select name="shop" id="shop" data-default="<?= h(filter_input(INPUT_POST, 'shop')) ?>"> 97 <option value="">---------- 選択してください ----------</option> 98 </select> 99 </p> 100 <p> 101 <label for="hatukbn">発注区分</label> 102 <select name="hatukbn" id="hatukbn" data-default="<?= h(filter_input(INPUT_POST, 'hatukbn')) ?>"> 103 <option value="">---------- 選択してください ----------</option> 104 </select> 105 </p> 106 <p> 107 <label for="ten">店舗</label> 108 <select name="ten" id="ten" data-default="<?= h(filter_input(INPUT_POST, 'ten')) ?>"> 109 <option value="">---------- 選択してください ----------</option> 110 </select> 111 </p> 112 <p> 113 <button type="submit"> 114 検索 115 </button> 116 </p> 117 </form> 118 <div> 119 <?php if (isset($arrTradings)): ?> 120 <table> 121 <thead> 122 <tr> 123 <th>取引先</th> 124 <th>DPT</th> 125 <th>ライン</th> 126 <th>発注数量</th> 127 </tr> 128 </thead> 129 <tbody> 130 <?php foreach ($arrTradings as $trading) : ?> 131 <tr> 132 <td><?= h($trading['shop_name']); ?></td> 133 <td><?= h($trading['item_name']); ?></td> 134 <td><?= h($trading['lin_name']); ?></td> 135 <td><?= h($trading['quantity']); ?></td> 136 </tr> 137 <?php endforeach; ?> 138 </tbody> 139 </table> 140 <?php endif; ?> 141 </div> 142 <script type="text/javascript" src="//code.jquery.com/jquery-3.1.1.min.js"></script> 143 <script type="text/javascript"> 144 $(function () { 145 // id="item" が change イベントを発行したとき 146 $('#item').on('change', function () { 147 var params = { 148 id: $(this).val() 149 }; 150 $.getJSON('ajax.php', params, function (json) { 151 152 // 初期表示 153 var opt = $('<option>'); 154 opt.text('---------- 選択してください ----------'); 155 156 // 一旦空にしておく 157 $("#shop").empty() 158 .append(opt); 159 160 // 検索結果をSELECTに追加 161 $.each(json, function (i, res) { 162 var opt = $('<option>'); 163 opt.val(res.ven) 164 .text(res.venmein) 165 .appendTo($("#shop")); 166 }); 167 168 if (0 < $("#shop").attr('data-default')) { 169 $("#shop").val($("#shop").attr('data-default')); 170 } 171 }); 172 }).change(); 173 }); 174 $(function () { 175 // id="shop" が change イベントを発行したとき 176 $('#shop').on('change', function () { 177 var params = { 178 shop: $(this).val() 179 }; 180 $.getJSON('ajax2.php', params, function (json) { 181 182 // 初期表示 183 var opt = $('<option>'); 184 opt.text('---------- 選択してください ----------'); 185 186 // 一旦空にしておく 187 $("#hatukbn").empty() 188 .append(opt); 189 190 // 検索結果をSELECTに追加 191 $.each(json, function (i, res) { 192 var opt = $('<option>'); 193 opt.val(res.hatukbn) 194 .text(res.hatukbn) 195 .appendTo($("#hatukbn")); 196 }); 197 198 if (0 < $("#hatukbn").attr('data-default')) { 199 $("#hatukbn").val($("#hatukbn").attr('data-default')); 200 } 201 }); 202 }).change(); 203 }); 204 $(function () { 205 // id="hatukbn" が change イベントを発行したとき 206 $('#hatukbn').on('change', function () { 207 var params = { 208 hatukbn: $(this).val() 209 }; 210 $.getJSON('ajax3.php', params, function (json) { 211 212 // 初期表示 213 var opt = $('<option>'); 214 opt.text('---------- 選択してください ----------'); 215 216 // 一旦空にしておく 217 $("#ten").empty() 218 .append(opt); 219 220 // 検索結果をSELECTに追加 221 $.each(json, function (i, res) { 222 var opt = $('<option>'); 223 opt.val(res.ten) 224 .text(res.tenmei) 225 .appendTo($("#ten")); 226 }); 227 228 if (0 < $("#ten").attr('data-default')) { 229 $("#ten").val($("#ten").attr('data-default')); 230 } 231 }); 232 }).change(); 233 }); 234 </script> 235 </body> 236</html>
PHP
1<?php 2 3/** 4 * ajax.php これは、実現したいことができています。 5 */ 6ini_set('display_errors', 1); 7require 'common.php'; 8 9//$sql_trading = 'SELECT shop_id, shop.name '; 10$sql_trading = 'SELECT DISTINCT(VM_nouhin_jisseki.ven), ven_mast.venmein '; 11$sql_trading .= 'FROM VM_nouhin_jisseki '; 12$sql_trading .= 'INNER JOIN ven_mast ON ven_mast.ven = VM_nouhin_jisseki.ven '; 13$sql_trading .= 'WHERE dpt = :item_id'; 14//$sql_trading .= 'GROUP BY shop_id,item_id '; 15 16$arrParams = array( 17 ':item_id' => filter_input(INPUT_GET, 'id') 18); 19$arrItems = select($sql_trading, $arrParams); 20 21header('Content-type: application/json'); 22echo json_encode($arrItems);
PHP
1<?php 2 3/** 4 * ajax2.php 5 */ 6ini_set('display_errors', 1); 7require 'common.php'; 8 9$sql_trading = 'SELECT DISTINCT(t.hatukbn) '; 10$sql_trading .= 'FROM VM_nouhin_jisseki t '; 11//$sql_trading .= 'WHERE dpt = :item_id'; 12 $sql_trading .= 'WHERE ven = :shop_id'; 13//$sql_trading .= 'WHERE 1=1 '; 14//$sql_trading .= 'GROUP BY shop_id,item_id '; 15 16$arrParams = array( 17// ':item_id' => filter_input(INPUT_GET, 'id'), 18 ':shop_id' => filter_input(INPUT_GET, 'shop') 19); 20$arrItems = select($sql_trading, $arrParams); 21 22header('Content-type: application/json'); 23echo json_encode($arrItems);
PHP
1<?php 2 3/** 4 * ajax3.php 5 */ 6ini_set('display_errors', 1); 7require 'common.php'; 8 9$sql_trading = 'SELECT DISTINCT(t.ten),tenmei '; 10$sql_trading .= 'FROM VM_nouhin_jisseki t '; 11//$sql_trading .= 'WHERE dpt = :item_id'; 12//$sql_trading .= 'WHERE ten = :ten_id'; 13 $sql_trading .= 'WHERE hatukbn = :hatukbn_id'; 14//$sql_trading .= 'WHERE 1=1 '; 15//$sql_trading .= 'GROUP BY shop_id,item_id '; 16 17$arrParams = array( 18// ':item_id' => filter_input(INPUT_GET, 'id'), 19 ':hatukbn_id' => filter_input(INPUT_GET, 'hatukbn') 20); 21$arrItems = select($sql_trading, $arrParams); 22 23header('Content-type: application/json'); 24echo json_encode($arrItems); 25
###試したこと
ajax2.phpで
$arrParams = array(に 複数の項目を入れようとしましたが、エラーになりました。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
PHP Version 5.4.45
IIS 7.0
SQL Server 2008 R2 Express
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/28 12:01
2016/11/28 12:31
2016/11/28 12:36
2016/11/28 12:41
2016/11/30 05:28
2016/11/30 10:49
2016/11/30 12:29
2016/12/02 07:51
2016/12/02 08:40
2016/12/02 09:17
2016/12/03 13:31
2016/12/03 14:44
2016/12/05 00:23