• 締切済み

チェックボックス検索システム

<?PHP $con = mysql_connect('******.jp', '*********', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $arr1 = array(); foreach($_POST['tiiki'] as $tiiki){ $arr1[] = " tiiki = '$tiiki' "; } $arr2 = array(); foreach($_POST['syoku'] as $syoku){ $arr2[] = " syoku = '$syoku' "; } $arr3 = array(); foreach($_POST['koyou'] as $koyou){ $arr3[] = " koyou = '$koyou' "; } $a = implode(" OR ",$arr1); $b = implode(" OR ",$arr2); $c = implode(" OR ",$arr3); $sql = "select * from kensaku where ($a) AND ($b)AND ($c) order by date desc"; print $sql; ?> <?php $con = mysql_connect('*****.jp', '******', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('*******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $result = mysql_query('SELECT * FROM kensaku', $con); while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['tiiki'] . ':' . $data['syoku'] . ':' . $data['koyou'] . ':' . $data['kai'] . "</p>\n"; } $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> これで表示されるのが、 select * from kensaku where ( tiiki = '豊岡市' ) AND ( syoku = '飲食' )AND ( koyou = 'バイト' ) order by date desc 豊岡市:飲食:バイト:オシイそば 豊岡市:製造:正社員:オシイ運輸 養父市:飲食:バイト:オシイ物産 です。一番目のphpデータはPOST文を受け取っただけでデータベース内から検索してくれないし、二番目のphpデータはデータべスにある情報を全て受け取っただけです。 僕はチェックされた情報をPOSTで受け取り、チェックされた内容に該当するデータだけデータベースから受け取り表示させたいんですが、どうすればいいですか?非常に困っています!!!!!!!!!!!!!!!!!!!!!!!!!

noname#142312
noname#142312
  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • tomaju
  • ベストアンサー率76% (84/110)
回答No.1

まぁ落ち着いて。 > 一番目のphpデータはPOST文を受け取っただけでデータベース内から検索してくれないし 一番のPHPスクリプトですが、 チェックされた情報をPOSTで受け取り、チェックされた内容に該当するデータだけ検索する、 そのためのSQL文を組み立てて、変数 $sql に格納するところまで、 一応できています。 後は、二番でやっているように mysql_query でSQL文を実行し、mysql_fetch_array で 結果を取得してみましょう。 ------------------------------------------------------------------------------- ...省略 $a = implode(" OR ",$arr1); $b = implode(" OR ",$arr2); $c = implode(" OR ",$arr3); $sql = "select * from kensaku where ($a) AND ($b)AND ($c) order by date desc"; print $sql; // SQL文を実行 $result = mysql_query($sql, $con); // 結果を1行ずつ配列として取得 while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['tiiki'] . ':' . $data['syoku'] . ':' . $data['koyou'] . ':' . $data['kai'] . "</p>\n"; } ------------------------------------------------------------------------------- ※二番では mysql_query('SELECT * FROM kensaku', $con); のように、 全件を検索するSQL文を、mysql_query の第一引数のところで書いていますが、 こちらではあらかじめSQL文を格納した変数 $sql を mysql_query の第一引数に 渡しているところが二番と違います。

関連するQ&A

  • チェックボックス検索システム

    <?PHP $con = mysql_connect('******.jp', '*********', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $arr1 = array(); foreach($_POST['tiiki'] as $tiiki){ $arr1[] = " tiiki = '$tiiki' "; } $arr2 = array(); foreach($_POST['syoku'] as $syoku){ $arr2[] = " syoku = '$syoku' "; } $arr3 = array(); foreach($_POST['koyou'] as $koyou){ $arr3[] = " koyou = '$koyou' "; } $a = implode(" OR ",$arr1); $b = implode(" OR ",$arr2); $c = implode(" OR ",$arr3); $sql = "select * from kensaku where ($a) AND ($b)AND ($c) order by date desc"; print $sql; ?> <?php $con = mysql_connect('*****.jp', '******', '******'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('*******', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SET NAMES utf8', $con); if (!$result) { exit('文字コードを指定できませんでした。'); } $result = mysql_query('SELECT * FROM kensaku', $con); while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['tiiki'] . ':' . $data['syoku'] . ':' . $data['koyou'] . ':' . $data['kai'] . "</p>\n"; } $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> これで表示されるのが、 select * from kensaku where ( tiiki = '豊岡市' ) AND ( syoku = '飲食' )AND ( koyou = 'バイト' ) order by date desc 豊岡市:飲食:バイト:オシイそば 豊岡市:製造:正社員:オシイ運輸 養父市:飲食:バイト:オシイ物産 です。一番目のphpデータはPOST文を受け取っただけでデータベース内から検索してくれないし、二番目のphpデータはデータべスにある情報を全て受け取っただけです。 僕はチェックされた情報をPOSTで受け取り、チェックされた内容に該当するデータだけデータベースから受け取り表示させたいんですが、どうすればいいですか?

    • ベストアンサー
    • PHP
  • エラーが出ます。myswl

    <?php $_POST['form']; $db_server = "mysql84.heteml.jp"; $db_username = "******"; $db_password = "******"; $mysql = mysql_connect($db_server, $db_username, $db_password); if ($mysql) { $table_name= "kensaku"; $mysql= ""; mysql_select_db($table_name, $mysql); mysql_set_charset("ECU"); $sql = "SELECT kai, tiiki, syoku, kei FROM kensaku" . "WHERE tiiki = '" . mysql_real_escape_string($tiiki) . "'"; $result = mysql_query($sql); if ($result) { $data_count = mysql_num_rows($result); for($i = 0; $i < $data_count; $i++) { $row = mysql_fetch_row($result); $j = 0; $data[$i]['kai'] = $row[$j++]; $data[$i]['tiiki'] = $row[$j++]; $data[$i]['syoku'] = $row[$j++]; $data[$i]['koyou'] = $row[$j++]; } mysql_free_result($result); } else { $error['top'] = "データベースのエラーです。" . mysql_error(); } mysql_close($mysql); } if (isset($error)) { echo $error['top']; } else { for($i = 0; $i < $data_count; $i++) { echo $data[$i]['kai'] . "|" . $data[$i]['tiiki'] . "|" . $data[$i]['syoku'] . "|" . $data[$i]['koyou'] . "<br />"; } } ?> 書き忘れとかあればおしえてください。

    • 締切済み
    • PHP
  • 検索結果を改行させるには??

    <br>検索結果<br> <?php if($num_rows== 0){ $message="該当するデータはありませんでした"; } else $message=$num_rows ."件ヒットしました"; echo $message; ?> <br><table border=1><tr><td>地域</td><td>職種</td><td>雇用形態</td><td>会社名</td><br> <?php $tr['tiiki'] = ''; $tr['syoku'] = ''; $tr['koyou'] = ''; $tr['kai'] = ''; while($row = mysql_fetch_array($result)){ $tr['tiiki'] .= "<td>".htmlspecialchars($row['tiiki'], ENT_QUOTES)."</td>"; $tr['syoku'] .= "<td>".htmlspecialchars($row['syoku'], ENT_QUOTES)."</td>"; $tr['koyou'] .= "<td>".htmlspecialchars($row['koyou'], ENT_QUOTES)."</td>"; $tr['kai'] .= "<td>".htmlspecialchars($row['kai'], ENT_QUOTES)."<td>"; } ?> <table> <tr><?php print $tr['tiiki'];?><?php print $tr['syoku'];?><?php print $tr['koyou'];?><?php print $tr['kai'];?></tr> </table> このソースだと 東京 神奈川 製造 建築 派遣 バイト 山田鞄 後藤組 のようにごちゃ混ぜになります。 「東京 製造 派遣 山田鞄 神奈川 建築 バイト 後藤組」 こんな感じに表示させるにはどうすれば良いですか??

    • 締切済み
    • PHP
  • チェックボックスによる検索

    こんばんは。お世話になっております。 PHPにてDB(MySQL)に登録されたデータをチェックボックスのみで検索するスクリプトを組んでおりますが、チェックボックスの数が多数あり、混乱してしまい、お力をお借りしたく投函させて頂きました。 上手く説明できるかどうか判りませんが… まず検索項目として、(複数チェック可) カテゴリ: □ドリンク □グルメ □ケーキ 年齢:   □20代  □30代 以上のようなフォームを用意しており、各チェックボックスのnameはDBのフィールドを同じ名前。valueは実際に登録されている数値を記述しています。 そこで、上記チェックボックスにいくつかのチェックを入れ、検索すると、それに該当するものだけを検索結果として一覧表示させたいのですが、現在、全ての項目に当てはまるものと一緒に、1つでも含んだデータまでもが表示されてしまいます。 お忙しい中恐縮ですが、お知恵を頂戴出来ればと考えております。 宜しくお願い致します。 //POSTで受け取ったデータを配列にし、 foreach($arr as $category){ $wherearr1[] = " ( category = '$category' )" } foreach($arr as $category){ $wherearr2[] = " ( age = '$age' )" } $wherestr1 = implode(" OR ",$wherearr1); $wherestr2 = implode(" OR ",$wherearr2); $sql = "select * from member where $wherestr AND $wherestr1 order by date desc"; $result = mysql_query($sql);

    • ベストアンサー
    • PHP
  • データベース内容が表示されない

    <br>検索結果<br> <?php if($num_rows== 0){ $message="該当するデータはありませんでした"; } else $message=$num_rows ."件ヒットしました"; echo $message; ?> <br> <?php while($row = mysql_fetch_array($result));?> <br> <?php echo"{$row['tiiki']}"; ?> <?php print"<td>{$row['syoku']}</td>"; ?> <?php print"<td>{$row['koyou']}</td>"; ?> <?php print"<td>{$row['kai']}</td>"; ?> <br> <a href="html.html">再検索</a> とすると、三件ヒットしました、などは表示されますが、肝心のtiiki,syoku等の情報が表示されず、空白のままです。記述ミス等ありますでしょうか??

    • ベストアンサー
    • PHP
  • phpのチェックボックスによる絞込みについて

    PHPとSQLでチェックボックスを使って、複数条件によるデータを抽出するというものを作っています。 データベースの検索対象となるカラムが、以下の様にbakunen,seibetsu,clubとあります。 ―――――――――――――――――――― gakunen   seibetsu   club ―――――――――――――――――――― 1年   男 サッカー 1年   男  野球 2年   女  バスケット 2年   男  野球 3年   女  美術 3年   男  バスケット 3年   女  バスケット チェックボックス側は、 学年:1年□ 2年□ 3年□ 性別:男□ 女□ 部活:サッカー□ 野球□ バスケット□ 美術□ としています。 phpのソースは以下の通りにしています。(一部抜粋) <?php $arr1 = array(); foreach($_POST['gakunen'] as $gakunen){ $arr1[] = "gakunen = '$gakunen'"; } $arr2 = array(); foreach($_POST['seibetsu'] as $seibetsu){ $arr2[] = "seibetsu = '$seibetsu'"; } $arr3 = array(); foreach($_POST['club'] as $club){ $arr3[] = "club = '$club'"; } $a = implode("or" , $arr1); $b = implode("or" , $arr2); $c = implode("or" , $arr3); $query = "SELECT * from fa1 where ($a) and ($b) and ($c)"; $result = mysql_query($query, $link); if (!$result) { echo 'データエラー'; } else { echo '<p>該当した検索結果:<br />'; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo h($row['gakunen']) . ' : ' . h($row['seibetsu']) . ' : ' . h($row['club']) . '<br />'; } echo '</p>'; } } ?> <form method="post" action=""> <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> 私が得たい結果は、例えば学年で1年のチェックのみあった場合は性別、部活問わず1年生全てのデータ。 1年と3年とサッカーにチェックがあった場合には性別を問わず1年と3年のサッカーに所属しているデータ。 全てのチェックが無かった場合は全データ表示という具合にしたいのです。 現状は3つのカラム全てに該当するチェックをして、そのデータを表示させることしかできません。gakunen,seibetsu,clubのどれか一つでもチェックを空けるとデータが出てこない状態です。 それはソースを読んでも理解できるのですが、ここからどう変えていいかわからない状態です。色々過去の質問を見たり本で勉強したりはしたのですが、私の理解が足らず問題解決には至っていません。 どのようにすれば良いのか、何卒ご教授をお願いいたします。

    • ベストアンサー
    • PHP
  • チェックボックスを使っての検索で

    PHP5とMySQL4.0.24を使用しています。 フィールド内にカンマ区切りでテキストが格納されてます。 +----+----------------------+ | ID | text | +----+----------------------+ |id01| 101,001,201,300 | |id02| 001,201,105 | |id03| 101,401,300,201,003 | | : | : | +----+----------------------+ これをチェックボックスで □001 □003 □101 □105 □201 … でOR検索をしたいのですが。 検索側のHTMLで <input type=checkbox name=chk[] value=001>001         : と書いて 処理側のPHPに $arraival = is_array(@$_POST['chk'])? implode(',',$_POST['chk']):'empty case'; $sql = "select * from shop_data where arraival like '%$arraival%'"; としてもうまく結果が得られません。 どの様に書けばよいのでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlのデータを変数に代入する方法

    php/mysql初心者です。かなりつたない内容になっているかもしれませんが、ご容赦ください。 過去ログで何のワードで検索したらいいかもわからなかったので質問投稿させていただきます。 データベースに入っている情報を変数に代入して POSTメソッドで送信したいと考えています。 DBからSELECTで特定の情報を取り出す ↓ 変数に代入する ↓ POSTで送信 このような流れで処理したいです。 [環境] PHP 5.2.17 MySQL 5.1.59 今書いているソースを一部抜粋します。 ------------ <?php if ($_SERVER['REQUEST_METHOD']=="POST") { require_once "Request.php"; $req =& new HTTP_Request("【送信先URL】"); $req->setMethod(HTTP_REQUEST_METHOD_POST); $connect = mysql_connect('localhost', '【DB名】', '【パスワード】'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('【データベース名】', $connect); if (!$result) { exit('データベースを選択できませんでした。'); } $db = mysql_query('SELECT username FROM userinfo where id=6', $connect); $u="$db"; $req->addPostData("username", $u); $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> ------------ ※idが6のusernameは「テスト太郎」になっています。 上記のPHPを実行すれば"userinfo"テーブル内の"id"が6の"username"が 送信されると思いましたが、実際は異なる内容が送信されます。 送信されるデータはusernameの内容ではなく "Resource data"となっています。 なぜ$uに代入した値がResource dataという内容になるのでしょうか。 初歩的な質問かもしれませんが、 ご教示の程よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • phpとmysqlでサイトのコンテンツを制作しているのですが...

    phpとmysqlでサイトのコンテンツを制作しているのですが、どうにも解決できないのでどなたかアドバイスをいただけないでしょうか? mysqlで $result = @mysql_query( 'drop tabl main_categories;' ); $sqlstr = "create table main_categories (id INTEGER primary key AUTO_INCREMENT,"."category TEXT)"; $result = mysql_query( $sqlstr ); としてテーブルを作ってこれをphpでデータを取得し格納したいのですがうまくいきません。取得データを $arr=mysql_fetch_array($result); で格納してforeachで出力?したいのですが。。。 foreach( $arr as $key => $value ) { if($value['category'] != ''){ array_push($categories_arr,$value['category']); array_push($catid_arr,$value['id']); } } どなたか教えてください!もう8hはまってます=3

    • 締切済み
    • PHP
  • 文字設定に関して

    教えて下さい。 自身の環境の文字設定が把握できておらず申し訳ありません。 以下のようにSQLを投げ、取得したデータを表示させようとしていますが、取得はできている ものの $tmp_kenmei を表示させようとしたところ、表示されません。 echo で中身を確認した際には、問題なくセットされていました。 また、where句で条件を指定しない場合は、問題なく取得できます。 文字設定か何かの問題かと思われますが、、、 何が原因でしょうか、、、教えて下さい。 よろしくお願いします。 《内容》 $tmp_kenmei = mb_convert_encoding($tmp_kenmei,"UTF-8","SJIS"); $con = mysql_connect("localhost", "root", "999999"); //データベースへ接続する if (!$con) { die('接続できませんでした: ' . mysql_error()); } $sql = "select kenmei from tbl_AAA where kenmei like '%" . $tmp_kenmei . "%'"; if (!mysql_select_db('db', $con)) { echo 'Could not select database'; exit; } $result = mysql_query($sql,$con); mysql_query("set names sjis"); if (!$result) { echo "DB Error, could not query the database\n"; echo 'MySQL Error: ' . mysql_error(); exit; } $row = mysql_num_rows($result); $count = 1; for($i=0;$i<$row;$i++) { $array = mysql_fetch_array($result); //件名 $tmp_kenmei[$count] = mb_convert_encoding($array[0],"SJIS","UTF-8"); echo mb_convert_encoding($array[0],"SJIS","UTF-8"); $count++; }

    • ベストアンサー
    • PHP