プロが教えるわが家の防犯対策術!

お世話になります。
現在<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になっていますが変えるべきですか?
どうか改変ポイント等の御教授お願い申し上げます。

A 回答 (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) ";
}
こうかな?

この回答への補足

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

補足日時:2011/09/27 22:56
    • good
    • 0

こんな感じでやります。



<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;
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!