- ベストアンサー
複数選択の方法についての質問
- 複数選択の方法が分からないです。現在の方法では最後にチェックしたワードでしか検索できません。
- 複数選択に対応するために、チェックボックスの配列を使っていますが、次のステップが分かりません。
- 現在のPHPコードでは、$jyusyoという変数を受け取って、データベースのクエリに利用していますが、改善点があるかどうか教えてください。
- みんなの回答 (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) "; } こうかな?
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
こんな感じでやります。 <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; ?>
補足
if($jyusyo != "") { foreach ($jyusyo as $value) { $like .= "'" . $value . "',"; } //最後の , を削除 $like = substr($like, 0, -1); $query = $query . " jyusyo in ($like) "; } この部分で近い感じにはなりました。しかし豊岡市にチェックしたところ住所が豊岡市のものしか出てこず、”豊岡市中央町”などのデータが出てきませんでした。豊岡市を含むデータも出したいのですが、上記をどのように変えたら良いでしょうか??