みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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内の内容をテーブルで表示させたいのですが、
どうしてもうまくいきません。
よろしくお願いいたします。

投稿日時 - 2010-11-18 00:11:49

QNo.6326767

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

(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)から対処してみたらどうでしょう。

投稿日時 - 2010-11-20 09:31:29

ANo.3

とりあえず下記を変更することをお奨めします。

<? ⇒ <?php
<?= ⇒ <?php echo
$REQUEST_METHOD ⇒ $_SERVER['REQUEST_METHOD']

投稿日時 - 2010-11-18 10:11:48

補足

みなさんありがとうございます。
ご指摘くださいましたところを直したら多少は改善が見られました。


$result = mysql_query($query);
の手前で
echo $query;
echo "<br>";
echo $where;
echo "<br>";
echo $yougo;

をいれたところ何も返ってきません・・・

また検索した文字に関わらず
検索結果がデータベース内のすべてのデータが引き出されてしまいます・・・

またそのデータも文字化けしている状態です。


検索結果が返ってきているのでresultには値は返っているかと思います。
ただデータベース内全部の値がヒットしてしまいました。

お手数ですが解答お願いいたします。

投稿日時 - 2010-11-18 11:20:48

ANo.2

こんにちは。

No.1の方も仰っておりますが細かい仕様がわからない以上、うまくいかないではなくこんな結果になっています。
という情報が欲しいです。

ぱっと見た感じですがSQLを発行している部分の$queryですが全件取得のSQLしか発行されない気がします。
$query = "SELECT * FROM yougo ";
以上の値がそのまま使われており途中の//用語という部分で処理した内容が何も反映されていないように見えます。

$result = mysql_query($query);
の手前で
echo $query;
echo "<br>";
echo $where;
echo "<br>";
echo $yougo;
としてみて変数の内容を見てみてください。
ご希望のSQLになるような文字列になっているかご確認ください。

投稿日時 - 2010-11-18 07:15:42

補足

たびたび申し訳ありませんが補足いたします

最終的なクエリ文はSELECT * FROM yougo が返ってきているようでした。

投稿日時 - 2010-11-18 11:47:46

ちょっと手間なので精査してませんが、

最終的に生成されるクエリ文を記載。
mysql_error()でmysqlでエラー文がでるか、でる場合はそれを記載。
$resultはちゃんとリソースが返ってきてるか。

この辺を補足すれば、皆さん答えやすいのではないでしょうか。

投稿日時 - 2010-11-18 02:47:05

あなたにオススメの質問