• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpのチェックボックスによる絞込みについて)

PHPでチェックボックスによる絞込みを実装する方法

このQ&Aのポイント
  • PHPとSQLを使用して、チェックボックスを使って複数条件によるデータの絞り込みを行う方法について教えてください。
  • 現在、全てのチェックが入っている場合にしかデータが表示されない状況であり、どのように変更すれば良いかわからない状態です。
  • ソースコードの一部を示し、それに対して改善策やアドバイスをいただきたいです。

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

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

これはテクニックがあります。 (1)全件表示は「WHERE 1」とします (2)絞り込みをするときはANDでつなぎます (3)同じカテゴリでやるときは0にORでつなぎます。 場合によってはINで処理してもよいでしょう。 なお、運用の際にはきちんとエスケープ処理をいれましょう。 <?php $where=""; foreach((array) $_REQUEST['gakunen'] as $key=>$gakunen){ if($key==0) $where.=" AND (0"; $where .= " OR `gakunen`='".$gakunen."'"; //$where .= " OR `gakunen`='".mysql_real_escape_string($gakunen)."'"; if($key==count($_REQUEST['gakunen'] ) -1) $where.=")"; } foreach((array) $_REQUEST['seibetsu'] as $key=>$seibetsu){ if($key==0) $where.=" AND (0"; $where .= " OR `seibetsu`='".$seibetsu."'"; //$where .= " OR `seibetsu`='".mysql_real_escape_string($seibetsu)."'"; if($key==count($_REQUEST['seibetsu'] ) -1) $where.=")"; } foreach((array) $_REQUEST['club'] as $key=>$club){ if($key==0) $where.=" AND (0"; $where .= " OR `club`='".$club."'"; //$where .= " OR `club`='".mysql_real_escape_string($club)."'"; if($key==count($_REQUEST['club'] ) -1) $where.=")"; } $sql = "SELECT * from fa1 where 1".$where; print $sql; ?> <form> <input type="checkbox" name="gakunen[]" value="1年" />1年&nbsp; <input type="checkbox" name="gakunen[]" value="2年" />2年&nbsp; <input type="checkbox" name="gakunen[]" value="3年" />3年&nbsp;<br /> <input type="checkbox" name="seibetsu[]" value="男" />男&nbsp; <input type="checkbox" name="seibetsu[]" value="女" />女&nbsp;<br /> <input type="checkbox" name="club[]" value="サッカー" />サッカー&nbsp; <input type="checkbox" name="club[]" value="野球" />野球&nbsp; <input type="checkbox" name="club[]" value="バスケット" />バスケット&nbsp; <input type="checkbox" name="club[]" value="美術" />美術&nbsp; <input type="submit" value="送信する" /> </form>

lyrice3
質問者

お礼

回答ありがとうございます。 教えていただいた通り書き換えて実行したら思うように動作しました。教えていただいた内容を読んでようやく概念が理解できました。 本当にありがとうございます!

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

各foreachの前の変数定義を $arr1 = array("1=1"); $arr2 = array("1=1"); $arr3 = array("1=1"); としらたどうですか?

lyrice3
質問者

お礼

回答ありがとうございます。教えていただいた通りにしたら、全てのチェックを入れなかった場合の全データ表示はできました!ありがとうございます。 しかし、一つの項目のみチェックを入れた場合はデータが出てきません。1年にチェックを入れた場合の処理がどうなってるのか表示させたところ、 SELECT * from fa1 where (1=1orgakunen = '1年') and (1=1) and(1=1) となっています。 whereの後の部分(1=1orgakunen = '1年')でorgakunenとなってるあたりが問題なのかなぁと思い、クォーテーションでくくったりもしてみたのですが解決には至りませんでした。 このあたり、何かお気づきになりますでしょうか。

関連するQ&A