検索フォームにチェックボックスグループを追加する方法

このQ&Aのポイント
  • PHPとMySQLを使用して、検索フォームに複数のチェックボックスグループを追加する方法を説明します。
  • 具体的な記述例を示さずに、任意の数のチェックボックスグループを検索条件として絞り込む方法を紹介します。
  • 質問文章では、住所と好きな果物を検索条件として組み合わせていますが、他の検索条件も同じ方法で結びつけることができます。
回答を見る
  • ベストアンサー

何種類かのチェックボックスグループを検索フォームに追加したい

PHP 5、MySQL 4.0.14という組み合わせで、検索システムに挑戦中です。 入門書から動作まで確認できましたが、検索フォームにいくつかの チェックボックスを追加したいです。 例えば、好きな果物を任意に選択させ、チェックされた果物をOR条件で、 さらに他の検索条件(住所等)とAND条件で結びたいです。 ここで、(1)HTML側と、(2)<?php ~~?>内に、 具体的にどのように記述したらよいものでしょうか。 例示はしてませんが好きな果物(3つのチェックボックスグループ)だけでなく、 好きな動物(6つの 〃 )や、好きな飲み物(2つの 〃 )など、様々な チェックボックスを検索条件として絞り込めるようにしたいです。 ---検索フォーム-- <FORM method="POST" action="list.php"> 住所<input type="text" name="address"> を含む 好きな果物 <INPUT TYPE="CHECKBOX" NAME="kudamono">りんご <INPUT TYPE="CHECKBOX" NAME="kudamono">みかん <INPUT TYPE="CHECKBOX" NAME="kudamono">なし <input type="submit" name="exec" value="検索"> </FORM> ---検索結果PHP-- require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from t_mydata where (address like '%$address%') $sql .= " order by address"; $rst = mysql_query($sql, $con); $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $body .= "<tr>"; $body .= "<td>" . $col["ADDRESS"] . "</td>"; $body .= "<td>" . $col["KUDAMONO"] . "</td>"; $body .= "</tr>"; } $body .= "</table>"; # だいぶ省略してます。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

>同じようなチェックボックス形の検索条件を他にいくつか用意したいため、 >先頭行のSQL文はをご例示いたWHEREでなくANDに書き換えたのですが、 >この場合ひとつもチェックされていない場合にエラーになってしまいます。 checkboxならば if(is_array($_POST['kudamono'])) { print"チェックされてます"; } とすればよいみたいですね。

litton101
質問者

お礼

たびたびありがとうございました! おかげさまで、完璧に要望を実現できました。 実はチェックボックスグループが10個くらいある 検索フォームなので 汎用性の高いものをご提示いただけた おかげで、必要な部分がすぐにできあがりました。 本当に感謝にたえません。ありがとうございました。

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

例えば <INPUT TYPE="CHECKBOX" NAME="a">りんご <INPUT TYPE="CHECKBOX" NAME="b">みかん <INPUT TYPE="CHECKBOX" NAME="c">なし として、 $sql = "select * from t_mydata"; $sql .= " where ("; $i=0; # 「or」 をつけるフラグ if($_POST['a']) { if ($i) { $sql .= " or "; } $sql .= "果物 = 'りんご'; $i++; } if($_POST['b']) { if ($i) { $sql .= " or "; } $sql .= "果物 = 'みかん'; $i++; } if($_POST['c']) { if ($i) { $sql .= " or "; } $sql .= "果物 = 'なし'; $i++; } $sql .=")"; というような感じでやればいいかと思います。 <INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="りんご">りんご <INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="みかん">みかん <INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="なし">なし としておけば foreach($_POST['kudamono'] as $fr) { if ($i) { $sql .= " or "; } $sql .= "果物 = '$fr'; $i++; } と省略できたりします。 条件が増えた場合はおんなじような感じで条件式を増やしてやればいいです。

litton101
質問者

補足

ご教示ありがとうございました! 早速ためさせていただきましたが、すばらしいです。 条件が増えても対応できる省略形(配列というんですよね?)を使わせていただきました。 <INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="りんご">りんご <INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="みかん">みかん <INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="なし">なし $sql .= " and ("; $i=0; # 「or」 をつけるフラグ foreach($_POST['kudamono'] as $fr) { if ($i) { $sql .= " or "; } $sql .= "果物 = '$fr'"; $i++; } $sql .=")"; 完成形が以上の通りになりましたが、ひとつだけ追加質問よろしいでしょうか。 同じようなチェックボックス形の検索条件を他にいくつか用意したいため、 先頭行のSQL文はをご例示いたWHEREでなくANDに書き換えたのですが、 この場合ひとつもチェックされていない場合にエラーになってしまいます。 「AND()」というSQL文が生成されてしまうためです。 テキストボックスなら、次のように文字が入っている場合のみ検索対象にする、 みたいにできようですが、今回のチェックボックスの場合はどのようにかきかえたら よろしいでしょうか。 if (strlen($hoge) > 0) {書き出したいSQL文} どうぞ、よろしくお願い致します。

