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

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

解決済みの質問

Dreamweaverで検索フォーム

はじめまして。
DreamWeaverを使ってPHP+MySQLでWEBアプリを作っております。
ログ表示部分まで完成して、検索用のhtmlフォームから条件を指定して検索結果のみをSELECTして表示させたいのですが、「and検索やor検索」ができなくて困っています。
他に似たような質問をされている方もいますが、書いたソースが異なっているように見受けたので、投稿させていただきました。
宜しくお願いします。


検索フォーム
<form method="post" action="view.php">
<input type="text" name="key">
<input type="submit" name="search" value="検索">
</form>

ログ表示PHP(view.php)
//検索キーワードの初期値を設定する
$colname_Recordset1 = "%";
if (isset($_POST['key'])) {
$colname_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['key'] : addslashes($_POST['key']);
}
$sql = "SELECT * FROM shoplist";
if(strlen($colname_Recordset1) > 0){
 $colname_Recordset2 = str_replace(" ", " ", colname_Recordset1);
 $array = explode(" ", $colname_Recordset2);
 $where = "where ";
 for($i=0; $i<count($array); $i++){
  $where .= "address like '%$array[$i]%'";
  if($i < count($array)-1){
   $where .= " and ";
  }
 }
}
mysql_select_db($database_connTest, $connTest);
$Recordset1 = mysql_query($sql.$where, $connTest) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

投稿日時 - 2006-09-05 18:04:21

QNo.2385896

すぐに回答ほしいです

質問者が選んだベストアンサー

がると申します。
こまか~いところで。
 $colname_Recordset2 = str_replace(" ", " ", colname_Recordset1);

 $colname_Recordset2 = str_replace(" ", " ", $colname_Recordset1);
(colname_Recordset1 の $が抜けてる)
とか、
$sql = "SELECT * FROM shoplist";
は、
$sql = "SELECT * FROM shoplist ";
にしないといけない(テーブル名の後ろにスペースを入れないと、WHEREがかぶってしまう)とかあるのですが。

1.
とりあえず、mysql_select_dbの直前でprint文などでSQLを出力して「意図しているSQLかどうか」チェックされるとよろしいかと思います。

2.
> 「and検索やor検索」ができなくて困っています。
は具体的にどんな風にこまってらっしゃるんでしょうか? 拝見しているとandは普通に出来ていると思うのですが。
上述に「別途、ORがかけるようなロジックを追加したい」という意味でしょうか?

3.
少々質問からはずれますが。上述のロジックには「SQLインジェクション」という脆弱性があります。
物凄く危険なので、対処されることを強くお勧めいたします。

また何かあればお気軽に質問などしていただければ、可能な範囲内で出来るだけ回答させていただきたいと思います。

投稿日時 - 2006-09-05 20:05:45

お礼

アドバイスありがとうございます。
>$sql = "SELECT * FROM shoplist ";
>にしないといけない(テーブル名の後ろにスペースを入れないと、>WHEREがかぶってしまう)とかあるのですが。

おっしゃる通りです。上記箇所の修正に後で気づいて直したら、一応動きました。
また、「and検索やor検索」のところは、表現が間違っていました。すみません。私がしたかったのは「and検索」です。

SQLインジェクションに関しては、自分でも感じていたので、ご指摘ありがとうございまた。

的確な指摘をいただき、大変感謝しております。

投稿日時 - 2006-09-05 23:19:00

ANo.1

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

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

回答(1)

あなたにオススメの質問