0

私はphpで検索ボックスを試しています.htmlフォームには以下のような3つのオプションがあります

  1. 目的
  2. タイプ
  3. 位置

ユーザーが目的データを目的別にフィルタリングする場合、タイプの場合はタイプごとにフィルタリングし、場所の場合は場所ごとにフィルタリングし、すべてのカテゴリを選択した場合は場所のタイプの目的のようにフィルタリングし、一致しない場合は表示します (結果が見つかりません!)

これらのphpクエリを使用しましたが、取得に失敗しました

$res="SELECT * FROM test WHERE purpose like %$_Post['purpose']% AND type like %$_Post['type']% AND location like %$_Post['location']%";

while ($row = mysql_fetch_array($res))
{

    echo $row['purpose']."</br>";

    echo $row['type']."<br>";

    echo $row['location'];
    }

しかし、このクエリは 1 つずつフィルター処理しません。AND の代わりに OR を使用し、結果が混在している場合にすべてが選択されているかどうかを示しますが、場所のタイプに目的が必要です

見つからない場合は、Result not found を表示します

完全なクエリを書いてください

ありがとう

4

2 に答える 2

1
  1. パラメータがエスケープされていません。これは非常に危険です
  2. 大文字と小文字は区別され$_POSTません。$_Post

コードが安全であることを確認する必要があります。エスケープせずに値を使用しないでください。

$purpose  = mysqli_real_escape_string($dbc, $_POST['purpose' ]);
$type     = mysqli_real_escape_string($dbc, $_POST['type'    ]);
$location = mysqli_real_escape_string($dbc, $_POST['location']);

編集:@Martinのは正しいので、私のクエリを削除しましたが、これはそうではありませんでした。

于 2012-08-09T08:15:40.933 に答える
0
$dbc = mysqli_connect('host', 'user', 'password', 'database') or die('Error connecting to MySQL server');

if (isset($_POST['purpose'])) $where.= " AND purpose LIKE %". mysqli_real_escape_string($dbc, $_POST['purpose'])."%";
if (isset($_POST['type'])) $where.= " AND type LIKE %". mysqli_real_escape_string($dbc, $_POST['type'])."%";
if (isset($_POST['location'])) $where.= " AND location LIKE %". mysqli_real_escape_string($dbc, $_POST['location'])."%";

$res="SELECT * FROM test
      WHERE 1=1 
      ". ($where? $where: "");

while ($row = mysql_fetch_array($res)) {
    echo $row['purpose']."</br>";
    echo $row['type']."<br>";
    echo $row['location'];
}
于 2012-08-09T08:15:43.137 に答える