• 締切済み

たびたび申し訳ありません!大至急ご教授願います。

前回、PHPとMySQLの質問をさせていただきました(http://okwave.jp/qa/q7893483.html)。 pearについては、無事問題が解決し、PHPとMySQLの方も、何も表示されない状態から表示される状態まで進みました。ありがとうございました。 しかし、検索結果がうまく反映されず、MySQLにあるデータが表示されてしまいます。 私は、 $select_sql= <<<EOS SELECT * FROM moeinfo WHERE name like '%$search_key%' OR address like '%$search_ken%' EOS; の部分か、 $search_key = $_POST['search_key']; $search_ken = $_POST['search_ken']; の部分がいけないのではないかと考えているのですがいかがでしょうか? また初歩的なミスだとは思いますが、ご教授して頂けるとありがたく思います。よろしくお願いいたします。(画像醜いかもしれません!申し訳ないです。) Windows7 PHP 5.4.9 MySQL 5.5 Apach 2.2.22 phpMyAdmin 3.5.4 <検索フォーム> <html> <head> <title>PHPのテスト</title> <meta http-equiv="Content-Type" content="text/html; Charset=Shift_JIS"> </head> <center> <body bgcolor="#FFFFFF" text="#000000"> <font size="4">PHPのテスト</font> <form name="form1" method="post" action="list.php"> <table width="550" border="10" cellspacing="1" cellpadding="0"> <tr> <td><center>キーワード</td> <td><center><input type="text" name="search_key" size="55" maxlength="300"></td> </tr> <tr> <td><center>開催地</td> <td> <center> <select name="search_ken" > <option value="" selectd>----- 都道府県を選んでください -----</option> <option value="北海道">北海道</option> <option value=青森県">青森県</option> <option value="岩手県">岩手県</option> <option value="宮城県">宮城県</option>         ~~~省略~~~ <option value="宮崎県">宮崎県</option> <option value="鹿児島県">鹿児島県</option> <option value="沖縄県">沖縄県</option> </select> </td> </tr> </table> <br> <input type="submit" value="検 索"> </form> </body> </html> <検索結果> <html> <head> <title>萌えおこしイベントデータベース</title> </head> <body> <?php require_once("MDB2.php"); $dbUser = "root"; $dbPass = "im1907720"; $dbHost = "localhost"; $dbName = "moe_db"; $dbType = "mysql"; $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; $conn = MDB2::connect($dsn); if(MDB2::isError($conn)) { die($conn -> getMessage()); } $conn -> disconnect(); //POSTされたデータを受け取り、エスケープします。 $search_key = $_POST['search_key']; $search_ken = $_POST['search_ken']; //$select_sql=mysql_query('SELECT * FROM moeinfo WHERE name like '%$search_key%' OR address like '%$search_ken%''); $select_sql= <<<EOS SELECT * FROM moeinfo WHERE name like '%$search_key%' OR address like '%$search_ken%' EOS; $result=$conn->query($select_sql); if(MDB2::isError($result)) { die($result->getMessage()); } $count=$result->numRows(); print "検索結果は" .$count. "件です。<br>"; if($count> 0){ ?> <table width="1000" border="1" cellspacing="0" cellpadding="8"> <tbody> <tr><th>イベント名</th><th>開催地</th><th>サイトURL</th></tr> <?php while($rs=$result->fetchRow(MDB2_FETCHMODE_ASSOC)) { ?> <tr><td aling="center"> <?=$rs['name']?></td> <td><?=$rs['address']?></td> <td><?=$rs['url']?></td> </tr> <?php } ?> </tbody> </table> <?php } $result->free(); $conn->disconnect(); ?> </body> </html>

  • PHP
  • 回答数5
  • ありがとう数0

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.5

>Notice: Undefined index: search_key >Notice: Undefined index: search_ken >と言う具合にsearch_keyとsearch_kenが見つからないみたいなことが書いてありました。 Undefined indexなんだから、$_POST['search_key']がない($_POSTはある)ということですよね。 print_r($_POST); でも入れて、データチェックすればいいんじゃないですか?

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.4

>キーワードか開催地のどちらかで検索させたいということでORを >使ったのですが・・・もしかし、ここから間違っていたりしますか? つまりキーワードもしくは開催地のどちらかが「空文字列」の可能性があるということですよね?だとすれば組み立て方が間違っています。 SQL文が SELECT * FROM moeinfo WHERE name like '%ああああ%' OR address like '%岩手県%' であれば(キーワードがああああを含む)or(開催地が岩手県)ですから、1項目に該当がなくても岩手県開催のものがHitします。ところがキーワードが「空文字列」で SELECT * FROM moeinfo WHERE name like '%%' OR address like '%岩手県%' となると、キーワードが「あらゆる値」にマッチしてしまいます。入力された値しかwhereに書いてはいけません。 $where = array(); if ($search_key !== '') { $where[] = "(name like '%" . $search_key . "%')"; } if ($search_ken !== '') { $where[] = "(address like '%" . $search_ken . "%')"; } $select_sql = "SELECT * FROM moeinfo"; if (count($where) > 0) { $select_sql .= ' where ' . implode(' or ' , $where); } などとすべきです。 なお入力された値は下記のようにtrimして使ってください。 $search_key = trim($_POST['search_key']); $search_ken = trim($_POST['search_ken']); すでに他の方から指摘がありますが、せっかくMDB2を使っているのですからプレースホルダを使ってエスケープ処理をさせてやってください。今現在は有効なエスケープ処理が何も入っていませんよね。

kimikj8
質問者

補足

解答ありがとうございます。何度も何度も申し訳ありません。 解答を待っている間、いろいろと自分なりに調べて書き換えていたら、ずっと $search_key = $_POST['search_key']; $search_ken = $_POST['search_ken']; の部分でエラーが出てしまうようになってしまいました。 Notice: Undefined index: search_key Notice: Undefined index: search_ken と言う具合にsearch_keyとsearch_kenが見つからないみたいなことが書いてありました。 プレースホルダについては、いろいろとサイトを見たりと勉強をしているつもりなのですが、 いまいち理解できず、うまく書くことができません。 本当に何度も何度も申し訳ありません。よろしくお願いします。

回答No.3

すみません、コメントアウトされてる方のSQL見てました。 $select_sql をechoなどして出力された文字をmysqlに直接実行し、実行できるようにしましょう。

回答No.2

シングルクォート内で変数を使っても、変数値に展開しませんよ。 ちゃんと文字列結合するなりしましょう。 むしろエラーにならないのが不思議な感じがしますが・・・。 それに、search_key、search_kenがともに入力されてなかった時も 今の作りでは出ないと思います。 また、今ようなSQLの実行の仕方ではなく、プレースホルダ―を利用した プリペアドステートメントによる実行をした方が安全です。 http://pear.php.net/manual/ja/package.database.mdb2.intro-execute.php

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>検索結果がうまく反映されず、MySQLにあるデータが表示されてしまいます。 どう「うまく反映されない」のでしょうか? print $select_sql; としたSQL文をphpMyAdminで実行すれば、組み立てたSQL文のとおりの結果が返ると思います。 下記のようなテストスクリプトを書けば SELECT * FROM moeinfo WHERE name like '%ああああ%' OR address like '%岩手県%' のようなSQL文になっているのが確認できます。これではダメということですか? (テストスクリプト) <?php if ($_POST) { $search_key = $_POST['search_key']; $search_ken = $_POST['search_ken']; //$select_sql=mysql_query('SELECT * FROM moeinfo WHERE name like '%$search_key%' OR address like '%$search_ken%''); $select_sql= <<<EOS SELECT * FROM moeinfo WHERE name like '%$search_key%' OR address like '%$search_ken%' EOS; print $select_sql . "<br />"; } ?> <form name="form1" method="post" action=""> キーワード<input type="text" name="search_key" size="55" maxlength="300"> 開催地<select name="search_ken" > <option value="" selectd>----- 都道府県を選んでください -----</option> <option value="北海道">北海道</option> <option value=青森県">青森県</option> <option value="岩手県">岩手県</option> <option value="宮城県">宮城県</option> <option value="宮崎県">宮崎県</option> <option value="鹿児島県">鹿児島県</option> <option value="沖縄県">沖縄県</option> </select> <input type="submit" value="検 索"> </form> #まさか、OR としているのが「AND のつもり」とかいう #オチじゃないですよね?

kimikj8
質問者

補足

agunuz様、早速の解答ありがとうございます。 >#まさか、OR としているのが「AND のつもり」とかいう >#オチじゃないですよね? キーワードか開催地のどちらかで検索させたいということでORを使ったのですが・・・もしかし、ここから間違っていたりしますか? >どう「うまく反映されない」のでしょうか? 反映されないというのは、検索フォームで入力したキーワードor選択した開催地のどちらかで検索をかけて、ヒットしたモノだけを表示させたいのですが、開催地を北海道と選択しても、キーワードに第2回と入力しても、moe_db内のすべてのデータが表示させられてしまいます。 SELECT * FROM moeinfo WHERE name like '%ああああ%' OR address like '%岩手県%' これでは、nameはああああ、addressは岩手県でしか検索がヒットしないのではないでしょうか? 検索フォームの所で指定したキーワード、あるいは開催地をSELECT * FROM~の部分に展開させたいと考えていたのですが、無理なのでしょうか? 説明不足かもしれませんが、よろしくお願いします。

関連するQ&A

  • <大至急!>ご教授願います。

    MySQLで作ったお祭りのデータベースからデータを検索し、お祭りの名前と開催地だけを検索結果として表示させるというものを作っています。 しかし、エラーもなにも起きていないのに、検索しても結果が表示されません。検索結果の件数も反映されません。 PHPのプログラムの方にまだ問題があるのでしょうか?それともMySQLの方に問題があるのでしょうか? また、pearについても質問があります。pear listを実行すると問題なく見ることができるのですが、以下のような警告が表示されます。 PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_firebird. dll' - 指定されたモジュールが見つかりません。 in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_firebird.dll' - 指定されたモジュールが見つかりません。 in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_oci.dll' - 指定されたモジュールが見つかりません。 in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_oci.dll' - 指 定されたモジュールが見つかりません。 in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_pspell.dll' - 指定されたモジュールが見つかりません。 in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'ext\php_pspell.dll' - 指定 されたモジュールが見つかりません。 in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_sybase_ct.dll ' - 指定されたモジュールが見つかりません。 in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'ext\php_sybase_ct.dll' - 指定されたモジュールが見つかりません。 勉強中と言ってもを初心者同然なので、ご教授いただきたいです。よろしくお願いいたします。 Windows7 PHP 5.4.9 MySQL 5.5 Apach 2.2.22 phpMyAdmin 3.5.4 <html> <head> <title>PHPのテスト</title> </head> <body> <?php require_once("MDB2.php"); $dbUser = "root"; $dbPass = "im1907720"; $dbHost = "localhost"; $dbName = "moe_db"; $dbType = "mysql"; $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; $conn = MDB2::connect($dsn); if(MDB2::isError($conn)) { die($conn -> getMessage()); } $conn -> disconnect(); //POSTされたデータを受け取り、エスケープします。 $search_key=addslashes($_POST['search_key']); $search_ken=addslashes($_POST['search_ken']); $sql= <<<EOS SELECT * FROM moeinfo WHERE name like '%$search_key%' OR address like '%$search_ken%' EOS; /* if(substr(PHP_OS,0,3) == 'WIN') { $sql=mb_convert_encoding($sql, "SJIS", "EUC-JP"); } */ $result=$conn->query($sql); if(MDB2::isError($result)) { die($result->getMessage()); } $count=$result->numRows(); print "検索結果は" .$count. "件です。<br>"; if($count> 0){ ?> <table width="450" border="1" cellspacing="0" cellpadding="8"> <tbody> <tr><th>イベント名</th><th>開催地都道府県名</th></tr> <?php while($rs=$result->fetchRow(MDB2_FETCHMODE_ASSOC)) { if(substr(PHP_OS,0,3) == 'WIN') { $rs['name']=mb_convert_encoding($rs['name'], "EUC-JP", "SJIS"); $rs['address']=mb_convert_encoding($rs['address'], "EUC-JP", "SJIS"); } } ?> <tr><td aling="center"><?=$rs['name']?></td> <td><?=$rs['address']?></td> </tr> </tbody> </table> <?php } //mysql_free_result ($result) ; $result->free(); $conn->disconnect(); ?> </body> </html>

    • ベストアンサー
    • PHP
  • セレクトエリアの地名を確認画面で表示したい

    地域別に変化する送料をvalueの値でJavaScriptで求めています。 そのため確認ページおよびメール送信で数値が表示されてしまいます。 そこで、value はJavaScript用としてPHP用にtitle を考えましたが読み込まないようです。 読み込む方法はありますでしょうか --------------- <form name="fom_1" method="post" action="order.php"> <table summary="ご注文"> <tr> <th>住所</th> <td><select name="ken" language=javascript onChange="return ken_onclick()"> <option value="" selected>都道府県名</option> <option value="0" title="北海道">北海道</option> <option value="1" title="青森県">青森県</option></select><br> <input type="text" name="address2" size="40" /></td> </tr> </table> </form> <?php $fileNameBase="order"; 〈省略〉 function genAdminMailBody(){ ■県名: $_POST[ken] ■住所: $_POST[address2] ---- 送信日時: $mdate; 送信者情報: $_SERVER[REMOTE_ADDR] "; return $message; } ?> 確認用 html <tr> <th>住所</th> <td colspan="2"><?=$_POST[ken]?><input name="ken" type="hidden" value="<?=$_POST[ken]?>" /><br> <?=$_POST[address2]?><input name="address3" type="hidden" value="<?=$_POST[address2]?>" /></td> </tr> --------------- ■県名: $_POST[ken.title] <td colspan="2"><?=$_POST[ken.title]?><input name="ken.title" type="hidden" value="<?=$_POST[ken.title]?>" /><br>

    • ベストアンサー
    • PHP
  • PHP+MySQLの「データを検索して表示する」について

    名前を入れて検索すると、このように下記の様に表示されてしまいます。 Parse error: syntax error, unexpected '>' in C:\xampp\htdocs\list.php on line 52 検索フォームのsearch.phpは <HTML> <HEAD> <TITLE>検索テスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </HEAD> <BODY bgcolor="#FFFFFF"text="#000000"> <FONT size="4">検索テスト</FONT> <FORM name="form1" method="post" action="list.php"> 名前;<BR> <INPUT type="text" name="search_key"> <BR> <INPUT type="submit" value="検索"> </FORM> </BODY> </HTML> です。 データ検索のlist.phpは <HTML> <HEAD> <TITLE>検索テスト</TITLE> </HEAD> <BODY> <?php require_once("DB.php"); $dbUser = "sample"; $dbPass = "password"; $dbHost = "localhost"; $dbName = "sampledb"; $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; $conn = DB::connect($dsn); //接続にしっぱいしたらメッセージを表示して終了します。 if (DB::isError($conn)) { die($conn->getMessage()); } //POSTされたデータを受け取り、エスケープします。 $search_key =addslashes($_POST['search_key']); $sql = <<<EOS SELECT * FROM member WHERE last_name like'%$search_key%' OR first_name like'%$search_key%' EOS; if(preg_match("/Windows/",$_ENV["OS"])){ $sql = mb_convert_encoding($sql,"SJIS","EUC-JP"); } $result = $conn->query($sql); if (DB::isError($result)) { die($result->getMessage()); } $count = $result->numRows(); print"検索結果は".$count."件です。"<BR>"; if($count>0){ ?> <TABLE width="450" border="1" cellspacing="0" cellpadding="8"> <TBODY> <TR><TH>番号</TH><TH>氏</TH><TH>名</TH><TH>年齢</TH></TR> <?php while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) { if(preg_match("/Windows/",$_ENV["OS"])){ $rs['last_name'] = mb_convert_encoding( $rs['last_name'],"EUC-JP","SJIS"); $rs['first_name'] = mb_convert_encoding( $rs['first_name'],"EUC-JP","SJIS"); } ?> <TR><TD align="center"><?=$rs['id']?></TD> <TD><?=$rs['last_name']?></TD> <TD><?=$rs['first_name']?></TD> <TD align="center"><?=$rs['age']?></TD></TR> <?php } $result->free(); $conn->disconnect(); ?> </BODY> </HTML> です。 「速効!図解プログラミングPHP+MySQL」を見ながら、その通りに書いたのですが動きませんでした。 XAMPPを使って作っています。 長々と失礼しましたが、どうか解決策を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • form id、nameの番号振りなおし

    jqueryとphpにてフォームを作成しています。 フォームの追加、削除できるシステムを作っており、 フォームの追加はできたので、削除した際のinputのnameやidの番号を振り直しができず困っています。 商品1<br> <a href="javascript:void(0);" class="del" id="del_1">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][1][sir]" value="<?php echo $item[data][1][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][1][name]" value="<?php echo $item[data][1][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][1][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> <a href="javascript:void(0);" id="add">フォームの追加</a> としており、 「フォームの追加」をクリックすると 商品2<br> <a href="javascript:void(0);" class="del" id="del_2">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][2][sir]" value="<?php echo $item[data][2][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][2][name]" value="<?php echo $item[data][2][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> 商品3<br> <a href="javascript:void(0);" class="del" id="del_3">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][3][sir]" value="<?php echo $item[data][3][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][3][name]" value="<?php echo $item[data][3][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> ができるようにPHPにてSESSION管理をおこなっています。 追加はできたのですが、 上記のフォーム4つほど出した後に商品2を削除した場合の商品1、商品3、商品4の各nameの番号(item[data][*][sir]、item[data][*][name]、item[data][*][num]の*部分) 振りなおしができず困っています。 いくらやってもできないため、どなたかソースを教えていただけないでしょうか。 宜しくお願いいたします。

  • phpでのselect値の取得・表記について

    php初心者です。 自動計算する見積ページを独学で作っているのですが、どうしてもわからなかったので、質問させてください。 htmlページでセレクトタグから選択してもらった結果(値)を、phpページに送信し、phpページでvalueとname両方を別々の場所に表記するには、どのようなコードを書けば良いでしょうか? valueの値をphpページで表記させたり計算させる事はなんとか独学でもできたんですが、nameを表記させる事がどうしてもできませんでした。 お詳しい方、何卒ご教授ください。 途中までなんとかできたタグを下記に記載します。 <例>input.html → output.php (1)input.html (細かいタグは端折ります) <html> <body> <form action="output.php" method="post"> <tr> <th>生菓子</th> <td> <select name="goods1" onChange="keisan()" style="padding:5px; border:1px solid #dcdcdc;" /> <option value="0" name="未選択">お選びください</option> <option value="500" name="フルーツケーキ">フルーツケーキ</option> <option value="3000" name="チーズケーキ">チーズケーキ</option> <option value="5000" name="チョコレートケーキ">チョコレートケーキ</option> <option value="※別途見積" name="おまかせ">おまかせ</option> </td> </tr> <tr> <tr>焼き菓子</th> <td> <select name="goods2" onChange="keisan()" style="padding:5px; border:1px solid #dcdcdc;" /> <option value="0" name="未選択">お選びください</option> <option value="500" name="クッキー">クッキー</option> <option value="3000" name="パウンドケーキ">パウンドケーキ</option> <option value="5000" name="パイ">パイ</option> <option value="※別途見積" name="おまかせ">おまかせ</option> </td> </tr> <tr> <th><input type="submit" value="submit" /></th> </tr> </form> </body> </html> ↓上記で選択してもらった値を下記のoutput.phpにsubmit。 (2)output.php (細かいタグは端折ります) <html> <body> <tr> <th>生菓子</th> <td>ここに選択されたnameの値を表記したい!</td> <td><?php echo htmlspecialchars($_POST["goods1"]); ?></td> </tr> <tr> <th>焼き菓子</th> <td>ここに選択されたnameの値を表記したい!</td> <td><?php echo htmlspecialchars($_POST["goods2"]); ?></td> </tr> <tr> <td colspan="2">Total </td> <td><?php echo htmlspecialchars( $_POST["goods1"] + $_POST["goods2"]); ?><td> </tr> </body> </html> 以上。 ぜひ、ぜひぜひご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • nl2br()の記入例

    PHPを始めたばかりで行きづまってしまいました。 MySQLを利用したデータの出し入れなのですが、テキストエリア内の文章の改行についてです。 input.php(入力)⇒confirm.php(確認)⇒end.php(完了) という流れなのですが、input.phpで入力した内容をconfirm.phpで確認すると文章の改行がされてなかったので色々検索した結果、nl2br()使うというところまでは解ったのですが、実際どのように書くのか解りません・・・。 例えばこのようなソースの場合、どのような記述をすればいいのでしょうか? <html> <head> <title>薬屋さん</title> </head> <body> <?php $con = mysql_connect('aaa', 'bbb', 'ccc'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('ddd', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SELECT * FROM kusriya', $con); echo "<dl>\n"; while ($data = mysql_fetch_array($result)) { $id = $data['id']; $shop = htmlspecialchars($data['shop']); $address = htmlspecialchars($data['address']); $phone = htmlspecialchars($data['phone']); $comment = htmlspecialchars($data['comment']); $navi = htmlspecialchars($data['navi']); $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> <form method="post" action="test_confirm.php"> <table> <tr> <th>ID</th><td><input type="text" name="id" /></td> </tr> <tr> <th>店名</th><td><input type="text" name="shop" /></td> </tr> <tr> <th>住所</th><td><input type="text" name="address" /></td> </tr> <tr> <th>電話</th><td><input type="text" name="phone" /></td> </tr> <tr> <th>コメント</th><td><textarea name="comment" cols="80%" rows="5"></textarea></td> </tr> <tr> <th>ルート</th><td><textarea name="navi" cols="80%" rows="5"></textarea></td> </tr> </table> <input type="submit" value="送信" /> <input type="reset" value="リセット" /> </form></body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • PHPで検索画面を作成していますが上手に動きません

    PHP超!初心者です。よろしくお願いいたします。 行いたい事は、 HTML上にあるドロップダウンリストから項目を選択し実行すると、一致する項目をPHPMysql DBより抽出し表形式で表示したい。です。 PHPmysql→ ユーザー名:user パスワード:passwd データベース名:dbnameテーブル名:table_nm 検索画面→kensaku.html 検索結果→kensaku.php ●kensaku.html <html> <head> <title>検索</title> </head> <body> <br> <h1>種類</h1> <br> <form action = "http://localhost/lesson/kensaku.php" method="POST"> <p> 種類:<br /> <select name="betu" style="width:200" id="search_process"> <option value="" selected="selected">一覧から選択</option> <option value="あ">あ</option> <option value="い">い</option> <option value="う">う</option> <option value="え">え</option> <option value="お">お</option> </select></p> <p>    <input type="submit" name="exec" value="検索"> </form> </body> </html> ●kensaku.php <html> <body> <? if (!$con = mysql_connect("localhost", "user", "passwd")) {    print "接続エラー" ;    exit ; } mysql_select_db("dbname", $con) $sql = "select sid, name, price, betu, area, memo from table_nm" ; $sql . = "where betu like '$betu'" ; if (!$res = mysql_query($sql)) {    print "SQLエラー<BR>" ;    exit } <table border=1> <tr> <th>NO</th><th>名前</th><th>金額</th><th>種別</th> /tr> while($row = mysql_fetch_array($res)){    <tr>    <td><?php ($row['sid']); ?></td>    <td><?php ($row['name']); ?></td>    <td><?php ($row['price']); ?></td>    <td><?php ($row['betu']); ?></td>    </tr> } </table> </body> </html> 説明不足の部分がありましたら、申し訳ございません。 よろしくご教授お願いいたします。

    • ベストアンサー
    • PHP
  • php mysql でチェックボックスによる検索

    お世話になります。 PHPにてDB(MySQL)に登録されたデータをチェックボックスで検索するスクリプトを組んでおります。 検索項目として(複数チェック可) 住所: □東京都 □神奈川県 □埼玉県 性別: □男   □女 とあります。 例えば東京都、神奈川県、男にチェックを入れた場合、 東京都+男、神奈川県+男のデータを取り出したいのですが、二つチェックを入れた場合、データが見つからないとなってしまします。 同じような質問は全て目を通して試してみたのですが、なかなかうまくいかない為、お力をかしていただければと思います。 スクリプトは以下となっております。 ------------------------------------------------------------- input.php <html> <head> <title>PHP SEARCH</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body bgcolor="#FFFFFF" text="#000000"> <form action="search.php" method="POST" > <form> <b>住所</b><br> <input type="checkbox" name="pref[]" value="東京都">東京都<br> <input type="checkbox" name="pref[]" value="神奈川県">神奈川県<br> <input type="checkbox" name="pref[]" value="埼玉県">埼玉県<br> <b>性別</b><br> <input type="checkbox" name="sex[]" value="男">男<br> <input type="checkbox" name="sex[]" value="女">女<br> <br> <input type="submit" value="検索開始"> </form> </body> </html> ------------------------------------------------------- search.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>サーチ</title> </head> <body> <?php $pear_path = 'c:/xampp/php/PEAR'; set_include_path(get_include_path() . PATH_SEPARATOR . $pear_path); require_once('MDB2.php'); // DSNの設定 $dsn = array( 'phptype' => 'mysql', 'username' => 'root', 'password' => '', 'hostspec' => 'localhost', 'database' => 'test01', ); // オプションの設定 $options = array( 'portability' => MDB2_PORTABILITY_ALL, ); // 接続 $mdb2 =& MDB2::connect($dsn, $options); if (PEAR::isError($mdb2)) { exit('データベースへの接続に失敗しました'); } // 初期化 $sql = 'set names utf8'; $res =& $mdb2->query($sql); $mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC); // 都道府県 if(isset($_POST['pref'])){ $a = implode(' OR ',$_POST['pref']); } // 性別 if(isset($_POST['sex'])){ $b = implode(' OR ',$_POST['sex']); } // 検索 $sql = "select * from sample where pref in ('$a') AND sex in ('$b')"; $result = $mdb2->query($sql); if (PEAR::isError(result)) { exit('接続に失敗しました'); } $num_rows = $result->numRows(); if($num_rows == 0){ exit('検索結果はありませんでした'); }else{ print $result->numRows()."件のデータがあります"; } print("<table border=\"1\">\n"); print("<tr>"); print("<th>id</th><th>性別</th><th>都道府県</th>"); print("</tr>"); while($row = $result->fetchRow()){ print("<tr>\n"); print("<td>" . $row['id'] . "</td>"); print("<td>" . $row['pref']. "</td>"); print("<td>" . $row['sex']. "</td>"); print("</tr>\n"); } // 接続を切る $mdb2->disconnect(); ?> </body> </html> 何卒よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでMySQLを使った検索のプログラム

    「たったコレだけでPHPプログラミングが理解できる本」を参考にPHPでプログラムを書いていまして、 ビジネスホテルの検索機能をチェックボックス機能を余分につけて検索できないか試したのですが、 チェックボックスにチェックを入れると全く検索できず他のテキストボックスに入力するだけなら検索できます。 なんとかチェックボックスを有効にできないかいろいろなサイトを調べたり本を読んだりしましたが解決策が見つかりません。 いろいろな機能に対応できるようなプログラムを組みたいと思ったのでかなりの初心者で大変恐縮ですが、どなたかご教授お願いできないかと思っております。 あと参考になるサイトがございましたら、教えていただきたいと思っております。 何卒よろしくお願い致します。 前半省略 <form name="search_form" action="" method="post" > <input type="hidden" name="cmd" value="search" /> <table> <tr> <th>物件種別</th> <td> <input type="checkbox" name="kodawari_key[]" value="温泉" <?php if( $_REQUEST["kodawari_key"] == "温泉" ){ print( 'checked' ); } ?>/> 温泉 <input type="checkbox" name="kodawari_key[]" value="ランチ" <?php if( $_REQUEST["kodawari_key"] == "ランチ" ){ print( 'checked' ); } ?>/> ランチ<br /> <input type="checkbox" name="kodawari_key[]" value="ディナー" <?php if( $_REQUEST["kodawari_key"] == "ディナー" ){ print( 'checked' ); } ?>/> ディナー</td> </tr> <tr> <th>価格帯</th> <td> <input type="text" name="price_min" value="<?php print( htmlspecialchars( $_REQUEST["price_min"] ,ENT_QUOTES ) ) ?>" size="8"> ~ <input type="text" name="price_max" value="<?php print( htmlspecialchars( $_REQUEST["price_max"] ,ENT_QUOTES ) ) ?>" size="8"><br /> </td> </tr> <tr> <th>住所</th> <td><input type="text" name="address" value="<?php print( htmlspecialchars( $_REQUEST["address"] ,ENT_QUOTES ) ) ?>" size="20"></td> </tr> </table> <input type="submit" value="検索" class="Btn-gray button"> </form> <p>&nbsp;</p> <?php if( $_REQUEST["cmd"] == "search" ){ $pdo = new PDO("mysql:host=localhost; dbname=hotel_reservation; charset=utf8", "koredake", "koredake123", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $sql = "select * from hotels where 1 = 1 "; $condition = array(); if( !empty( $_POST["kodawari_key"] )){ $sql = $sql . " and kodawari_key = :kodawari_key"; $condition["kodawari_key"] = $_REQUEST["kodawari_key"]; } if( !empty( $_REQUEST["price_min"] ) ){ $sql = $sql . " and price >= :price_min "; $condition[":price_min"] = $_REQUEST["price_min"]; } if( !empty( $_REQUEST["price_max"] ) ){ $sql = $sql . " and price <= :price_max "; $condition[":price_max"] = $_REQUEST["price_max"]; } if( !empty( $_REQUEST["address"] ) ){ $sql = $sql . " and ( pref like :pref or city like :city or address like :address ) "; $condition[":pref"] = "%{$_REQUEST["address"]}%"; $condition[":city"] = "%{$_REQUEST["address"]}%"; $condition[":address"] = "%{$_REQUEST["address"]}%"; } $statement = $pdo->prepare( $sql ); $statement->execute( $condition ); $results = $statement->fetchAll(); ?> <table border="1"> <caption>検索結果</caption> <tr> <th></th> <th>ホテル名</th> <th>宿泊料金</th> <th>住所</th> </tr> <?php foreach( $results as $result ){ ?> <tr> <td><img src="hotel/<?php print( htmlspecialchars( $result["id"], ENT_QUOTES )); ?>.png" /></td> <td><?php print( htmlspecialchars( $result["hotel_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $result["price"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $result["pref"], ENT_QUOTES ) ); ?> <?php print( htmlspecialchars( $result["city"], ENT_QUOTES ) ); ?> <?php print( htmlspecialchars( $result["address"], ENT_QUOTES ) ); ?> </td> </tr> <?php } } ?> </table> </div> </body> </html>

    • ベストアンサー
    • MySQL
  • 【PHP】smartyとPHPの記述違いとメリット

    smartyというのが、デザインとプログラムを分けれるというので 使ってみたのですが、 //--------------------smarty--------------------- <table border=1> <tr> <th>{$table.title}</th> </tr> {foreach item=result from=$data_list} <tr> <td>{$result[0]}</td> </tr> {/foreach} </table> と、smarty用の記述をHTML内にいろいろ書かなければならず //------------------php---------------------- <table border=1> <tr> <th><?=$table[title] ?></th> </tr> <?php foreach($data_list as $key => $value){ ?> <tr> <td><?= $value ?></td> </tr> <?php } ?> </table> とHTML内にPHPをいろいろ書くのと  あまり大差無い気がして どういう点がよいのがイマイチ分かりません。 smartyは 使う メリットは どういうものがあるのでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう