複数選択の方法についての質問

このQ&Aのポイント
  • 複数選択の方法が分からないです。現在の方法では最後にチェックしたワードでしか検索できません。
  • 複数選択に対応するために、チェックボックスの配列を使っていますが、次のステップが分かりません。
  • 現在のPHPコードでは、$jyusyoという変数を受け取って、データベースのクエリに利用していますが、改善点があるかどうか教えてください。
回答を見る
  • ベストアンサー

複数選択の方法が分からないのです。

お世話になります。 現在<input type="checkbox" name="jyusyo" value="豊岡市">豊岡市<br> <input type="checkbox" name="jyusyo" value="養父市">養父市<br> <input type="checkbox" name="jyusyo" value="朝来市">朝来市<br> <input type="checkbox" name="jyusyo" value="神戸市">神戸市<br> <input type="checkbox" name="jyusyo" value="姫路市">姫路市<br> のようにしている為、最期にチェックしたワードでしか検索できません。 これらを複数選択に対応させる為 <input type="checkbox" name="jyusyo[]" value="豊岡市">豊岡市<br> <input type="checkbox" name="jyusyo[]" value="養父市">養父市<br> <input type="checkbox" name="jyusyo[]" value="朝来市">朝来市<br> <input type="checkbox" name="jyusyo[]" value="神戸市">神戸市<br> <input type="checkbox" name="jyusyo[]" value="姫路市">姫路市<br> としてみたものの、この先が分かりません。 受け取る側のphpは現在このような状態であります。 $jyusyo=$_POST["jyusyo"]; $jyusyonum=array("豊岡市","養父市","朝来市","神戸市","姫路市"); $query = "select name,jyusyo,kakaku,gazou,link from ocdda where"; if($jyusyo != "") { $query = $query . " jyusyo like '%$jyusyo%' "; } $result = mysql_query($query); $num_rows=mysql_num_rows($result); if($num_rows== 0){ $message="該当データ無し"; } else $message=$num_rows ."件あります"; echo $message; while($row = mysql_fetch_array($result)){ データベースのカラムもjyusyoになっていますが変えるべきですか? どうか改変ポイント等の御教授お願い申し上げます。

noname#142312
noname#142312
  • PHP
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.2

>$jyusyo=$_POST["jyusyo"]; この結果は array(0 => '豊岡市, 1 => '養父市'...)といった形で返ってきますよね。 >$query = "select name,jyusyo,kakaku,gazou,link from ocdda where"; >if($jyusyo != "") { >$query = $query . " jyusyo like '%$jyusyo%' "; >} で、ここで突っ込んでますけど・・これで生成されるSQL文の結果は見ましたか?一度echoってみるとお分かりだと思いますが、 select name,jyusyo,kakaku,gazou,link from ocdda where jyusyo like '%Array%' とかになると思いますよ。Arrayなんて検索したくないですよね・・ この場合、配列を文字列にしてあげる必要があります。 なので $query = "select name,jyusyo,kakaku,gazou,link from ocdda where"; if($jyusyo != "") { $like = implode(',', $jyusyo); $query = $query . " jyusyo like '%$like%' "; } とすると select name,jyusyo,kakaku,gazou,link from ocdda where jyusyo like '%朝来市,神戸市%' になりますね。でもこれでもおかしいですよね?where区のlikeは「朝来市,神戸市」という文字が含まれるレコードを検索するので・・この場合、住所が「朝来市」か「神戸市」のレコードを取りたいんですよね? で、あれば $query = "select name,jyusyo,kakaku,gazou,link from ocdda where"; if($jyusyo != "") { $like = implode(',', $jyusyo); $query = $query . " jyusyo in ($like) "; } とすれば、 select name,jyusyo,kakaku,gazou,link from ocdda where jyusyo in (朝来市,神戸市) となります。実際には文字列はシングルかダブルでくくらないとエラーになりそうなので、implodeではなく、foreach等で回して文字列を生成するのが宜しいかと思われます if($jyusyo != "") { foreach ($jyusyo as $value) { $like .= "'" . $value . "',"; } //最後の , を削除 $like = substr($like, 0, -1); $query = $query . " jyusyo in ($like) "; } こうかな?

noname#142312
質問者

補足

if($jyusyo != "") { foreach ($jyusyo as $value) { $like .= "'" . $value . "',"; } //最後の , を削除 $like = substr($like, 0, -1); $query = $query . " jyusyo in ($like) "; } この部分で近い感じにはなりました。しかし豊岡市にチェックしたところ住所が豊岡市のものしか出てこず、”豊岡市中央町”などのデータが出てきませんでした。豊岡市を含むデータも出したいのですが、上記をどのように変えたら良いでしょうか??

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じでやります。 <form> <input type="checkbox" name="jyusyo[]" value="豊岡市">豊岡市<br> <input type="checkbox" name="jyusyo[]" value="養父市">養父市<br> <input type="checkbox" name="jyusyo[]" value="朝来市">朝来市<br> <input type="checkbox" name="jyusyo[]" value="神戸市">神戸市<br> <input type="checkbox" name="jyusyo[]" value="姫路市">姫路市<br> <input type="submit" value="go"> </form> <?PHP $jyusyo=$_REQUEST["jyusyo"]; $query = "select `name`,`jyusyo`,`kakaku`,`gazou`,`link` from `ocdda` where 1"; foreach((array) $jyusyo as $key=>$val) { if($key==0) $query .=" AND (0 "; $query .= "or `jyusyo` like '%".mysql_real_escape_string($val)."%' "; if($key==count($jyusyo)-1) $query .=")"; } print $query; ?>

関連するQ&A

  • 条件のAND検索??

    条件のAND検索?? 現在 □豊岡市 □神戸市 □篠山町 みたいなチェックボックスの検索システムが有ります。 これを 地域(カラム=jyusyo) □豊岡市 □神戸市 □篠山町 予算(カラム=kakaku) [ 円]~[ 円](option属性) と新たに付け加えたいです。 現在の検索システムのソースは $jyusyo=$_POST["jyusyo"]; $jyusyonum=array("豊岡市","養父市","朝来市","神戸市","姫路市"); $query = "select name,jyusyo,kakaku,gazou,link from kensaku where"; if($jyusyo != "") { foreach ($jyusyo as $value) { $like .= "'" . $value . "',"; } //最後の , を削除 $like = substr($like, 0, -1); $query = $query . " jyusyo in ($like) "; } をどのように変更したら良いですか?? 試行錯誤しましたが、それらをここで説明したら長くなるので書きませんが丸投げしてるわけでは御座いません。よろしくお願いします。

    • ベストアンサー
    • PHP
  • チェックボックス選択で(3つ)まで

    チェックボックス選択で(3つ)まで <input type="checkbox" name="fhobby" value="animation">アニメ <input type="checkbox" name="fhobby" value="game">ゲーム <input type="checkbox" name="fhobby" value="reading">読書 <input type="checkbox" name="fhobby" value="amusement">娯楽 <input type="checkbox" name="fhobby" value="comics">漫画 <input type="checkbox" name="fhobby" value="jogging">ジョギング<br> <input type="checkbox" name="fhobby" value="cycling">サイクリング <input type="checkbox" name="fhobby" value="shopping">ショッピング <input type="checkbox" name="fhobby" value="picture">絵画 <input type="checkbox" name="fhobby" value="travel">旅行 <input type="checkbox" name="fhobby" value="others">その他

    • ベストアンサー
    • HTML
  • チェックボックスのON/OFFに応じて別の複数のチェックボックスも連動ON/OFF

    7番のcheckboxをON→1,2,4,5番にチェックもON 7番のcheckboxをOFF→1,2,4,5番にチェックもOFF という風に動作させる記述をご教示ください。 よろしくお願い致します。 <html> <head> <script type="text/javascript"> </script> </head> <body> <form action="" method="post" name="myform"> 去年<br> 1番<input type="checkbox" name="kyonen[]" value="1">1月<br> 2番<input type="checkbox" name="kyonen[]" value="2">2月<br> 3番<input type="checkbox" name="kyonen[]" value="3">3月<br> 今年<br> 4番<input type="checkbox" name="kotosi[]" value="1">1月<br> 5番<input type="checkbox" name="kotosi[]" value="2">2月<br> 6番<input type="checkbox" name="kotosi[]" value="3">3月<br> 7番<input type="checkbox" name="mychk">去年と今年の1、2月をまとめてチェック<br> </form> </body> </html>

  • ドロップダウンメニューで選択された内容通りにチェックを入れるJS

    ドロップダウンメニューで選択された内容通りにチェックを入れるJS をご教示下さい。 なお、本番環境で対象とするチェックボックスのnameは、全てchkで始まっている法則性があります。 よろしくお願い致します。 <html> <head> <script type="text/javascript"> <!-- // --> </script> </head> <body> <form> <select name="myselect"> <option selected>全てにチェック</option> <option>全てチェック解除</option> <option>奇数だけチェック</option> <option>偶数だけチェック</option> <option>1、6、8番だけチェック</option> <option>3番以降全てチェック</option> </select> <br> <input type="checkbox" value="1" name="chk01" checked>1番<br> <input type="checkbox" value="1" name="chk02" checked>2番<br> <input type="checkbox" value="1" name="chk03" checked>3番<br> <input type="checkbox" value="1" name="chk04" checked>4番<br> <input type="checkbox" value="1" name="chk05" checked>5番<br> <input type="checkbox" value="1" name="chk06" checked>6番<br> <input type="checkbox" value="1" name="chk07" checked>7番<br> <input type="checkbox" value="1" name="chk08" checked>8番<br> <input type="checkbox" value="1" name="chk09" checked>9番<br> <input type="checkbox" value="1" name="chk10" checked>10番 </form> </body> </html>

  • チェックボックスの全選択/解除について

    お尋ねします。 チェックボックスの全選択/解除について 1画面にチェックボックスのグループが複数(store、item)あります。 下記のソースだと【store】の全選択を押下すると【store】【item】両方とも 全選択状態になります。 【store】の全選択/全解除は【store】のみ 【item】の全選択/全解除は【item】のみにしたいのですが どのようにするとよろしいのでしょうか? よろしくお願いします。 <SCRIPT TYPE="text/javascript"> <!-- function allcheck(targetForm,flag){  for(n=0;n<=targetForm.length-1;n++){   if(targetForm.elements[n].type == "checkbox"){    targetForm.elements[n].checked = flag;   }  } } --> </SCRIPT> <table width="70%" align = "center" cellspacing="0"> <form action="confirm.php" method="post" target="_blank"> <tr> <td align="center"> <input type="checkbox" name="store[]" value="1" />A店<br/> <input type="checkbox" name="store[]" value="2" />B店<br/> <input type="checkbox" name="store[]" value="3" />C店<br/> <input type="checkbox" name="store[]" value="4" />D店<br/> <input type="checkbox" name="store[]" value="5" />E店<br/> <input type="button" value="全選択" onClick="allcheck(this.form,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this.form,false)"/> </td> <td align="center"> <input type="checkbox" name="item[]" value="1" />項目1<br/> <input type="checkbox" name="item[]" value="2" />項目2<br/> <input type="checkbox" name="item[]" value="3" />項目3<br/> <input type="checkbox" name="item[]" value="4" />項目4<br/> <input type="checkbox" name="item[]" value="5" />項目5<br/> <input type="button" value="全選択" onClick="allcheck(this.form,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this.form,false)"/> </td> </tr> <tr align="center"> <td colspan="4"> <input type="submit" name="con" value="確認"> </td> </tr> </form> </table>

    • 締切済み
    • PHP
  • チェックボックスによる検索(複数チェックの場合)

    プログラム超初心者です。色々なサイトを検索し参考にしたのですがどうしても結果が得られないため投稿させていただきました。(似たようなものは多かったのですがわかりませんでした。) チェックボックスにて複数チェックされる可能性があるものをMYSQLより検索をかけ結果を表示したいと思っております。 地域:□北海道、□東北、□関東、□北陸、□中部、 ジャンル:□イタリアン、□アジアン料理、□洋食、□すべて 以上にチェックをいれてもらったものに対し検索結果画面をだす予定です。 検索をかけるhtml画面は以下のように致しました。 <form method="POST" action="search.php"> <input name="area[]" type="checkbox" value="0"/>北海道<br> <input name="area[]" type="checkbox" value="1"/>東北<br> <input name="area[]" type="checkbox" value="2"/>関東<br> <input name="area[]" type="checkbox" value="3"/>北陸<br> <input name="area[]" type="checkbox" value="4"/>中部<br> <input name="genre[]" type="checkbox" value="a"/>イタリアン<br> <input name="genre[]" type="checkbox" value="b"/>アジア料理<br> <input name="genre[]" type="checkbox" value="c"/>洋食<br> <input name="genre[]" type="checkbox" value="g"/>すべて<br> <input type="submit" name="bottun1" value="入 力"> PHPで$変数名a = $_POST["area"];と$変数名b = $_POST["genre"]; とし配列 foreach関数を使うのでは・・・とまで考えたのですがその後どうすればよいかわかりません。こんなにわからない状態でお伺いするのは恥ずかしいのですがお知恵を頂きたく投稿させていただきました。 お忙しいかと思いますがどうか宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • CGIでチェックボックスを使う方法

    チェックボックスをCGI(C言語)で使用する方法を教えて下さい。 例えば、HTMLで <input type="checkbox" name="Check1" value="Sel11" /> チェック1 選択1<br /> <input type="checkbox" name="Check1" value="Sel12" /> チェック1 選択2<br /> <input type="checkbox" name="Check1" value="Sel13" /> チェック1 選択3 <hr /> <input type="checkbox" name="Check2" value="Sel21" checked /> チェック2 選択1<br /> <input type="checkbox" name="Check2" value="Sel22" /> チェック2 選択2<br /> <input type="checkbox" name="Check2" value="Sel23" checked /> チェック2 選択3 というプログラムはCGI(C言語)ではどの様に記述すれば良いでしょうか?

    • ベストアンサー
    • CGI
  • JavaScriptでcheckboxの入力個数制限

    以下のようなチェックボックスがあります。 3つ以上チェックできないようにしたいのですが、JavaScriptで可能でしょうか? <FORM method=POST action="aaa.cgi" name="FORM1"> <input type="checkbox" name="Q1" value="1">1<br> <input type="checkbox" name="Q2" value="1">2<br> <input type="checkbox" name="Q3" value="1">3<br> <input type="checkbox" name="Q4" value="1">4<br> <input type="checkbox" name="Q5" value="1">5<br> </form>

  • 配列の受け取り方について

    value="<?php echo addslashes(implode((array) $_POST['jyusyo'],",")); ?>"> タイトルのように受け取ったら "豊岡市,養父市" のようになってしまいます。 "豊岡市","養父市" のようにしたいんですが、どう変更したら良いですか??

    • ベストアンサー
    • PHP
  • ラジオボタンとチェックボックスの計算について

    ラジオボタンとチェックボックスで選択して、その合計を表示させたいのですが、合計の最高は50になる用に作ったのですが、9点にしかなりません。 私が考えるに、<script language="JavaScript">~</script>の間が間違っていると思うのですがどうでしょうか? 皆様ご教授の程お願いします。 <script language="JavaScript"> <!-- // 項目の合計を計算 function ttlValue() { chn = 10; // ラジオボタンとチェックボックスの総数 ttl = 0; for(i=0; i<chn; i++) { if(document.nForm.elements[i].checked) { ttl += eval(document.nForm.elements[i].value); } } document.nForm.result.value = ttl; } //--> </script> </head> <body alink="#000000" bgcolor="#f0f8ff" link="#00ffff" text="#000000" vlink="#ff0000"> <br> それぞれの項目で該当する回答を1つずつ選択して下さい。 <form name="nForm">項目1<br> <input name="ch1" value="3" checked="checked" type="radio">a<br> <input name="ch1" value="2" type="radio">b<br> <input name="ch1" value="1" type="radio">c<br> <input name="ch1" value="0" type="radio">d<br> <br> 項目2<br> <input name="ch2" value="3" checked="checked" type="radio">a<br> <input name="ch2" value="2" type="radio">b<br> <input name="ch2" value="1" type="radio">c<br> <input name="ch2" value="0" type="radio">d<br> <br> 項目3<br> <input name="ch3" value="3" checked="checked" type="radio">a<br> <input name="ch3" value="2" type="radio">b<br> <input name="ch3" value="1" type="radio">c<br> <input name="ch3" value="0" type="radio">d<br> <br> 項目4<br> <input name="ch4" value="1" checked="checked" type="radio">a<br> <input name="ch4" value="0" type="radio">b<br> <br> 項目5<br> <input name="ch5" value="1" checked="checked" type="radio">a<br> <input name="ch5" value="0" type="radio">b<br> <br> オプションがあれば選択して下さい。(複数選択可)<br> <input name="bx1" value="1" type="checkbox">1<br> <input name="bx1" value="1" type="checkbox">2<br> <input name="bx1" value="1" type="checkbox">3<br> <input name="bx1" value="1" type="checkbox">4<br> <input name="bx1" value="1" type="checkbox">5<br> <input name="bx1" value="1" type="checkbox">6<br> <input name="bx1" value="1" type="checkbox">7<br> <input name="bx1" value="1" type="checkbox">8<br> <input name="bx1" value="1" type="checkbox">9<br> <input name="bx1" value="1" type="checkbox">10<br> <input name="bx1" value="1" type="checkbox">11<br> <input name="bx1" value="1" type="checkbox">12<br> <input name="bx1" value="1" type="checkbox">13<br> <input name="bx1" value="1" type="checkbox">14<br> <input name="bx1" value="1" type="checkbox">15<br> <input name="bx1" value="1" type="checkbox">16<br> <input name="bx1" value="1" type="checkbox">17<br> <input name="bx1" value="1" type="checkbox">18<br> <input name="bx1" value="1" type="checkbox">19<br> <input name="bx1" value="1" type="checkbox">20<br> <input name="bx1" value="1" type="checkbox">21<br> <input name="bx1" value="1" type="checkbox">22<br> <input name="bx1" value="1" type="checkbox">23<br> <input name="bx1" value="1" type="checkbox">24<br> あなたの獲得したメダルは何色?<br> <select name="ch2"> <option value="0" selected="selected">なし</option> <option value="5">金メダル</option> <option value="3">銀メダル</option> <option value="1">銅メダル</option> </select> <br> <br> メダル獲得まで何年かかりましたか?<br> 項目6<br> <input name="ch6" value="10" checked="checked" type="radio">20年以上<br> <input name="ch6" value="5" type="radio">19年~10年<br> <input name="ch6" value="3" type="radio">9年~5年<br> <input name="ch6" value="1" type="radio">4年~3年<br> <input name="ch6" value="0" type="radio">2年未満<br> <br> <input value="合計金額を計算" onclick="ttlValue()" type="button"><br> <br> 合計<input name="result" size="10" type="text"> </form> <br>

専門家に質問してみよう