• ベストアンサー
※ 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% (5069/13244)
回答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

  • チェックボックスについて

    お世話になっております。 フォーム上にあるチェックボックスの数だけDBへフィールドを用意し、チェックされたものをvalueに記載のある内容をDBへ登録しようと考えております。 そこで、他の入力フォームに入力の不備があった場合は、同じ画面に戻り、入力を催促する設定を描いているのですが、チェックをしたチェックボックスがクリアにならない様にするには、どのようにしたら宜しいのでしょうか?色々と調べて居るのですが、どれもチャックした内容を表示する場合だったりで、初心者の私として的を得たものが見つかりません。ご教授いただければと思い投函させて頂きました。 宜しくお願い致します。 <input type="checkbox" name="renraku_mail" value="メールを希望" checked> &nbsp;メール &nbsp;&nbsp;&nbsp; <input type="checkbox" name="renraku_tel" value="電話を希望"> &nbsp;電話 &nbsp;&nbsp;&nbsp; <input type="checkbox" name="renraku_fax" value="FAXを希望"> &nbsp;FAX

    • ベストアンサー
    • PHP
  • セレクトボックスとチェックボックスを使った絞込み検索

    Yomi-Searchについての質問なのですがタイトルの通りの質問でチェックボックスを使った絞り込み検索では 01_03 04_01 と検索結果に表示されるのですがセレクトボックスとチェックボックスを組み合わせて絞り込み検索をしてみると 01_0304_01 とこのようにカテゴリとカテゴリの間にスペースが入らず絞り込み検索が出来ません‥ タグはこのように書きました。 <FORM action="http://www..." method="get" target="" name="form1"> <INPUT type="hidden" name="mode" value="search"> <INPUT type="hidden" name="page" value="1"> <INPUT type="hidden" name="sort" value="mark"> <INPUT type="hidden" name="engine" value="pre"> <INPUT type="hidden" name="kn" value="30"> <SELECT size="1" name="word"> <OPTION type="selected" value="">--------</OPTION> <option value="01_01" name="word1">○○○</option> <option value="01_02" name="word2">○○○</option> <option value="01_03" name="word3">○○○</option> </SELECT><BR> <BR> <INPUT type="checkbox" name="word4" value="04_01">○○○<BR> <INPUT type="checkbox" name="word5" value="04_02">○○○<BR> <INPUT type="checkbox" name="word6" value="04_03">○○○<BR> <BR> <INPUT type="submit" value=" 検 索 "> <INPUT type="reset" value="リセット"> &nbsp; </FORM> 全くの初心者ですいませんが良きアドレスなどをお願いします。

  • チェックボックス連結

    MySQLで、perlを使ってチェックボックスでデータを送信するのですが、 カラムを分けずに、チェックボックスで複数選択されたデータを、;などの仕切りで同一フィールドへ記録したいのですが、やり方がわかりません。 <input type = checkbox name = col1 value="1"> <input type = checkbox name = col1 value="2"> <input type = checkbox name = col1 value="3"> <input type = checkbox name = col1 value="4"> 結果 col1 |col2 | +-------------- 1;2;3;4| | のような感じです。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • チェックボックスの全選択

    <input type="checkbox" name="chk" value=1> <input type="checkbox" name="chk" value=2> <input type="checkbox" name="chk" value=3> <input type="checkbox" name="chk" value=4> <input type="checkbox" name="chk" value=5> このように同一名称のチェックボックスに対して ボタンを押下された時全てのチェックボックスを チェックするJavaScriptの 書き方を教えて貰えないでしょうか

  • チェックボックスの戻り

    チェックボックスのvalue値に数字を入れてPOSTしています。 DB登録の前にその値を足し算してDBに登録しています。 <input type="checkbox" name="cb[0]" value="1"> <input type="checkbox" name="cb[1]" value="2"> <input type="checkbox" name="cb[2]" value="4"> <input type="checkbox" name="cb[3]" value="8"> <input type="checkbox" name="cb[4]" value="16"> ・・・のようにしています。DBの値を読み取ってcheckedを付ける際はどのようにしたら効率よく処理できるでしょうか?switchを使うとすごくチェックボックスの数が増えると厄介です。困っています。教えてください。

    • ベストアンサー
    • PHP
  • チェックに応じて違うチェックボックスをアクティブにしたい

    次のHTMLのように、大分類、小分類のような構成のチェックボックス グループがあります(初期設定は全部チェック無しです) 普段は[a][b][c][d]をdisableとしておき、(1) にチェックが入った 場合に[d]以外([a][b][c])アクティブ(?とにかくチェックを入れる ことができる)ようにするにはどうしたらいいでしょうか。 よろしくお願い致します。 <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ : </form>

  • 複数のチェックボックスをチェックしたい

    質問させてください。 複数のチェックボックスを項目別に全てチェックするようなjqueryの書き方をご教授いただきたいです。 <table> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />a</li> <li><input type="checkbox" name="" value="" />b</li> <li><input type="checkbox" name="" value="" />c</li> <li><input type="checkbox" name="" value="" />d</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />e</li> <li><input type="checkbox" name="" value="" />f</li> <li><input type="checkbox" name="" value="" />g</li> <li><input type="checkbox" name="" value="" />h</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />i</li> <li><input type="checkbox" name="" value="" />j</li> <li><input type="checkbox" name="" value="" />k</li> <li><input type="checkbox" name="" value="" />l</li> </td> </tr> </table> 上記のようにそれぞれの項目に「まとめてチェック」のチェックボックスがあり、 そこに該当するチェック項目は全てチェックorチェックを外す っという挙動の実装を考えています。 jqueryでやりたいのですが、javascript、jqueryがかなり苦手でいまいちいきません。 ググって $(function(){ $('#all').click(function(){ if(this.checked){ $('#check input').attr('checked','checked'); }else{ $('#check input').removeAttr('checked'); } }); }); このソースを見つけたのですが、これだと一つの項目でしか実装できず 項目分このjqueryを書くのも余り良い書き方だと思えません。 どなたか、ご教授お願いいたします。

  • チェックボックスのチェックについて

    submit時に一つでもチェックがなければアラートを表示 チェックがあれば進む・・・としたいです。 <form action=next.html name=form1> <input type=checkbox name=checkbox1 value=1> <input type=checkbox name=checkbox2 value=2> <input type=checkbox name=checkbox3 value=3> <input type=checkbox name=checkbox4 value=4> <input type=checkbox name=checkbox5 value=5> ~以下50まで続きます <input type=submit value=submit> </form> function countChecked(form1) { var total = 0; var max = 50; for (var index = 0; index < form1.checkbox.length; index++) { total += form1.checkbox[index].checked ? 1 : 0; } if(countChecked(document.form1)) > 0) { return true; } else { alert("no"); return false; } return(total); } 過去に似たような質問を参考に作ってみましたがダメでした。 チェックボックスの名前の付け方が悪いのでしょうか。

  • チェックボックス選択で(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
  • 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
このQ&Aのポイント
  • パソコンがWI-FIと繋がらない状況で悩んでいませんか?WI-FIには繋がっているのに、なぜパソコンが繋がらないのか原因を解説します。
  • ブラザー製品のDCP-J586Nでパソコンが繋がらないという問題について、WI-FIとの接続トラブルが考えられます。解決方法としては、まずはWI-FIの設定を確認し、適切なネットワークに接続されているかを確認してください。
  • WI-FIには繋がっているのに、パソコンがプリンタを認識しないという問題は、ドライバーの不具合や設定の問題が考えられます。ブラザー製品のDCP-J586Nとパソコンの接続設定を確認し、最新のドライバーをインストールしてみてください。
回答を見る

専門家に質問してみよう