- 締切済み
PHP&MYSQLでの検索システムについて
PHP&MYSQLでチェックボックスを使用した絞込み検索システムを制作しようと思っています。 検索機能の内容は □居酒屋□レストラン□美容室 のチェックボックスに複数また、いずれかにチェックをして該当されたお店の写真(一枚)と説明文を1ページ20店舗ずつ表示したい思っています。 現在、MYSQLにデータベース、テーブルをつくりそれをチェックボックス用のHTMLとデータ取得用のPHPでMYSQLに接続、データを読み出すことはまでは出来たのですがチェックボックスで絞込みが出来ない状態で作業がとまっています。どなたかにご教授お願いしたいと思い質問させていただきました。よろしくお願い致します。 また、画像はどこに格納しておくのが良い方法なのでしょうか? ソースは select.html <body> <form name="form" action="search.php" method="post"> <input name="key[1]" value="居酒屋" type="checkbox" />居酒屋<br> <input name="key[2]" value="レストラン" type="checkbox" />レストラン<br> <input name="key[3]" value="美容室" type="checkbox" />美容室<br> <p><input value="検索開始" type="submit" /></p> </form> </body> search.php <?php $link = mysql_connect('localhost', 'root', 'pass'); if (!$link) { die('接続失敗です。'.mysql_error()); } $db_selected = mysql_select_db('mysqltest', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } if($debug) print_r($HTTP_POST_VARS); //クエリ生成 $query = "SELECT id,name,state FROM personal_info "; mysql_set_charset('utf8'); //検索条件生成 //名前 if(!empty($name)) { $value = addslashes($value); $where = "value = '$value' && "; } if(!empty($where)) { $where = substr($where, 0, -4); $where = "WHERE " . $where; } $query .= $where; if($debug) { print "<BR><BR>"; print $query; } $result = mysql_query($query); $num_rows = mysql_num_rows($result); if($num_rows == 0) $message = "該当するデータはありませんでした"; else $message = $num_rows . "件ヒットしました"; ?> 検索結果<br> <?=$message?> <table border=0> <? while($row = mysql_fetch_assoc($result)): ?> <tr><td><?=$row[name]?></td></tr> <? endwhile; ?> </table> <a href="select.html">再検索</a> 環境 XAMPP 1.3.0.1 PHP 5.2.9.9 MYSQL 5.1 また、この検索システムに関する書籍やサイトがありましたら教えて頂けたらうれしいです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
検索条件がよくわかりませんが・・・ OR条件ならたとえばこういうかんじで? <form> <div><input type="checkbox" name="key[]" id="key_1" value="居酒屋" /><label for="key_1">居酒屋</label></div> <div><input type="checkbox" name="key[]" id="key_2" value="レストラン" /><label for="key_2">レストラン</label></div> <div><input type="checkbox" name="key[]" id="key_3" value="美容室" /><label for="key_3">美容室</label></div> <div><input value="検索開始" type="submit" /></div> </form> <?PHP $query = "SELECT id,name,state FROM personal_info WHERE 1"; $key=$_REQUEST["key"]; $where =""; foreach((array) $key as $val){ if($where!="") $where .=","; $where .="'".mysql_escape_string($val)."'"; } if(is_array($key))$query .=" AND value IN (".$where .")"; print $query; ?>
補足
yambejpさま 回答ありがとうございます。 少しソースを書き直してand or 検索までは出来たのですが、チェックボックスでの検索が出来ないでいます。 1. select.html 2. 3. <form name="form2" action="search.php" method="post"> 4. <input type="text" name="keyword" size="25"> 5. <input type="submit" name="search" value="検索"><br /> 6. <input type="radio" checked name="searchSelect" value="AND">AND 7. <input type="radio" name="searchSelect" value="OR">OR 8. <input type="checkbox" name="check[]" value="居酒屋" />居酒屋 9. <input type="checkbox" name="check[]" value="レストラン" />レストラン 10. <input type="checkbox" name="check[]" value="カフェ" />カフェ 11. <input value="検索開始" type="submit" /> 12. </form> 1. search.php 2. 3. <?php 4. //ファイルを読み込み 5. function executeQuery($sql){ 6. $url = "localhost"; 7. $user = "root"; 8. $pass = "pass"; 9. $db = "shop"; 10. 11. // MySQLへ接続する 12. $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); 13. 14. // データベースを選択する 15. $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); 16. mysql_set_charset('utf8'); 17. // クエリを送信する 18. $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); 19. 20. // MySQLへの接続を閉じる 21. mysql_close($link) or die("MySQL切断に失敗しました。"); 22. 23. //戻り値 24. return($result); 25. } 26. 27. //データを取得する 28. $searchSelect = $_POST['searchSelect']; 29. $keyword = $_POST['keyword']; 30. $keyword = ereg_replace("[ ]+", " ", $keyword); 31. $keyword = trim($keyword); 32. 33. //検索キーワード未入力時 34. if(empty($keyword)){ 35. print "<html>"; 36. print "<head><title>未入力</title></head>"; 37. print "<body>"; 38. print "検索キーワードが入力されていません。"; 39. print "<p><a href=\"select.php\" target=\"_self\">全件表示へ</a><p>"; 40. print "</body>"; 41. print "</html>"; 42. exit; 43. } 何が間違っているのでしょうか?