前提・実現したいこと
二段階プルダウンメニューでの選択をGETでHTMLからPHPに送信したい。
発生している問題・エラーメッセージ
問題としては、二段階目で一つのselect文にnameを入れてGETで送信することまではできるのですが、複数のselect文になると送信できなくなります。
該当のソースコード
HTML
1<form method="GET" action="buisearch.php"> 2<div class="mainclass cityward"> 3 <select class="mainselect"> 4 <option value="">エリアを選択</option> 5 <option value="東北">東北地方</option> 6 <option value="関東">関東地方</option> 7 <option value="中部">中部地方</option> 8 <option value="近畿">近畿地方</option> 9 <option value="中国">中国地方</option> 10 <option value="四国">四国地方</option> 11 <option value="九州">九州地方</option> 12 </select> 13 14 <select id="東北" name="ken" class="subbox"> 15 <option value="">東北地方を選択</option> 16 <option value="北海道">北海道</option> 17 <option value="青森">青森県</option> 18 <option value="岩手">岩手県</option> 19 <option value="秋田">秋田県</option> 20 <option value="宮城">宮城県</option> 21 <option value="山形">山形県</option> 22 <option value="福島">福島県</option> 23 </select> 24 <select id="関東" name="ken" class="subbox"> 25 <option value="">関東地方を選択</option> 26 <option value="茨城">茨城県</option> 27 <option value="栃木">栃木県</option> 28 <option value="群馬">群馬県</option> 29 <option value="埼玉">埼玉県</option> 30 <option value="千葉">千葉県</option> 31 <option value="東京">東京都</option> 32 <option value="神奈川">神奈川県</option> 33 </select> 34 35 <select id="中部" name="ken" class="subbox"> 36 <option value="">中部地方を選択</option> 37 <option value="新潟">新潟県</option> 38 <option value="富山">富山県</option> 39 <option value="石川">石川県</option> 40 <option value="福井">福井県</option> 41 <option value="山梨">山梨県</option> 42 <option value="長野">長野県</option> 43 <option value="岐阜">岐阜県</option> 44 <option value="静岡">静岡県</option> 45 <option value="愛知">愛知県</option> 46 </select> 47 48 <select id="近畿" name="ken" class="subbox"> 49 <option value="">近畿地方を選択</option> 50 <option value="三重">三重県</option> 51 <option value="滋賀">滋賀県</option> 52 <option value="京都">京都府</option> 53 <option value="大坂">大阪府</option> 54 <option value="兵庫">兵庫県</option> 55 <option value="奈良">奈良県</option> 56 <option value="和歌山">和歌山県</option> 57 </select> 58 59 <select id="中国" name="ken" class="subbox"> 60 <option value="">中国地方を選択</option> 61 <option value="鳥取">鳥取県</option> 62 <option value="島根">島根県</option> 63 <option value="岡山">岡山県</option> 64 <option value="広島">広島県</option> 65 <option value="山口">山口県</option> 66 </select> 67 68 <select id="四国" name="ken" class="subbox"> 69 <option value="">四国地方を選択</option> 70 <option value="徳島">徳島県</option> 71 <option value="香川">香川県</option> 72 <option value="愛媛">愛媛県</option> 73 <option value="高知">高知県</option> 74 </select> 75 76 <select id="九州" name="ken" class="subbox"> 77 <option value="">九州地方を選択</option> 78 <option value="福岡">福岡県</option> 79 <option value="佐賀">佐賀県</option> 80 <option value="長崎">長崎県</option> 81 <option value="熊本">熊本県</option> 82 <option value="大分">大分県</option> 83 <option value="宮崎">宮崎県</option> 84 <option value="鹿児島">鹿児島県</option> 85 <option value="沖縄">沖縄県</option> 86 </select><br> 87 <script type="text/javascript"> 88 89 // HTMLの読み込み直後に実行: 90 document.addEventListener('DOMContentLoaded', function() { 91 92 // ▼とりあえずサブBOXを全て非表示にする(CSSで書けば早いが) 93 var allSubBoxes = document.getElementsByClassName("subbox"); 94 for( var i=0 ; i<allSubBoxes.length ; i++) { 95 allSubBoxes[i].style.display = 'none'; 96 } 97 98 // ▼全てのプルダウンボックスごとに処理 99 var mainBoxes = document.getElementsByClassName('mainclass'); 100 for( var i=0 ; i<mainBoxes.length ; i++) { 101 102 var mainSelect = mainBoxes[i].getElementsByClassName("mainselect"); // メインのプルダウンメニュー(※後でvalue属性値を参照するので、select要素である必要があります。) 103 mainSelect[0].onchange = function () { 104 105 // 同じ親要素に含まれている全サブBOXを消す 106 var subBox = this.parentNode.getElementsByClassName("subbox"); // 同じ親要素に含まれる.subbox(※select要素に限らず、どんな要素でも構いません。) 107 for( var j=0 ; j<subBox.length ; j++) { 108 subBox[j].style.display = 'none'; 109 } 110 111 // 指定されたサブBOXを表示する 112 if( this.value ) { 113 var targetSub = document.getElementById( this.value ); // 「メインのプルダウンメニューで選択されている項目のvalue属性値」と同じ文字列をid属性値に持つ要素を得る 114 targetSub.style.display = 'inline'; 115 } 116 } 117 118 } 119 120 }); 121 </script> 122<input type="submit" value="検索"> 123</form>
PHP
1<?php 2 3//データベース接続 4$server = **** 5$userName = **** 6$password = **** 7$dbName = **** 8 9$mysqli = new mysqli($server, $userName, $password,$dbName); 10 11if ($mysqli->connect_error){ 12 echo $mysqli->connect_error; 13 exit(); 14}else{ 15 $mysqli->set_charset("utf-8"); 16} 17 18$sql = "SELECT gymname,gymzipcode,gymaddress,gymtel,gymholiday,gymtime,gymurl FROM sportgym A,gymmachin B,machin C,bui D WHERE D.buiname='{$_GET['bui']}' and D.buinumber=C.buinumber and C.machinnumber=B.machinnumber and B.gymnumber=A.gymnumber and A.gymaddress like '{$_GET['ken']}%'"; 19 20$result = $mysqli -> query($sql); 21 22//クエリー失敗 23if(!$result) { 24 echo $mysqli->error; 25 exit(); 26}
試したこと
name="ken"のところをselect文ごとに変更(name="ken1",name="ken2"など)してPHP側のSQL文でOR条件で試したりしたのですが駄目でした
補足情報(FW/ツールのバージョンなど)
一度ちゃんとGET送信ができているか、二段階目のselect文を一つにして試したところ、ちゃんと送信されていたのでDB接続やHTML、PHP自体は問題ありません。
PHPのSQL文に$_GET['bui']などがありますが、こちらは別にラジオボタンでの絞り込みなので関係がありません。
二段階目のselect文で都道府県を選択した際にその選択された都道府県の名前をPHPの方に送信して、SQLでDBに入っている住所と前方一致検索をしたいと考えています。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー