電子書籍の厳選無料作品が豊富!

mysqlで検索フォームを作成しています
入力してデータに該当したら検索結果が出るのですが
該当者がいないときはテーブルの表のみ出力してしまう
該当者なしと入力フォーム側に表示したいです
また ''''''を入力するとSQLになるのですが
mysql_real_escapeを使えば出なくなります
どうしたらいいですか

<html>
<body>
<?php
//データベースに接続
if (!$con = mysql_connect("localhost", "root", "admin")) {
echo "接続エラー" ;
exit ;
}

//データベースを選択
if (!mysql_select_db("db_test", $con)) {
echo "データベース選択エラー" ;
exit ;
}

//フォームで送られてきた条件を元にSELECT文を作成
$sql = "select * from tbl_test where (氏名 LIKE '%{$_GET['name']}%') or (住所 LIKE '%{$_GET['name']}%')";

//SELECT文を実行
if (!$res = mysql_query($sql)) {
echo "SQLエラー<BR>" ;
exit ;
}else{


}
//検索結果表示
echo "<table border=1>" ;
echo "<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
<th>操作</th>
</tr>" ;
while($row = mysql_fetch_array($res))
{
$ID = htmlspecialchars($row['番号']);
$NAME = htmlspecialchars($row['氏名']);
$ADDR = htmlspecialchars($row['住所']);
echo "<tr>
<td>$ID</td>
<td>$NAME</td>
<td>$ADDR</td>
<td><a href='edit.php?番号=$ID'>修正</a>
<a href='delete.php?番号=$ID'>削除</a></td></tr>";
if ($_GET) { // データがGETされていたら
$event = isset($_GET['event']) ? $_GET['event'] : ''; // 取得

}
}
echo "</table>" ;

//結果セットの開放
mysql_free_result ($res) ;

//データベースから切断
mysql_close($con) ;

?>

</body>
</html>

A 回答 (2件)

>name欄にヒットしない文字があるときは該当者なし


iのついていないmysql関数はすでに利用禁止にちかい状態なので
利用するならもう誰もフォローしてくれない前提で
すべて自己解決するしかありません。
ですのでmysql関数の利用を前提の質問は公の掲示板ではしないでください

PDOでやるならこんな感じ?

<?PHP
$dsn = 'mysql:host=localhost; dbname=test';
$pdo = new PDO($dsn,$user,$password);
$name=isset($_GET['name'])?$_GET['name']:"";
$sql ="select * from tbl where ";
$sql.="`氏名` like concat('%',?,'%') ";
$sql.="or `住所` like concat('%',?,'%') ";
$stmt = $pdo->prepare( $sql);
$stmt->execute(array($name,$name));
$count = $stmt->rowCount();

if($count>0){
print "<table border=1>" ;
print "<tr>";
print "<th>番号</th>";
print "<th>氏名</th>";
print "<th>住所</th>";
print "</tr>";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print "<tr>";
print htmlspecialchars($row["番号"]);
print htmlspecialchars($row["氏名"]);
print htmlspecialchars($row["住所"]);
print "</tr>";
};
print "</table>" ;
}else{
print "no hit!";
}
?>

この回答への補足

すいません
出来ました
抽出したデータがテーブルになっていないので修正します
tableのところですよね?

補足日時:2014/04/30 13:11
    • good
    • 0
この回答へのお礼

ありがとうございます
わかりました
PDOにしてやります
指摘いただいたソースにしたらすべてno hitになります
どこがいけないのでしょうか
すいません

お礼日時:2014/04/30 13:06

ごめん、日本語としてわからない



>入力してデータに該当したら検索結果が出るのですが
>該当者がいないときはテーブルの表のみ出力してしまう

ヒットしないときはテーブルのヘッダー部分を表示したくないということ?
であれば戻り値が1以上あるときはテーブルを書いて、そうでなければ
書かないという分岐をいれるだけでは?

>該当者なしと入力フォーム側に表示したいです

>また ''''''を入力するとSQLになるのですが
>mysql_real_escapeを使えば出なくなります

まったく意味がわかりません

たぶん以下のどちらかだと思うんですが
→name欄になにも入れないときにはなにもヒットしないようにしたい
→name欄にヒットしない文字があるときは表示しないようにしたい

どっちでしょうかねぇ?


それと書くたびにライブラリを変えるのはもうやめようよ
どれでもできるんであれえばPDOで統一して例示して

この回答への補足

すいません
'と入力するとSQLエラーです

補足日時:2014/04/30 10:48
    • good
    • 0
この回答へのお礼

返事遅くなり申し訳ありません
name欄にヒットしない文字があるときは該当者なしと表示したいです
どうすればいいですか?

PDOは少しややこしくって

お礼日時:2014/04/30 09:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!