- 締切済み
phpとMysQLの連携がうまくいきません
現在phpとmysqlを連携させて、phpのフォームから文字を入力してmysqlのデータベース上からマッチした検索結果を表示するプログラムを作っているのですがなかなかうまくいきません・・・ お手数ですが詳しい方解答お願いいたします。 <html> <head> <title>PHP SEARCH RESULT</title> <meta http-equiv="Content-type" content="text/html;charset=utf-8"> </head> <body> <? $debug = false; //DB接続 mysql_connect("localhost","root","c0106426"); mysql_select_db("network"); if($debug) print_r($HTTP_POST_VARS); //エラーチェック //リクエストメソッドチェック if($REQUEST_METHOD != "POST") { print "Error: invalid method"; exit(); } //クエリ生成 $query = "SELECT * FROM yougo "; //検索条件生成 //用語 if(!empty($yougo)) { $yougo = yougo($yougo); $where .= "yougo REGEXP '$yougo' && "; } if(!empty($where)) { $where = substr($where, 0, -4); $where = "WHERE " . $where; } $result = mysql_query($query); $num_rows = mysql_num_rows($result); if($num_rows == 0) $message = "該当するデータはありませんでした"; else $message = $num_rows . "件ヒットしました"; ?> 検索結果<br> <?=$message?> <table border=1> <tr><td>用語</td><td>説明</td><td>講義回数</td></tr> <? while($row = mysql_fetch_assoc($result)): ?> <tr><td><?=$row[yougo]?></td><td><?=$row[sestumei]?></td><td><?=$row[kougi]?></td></tr> <? endwhile; ?> </table> <a href="search.html">再検索</a> </body> </html> このようなプログラムを書いているのですがうまく動作しません。。。 フォームからはyougoという形でpostで値をこのphpプログラムに渡しています。 データベースはnetworkという名前で テーブルはyougoid,yougo,sestumei,yomi,kougi,kai というテーブルがありまして yougoの文字を文字入力で検索して yougo,sestumei,kougi内の内容をテーブルで表示させたいのですが、 どうしてもうまくいきません。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- honoka-cha
- ベストアンサー率54% (40/73)
(1)phpとmySqlのバージョン、OSなど最低限の環境情報は提示したほうが良いです。 (2)24行目付近、$yougo = yougo($yougo);ってどういう意味でしょう?yougo()という関数がどこかここでないところに存在するんでしょうか。薄学のせいか私には文法エラーに見えます。 (3)32行目付近、$result = mysql_query($query);ってところ。$queryと$whereをドッキングさせる必要があります。そうでないと、where句がないままなので全件取得してしまいます。 (4)if($num_rows == 0) $message = "該当するデータはありませんでした";の場合、 while($row = mysql_fetch_assoc($result)): のところは通らないようにしたほうが良いです。エラーか警告メッセージが出るかもしれないので。 まずは(3)から対処してみたらどうでしょう。
- t140
- ベストアンサー率39% (59/150)
とりあえず下記を変更することをお奨めします。 <? ⇒ <?php <?= ⇒ <?php echo $REQUEST_METHOD ⇒ $_SERVER['REQUEST_METHOD']
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 No.1の方も仰っておりますが細かい仕様がわからない以上、うまくいかないではなくこんな結果になっています。 という情報が欲しいです。 ぱっと見た感じですがSQLを発行している部分の$queryですが全件取得のSQLしか発行されない気がします。 $query = "SELECT * FROM yougo "; 以上の値がそのまま使われており途中の//用語という部分で処理した内容が何も反映されていないように見えます。 $result = mysql_query($query); の手前で echo $query; echo "<br>"; echo $where; echo "<br>"; echo $yougo; としてみて変数の内容を見てみてください。 ご希望のSQLになるような文字列になっているかご確認ください。
補足
たびたび申し訳ありませんが補足いたします 最終的なクエリ文はSELECT * FROM yougo が返ってきているようでした。
ちょっと手間なので精査してませんが、 最終的に生成されるクエリ文を記載。 mysql_error()でmysqlでエラー文がでるか、でる場合はそれを記載。 $resultはちゃんとリソースが返ってきてるか。 この辺を補足すれば、皆さん答えやすいのではないでしょうか。
補足
みなさんありがとうございます。 ご指摘くださいましたところを直したら多少は改善が見られました。 $result = mysql_query($query); の手前で echo $query; echo "<br>"; echo $where; echo "<br>"; echo $yougo; をいれたところ何も返ってきません・・・ また検索した文字に関わらず 検索結果がデータベース内のすべてのデータが引き出されてしまいます・・・ またそのデータも文字化けしている状態です。 検索結果が返ってきているのでresultには値は返っているかと思います。 ただデータベース内全部の値がヒットしてしまいました。 お手数ですが解答お願いいたします。