関連するQ&A

  • checkboxにチェックされた果物をOR条件で、さらに他の検索条件と

    checkboxにチェックされた果物をOR条件で、さらに他の検索条件とAND条件で結ぶSQL文を発行したいです。 (PHP5+MySQL5) 5年前に本サイトでご教示いただいた以下の回答を今でも活用させていただいて参りましたが、 http://okwave.jp/qa/q1506155.html このたび、好きな果物の登録が「ない」人を抽出する(空白の人もマッチさせる)SQL文を発行したくなりました。 具体的には以下のような画面だとして、kudamono_torokunasiのチェックボックスをどのように取り込んだらよいでしょうか。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <body> <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> 好きな果物 <input type="checkbox" name="kudamono[]" value="0">りんご <input type="checkbox" name="kudamono[]" value="1">みかん <input type="checkbox" name="kudamono[]" value="2">ぶどう <input type="checkbox" name="kudamono[]" value="3">ばなな <br> 登録なし(空白の人もマッチさせる) <input type="checkbox" name="kudamono_torokunasi"> <br> <input type="submit" name="exec" value="検索"> </form> </body> </html> <?php if ($_POST['kudamono'] != "") { $sql = "select * from mytable where myval1 =1 "; if (is_array($_POST['kudamono'])) {  $sql .= " and (";  $i=0; # 「or」 をつけるフラグ  foreach ($_POST['kudamono'] as $kudamonovalue) {   if ($i) {    $sql .= " or ";   }   $sql .= "kudamono = '$kudamonovalue'";   $i++;  }  $sql .=")"; } $sql .= " order by myval3"; echo $sql; } ?>

    • ベストアンサー
    • PHP
  • チェックボックスグループの一部のボックスだけを常に無効化したい

    チェックボックスグループの一部のボックスだけを常に無効 (readonly、disabled)にする方法があればご教示ください。 たとえば、以下でみかんだけを無効にする、という具合です。 <INPUT TYPE="CHECKBOX" NAME="kudamono" value="りんご">りんご <INPUT TYPE="CHECKBOX" NAME="kudamono" value="みかん">みかん <INPUT TYPE="CHECKBOX" NAME="kudamono" value="なし">なし (もちろんJavascript、CSS可、IE6限定で動作すれば十分です。) よろしくお願い致します。

    • ベストアンサー
    • HTML
  • チェックボックスのチェック処理

    HTMLでボタン押下時にチェックしたいことがあります。 ■カテゴリーA~Cで、カテゴリー毎に選択できるのは一つのみ  (例)「A1・あ」と「A2・お」が選択時はNG ■カテゴリーは最大2つまで選択可能  (例)「A1・い」と「C1・さ」が選択時はOK    「A1・い」と「B2・く」と「C1・さ」が選択時はNG <html> <head> </head><body> <form> <table border="1"> <tr> <td>A1</td> <td><input type="checkbox" name="chk1" value="1">あ</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">い</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">う</td> </tr> <tr> <td>A2</td> <td><input type="checkbox" name="chk1" value="1">え</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">お</td> </tr> <tr> <td>B1</td> <td><input type="checkbox" name="chk1" value="1">か</td> </tr> <tr> <td>B2</td> <td><input type="checkbox" name="chk1" value="1">く</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">け</td> </tr> <tr> <td>C1</td> <td><input type="checkbox" name="chk1" value="1">さ</td> </tr> <tr> <td>C2</td> <td><input type="checkbox" name="chk1" value="1">し</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">す</td> </tr> </table> <input type="submit" value="チェック"> </form> </body> </html> すみませんがよろしくお願いします。

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

    質問させてください。 複数のチェックボックスを項目別に全てチェックするような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を書くのも余り良い書き方だと思えません。 どなたか、ご教授お願いいたします。

  • [PHP初心者] フォームのエラーチェック

    PHPやデータベースに全く疎い者です。 皆様にご指導頂きたく投稿致します。質問内容もレベルが低いですがどうが宜しくお願いします。 メールフォームにてフォームのボタンを押下し、 エラーチェックをして、エラー項目を同一画面上の上の辺りに表示させたいのですが、、参考書を読んだり、過去スレを拝見しても、どうもわかりません。 <body> //↓この辺をどう書けばいいのか、さっぱりなんです。 <?php if(isset($_POST['mailform'])) { if($_POST['name'] == "") { echo("名前を入力して下さい。<br>"); }} ?> //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ <form method="POST" action="kakunin.php"> <table border="0" cellpadding="5"> <tr> <td colspan="2"></td> </tr> <tr> <td>名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input name="mail" type="text" id="mail" size="20"></td> </tr> <tr> <td>項目</td> <td>     <input type="checkbox" name="check[]" value="PHP">PHP <input type="checkbox" name="check[]" value="Perl">Perl <input type="checkbox" name="check[]" value="ASP">ASP <input type="checkbox" name="check[]" value="JSP">JSP</td> </tr> <tr> <td>お問い合わせ内容</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input name="mailform" type="submit" id="mailform" value="::入力内容を確認::">  <input type="reset" name="Submit" value="リセット"></td> </tr> </table> </form> </body>

    • 締切済み
    • PHP
  • チェックボックス + フリーワード検索 PHP&MYSQL

    現在検索画面の作成をしているのですが、分からないことがありましたので 質問をさせて頂きました。 検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php) 仕様としてはkensaku.phpにチェックボックス(複数選択可)と フリーワードがあり、一つの検索ボタンで検索し結果をresult.phpに表示させようと思っております。データベースはMYSQLです。 検索ボタンが一つしかないため、もしチェックボックスが選択されず、フリーワードだけ入力されたのであれば、それだけで検索。その逆のもし チェックボックスだけ選択されたのであればそれだけで検索。 また両方入力されたのであれば、両方のデータを検索できるように したいと思っております。 フリーワード検索までは出来るようになったのですが、 チェックボックス検索(両方検索・片方のみ検索)などが どうしても出来ません。 どなたかご存知の方ご教授して頂けないでしょうか。 宜しくお願い致します。 こちらがコードになります。 1,kensaku.php <form action="result.php" method="POST" > <table class="font12" cellpadding="5" cellspacing="10" width="430" align="center"> <tr> <td> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br /> </td> </tr> <tr> <td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="検索する" /></td> 2, result.php <?php $sejyutu = $_POST["sejyutu"]; $sejyutu_else = $_POST["sejyutu_else"]; if($sejyutu and sejyutu_else<>''){ //DB接続・選択 if (!$int_connect = @mysql_connect('localhost','aaa','aaaa')) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("database", $int_connect)) { die("can't use selected database."); } $sql = "select * from table where sejyutu_else like'%$sejyutu_else%'"; $result=mysql_query($sql,$int_connect); $rows=mysql_num_rows($result); ?> <table width="430" cellpadding="5" cellspacing="0" class="font12"> <?php while($row = mysql_fetch_array($result)){ ?> <tr> <td colspan="2"><p class="salon_name"><?php echo $row["name"]; ?></p></td> </tr> <tr> <td valign="top"><p class="salon_item">最寄り駅:</p></td> <td class="salon_detail"><?php echo $row["station"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">住所:</p></td> <td class="salon_detail"><?php echo $row["address"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">施術名</p></td> <td class="salon_detail"><?php echo $row["sejyutu"];?></td> </tr> <?php } } ?> </table> </body> </html>

    • ベストアンサー
    • 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
  • htmlのフォームのチェックボックスを繰り返し文等を使って複数作りたい

    htmlのフォームのチェックボックスを繰り返し文等を使って複数作りたいのですが、どのように書けば良いのかわかりません。 自分はhtml、PHP、Perlの基本的なことはわかります。 例えば、以下のようなチェックボックスを繰り返し文などを使って作るとすると、どのように書けばよいのでしょうか? <input type="checkbox" name="test">test1 <input type="checkbox" name="test">test2 <input type="checkbox" name="test">test3 <input type="checkbox" name="test">test4 <input type="checkbox" name="test">test5 よろしくお願いします。

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

    次の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>

  • 検索後にチェックボックスのON/OFF状態を再現して表示したい

    下記の例で、表示されている sample.php にあるチェックボックスを ON/OFFしてから再計算ボタンを押下後、チェックボックスのON/OFF状態を 引き継いで(維持して)sample.phpを表示させることはできませんか? 「りんご」だけにチェックして再計算ボタンを押下後、再表示された sample.php は「りんご」だけチェックが入っているイメージです。 <form action="./sample.php" method="post"> <input type="checkbox" name="fruit[]" value="apple">りんご</td> <input type="checkbox" name="fruit[]" value="orange">みかん</td> <input type="checkbox" name="fruit[]" value="grape">ぶどう</td> <input type="submit" name="exec" value="再計算"> </form> なお、name="fruit[]" は配列になっていて、SQL発行に生かされています。

    • ベストアンサー
    • PHP

専門家に質問してみよう