0

検索ボックスを試しています。次のようなフォームを作成しました。

<form method="post" action="search.php">
 <select name="purpose">
 <option value="" selected="selected">-any-</option>
 <option value="For Sale">For Sale</option>
 <option value="For Rent">For Rent</option>
 </select>

 <select name="type">
 <option value="" selected="selected">-any-</option>
 <option value="Bungalow">Bungalow</option>
 <option value="Apartment">Apartment</option>
 </select>

 <select name="location">
 <option value="" selected="selected">-any-</option>
 <option value="Norway">Norway</option>
 <option value="Itley">Itley</option>
    </select>
 <input type="submit" value="Search">
</form>

Search.php

これらのクエリを試していますが、問題が発生しています:

$purpose=$_POST['purpose'];
$type=$_POST['type'];
$location=$_POST['location'];

AND クエリを次のように配置すると、次のようになります。

SELECT * FROM test WHERE purpose='$purpose' AND location='$location' AND type='$type'

その後、結果を1つずつフィルタリングせず、空白に表示されます。

OR次のようなクエリを入力した場合:

SELECT * FROM test WHERE purpose='$purpose' OR location='$location' OR type='$type'

次に、混合結果をフィルタリングします。

すべてが選択されている場合はフィルター(目的>>タイプ>>場所)が必要であり、1つが選択されている場合はこれでフィルター処理されますが、正確な結果が表示されます

Result not found!

編集コメントで行われた更新の追加:

私はこのようにやっていますが、エラーが表示されます:

$qry = "SELECT * FROM test WHERE 1=1";

if($purpose!="")
  $qry .= " AND purpose='$purpose'";

if($location!="")
  $qry .= " AND location='$location'";

if($type!="")
  $qry .= " AND type='$type'";

while ($row = mysql_fetch_array($sql)) 

echo $row['purpose']; 

echo $row['location']; 

echo $row['type']; 

一致しない場合は、表示結果が見つからない場合、すべておよび1つずつフィルタリングします。

4

2 に答える 2

2

変数を取得した後にそれを入れます:

$sql = array();

if (!empty($purpose)) {
    $sql[] = "purpose='$purpose'";
}

if (!empty($type)) {
    $sql[] = "type='$type'";
}

if (!empty($location)) {
    $sql[] = "location='$location'";
}

$sql = implode(' AND ', $sql);
$sql = "SELECT * FROM test" . (!empty($sql)?: " WHERE " . $sql: '');

編集:あなたのコメントを見た後

まず、mysql_connect 関数を使用してデータベースに接続する必要があります。たとえば、次のコードがあるとします。

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');

if (!$link) {
    die('Could not connect: ' . mysql_error());
}

$link var には、mysql ハンドルがあります。このコードは、mysql 接続を使用するすべてのページの最初に配置する必要があります。SQL 文 (私が最初に書いたコードでは $sql 変数) を取得したら、次の後にこれを使用します。

$result = mysql_query($sql);

if (mysql_num_rows($result) === 0) {
    echo 'Result not found';
}

while ($row = mysql_fetch_array($result)) {
   echo $row['purpose'] . '<br/>';
   echo $row['location'] . '<br/>';
   echo $row['type'];
}
于 2012-08-07T10:20:08.830 に答える
0
$qry = "SELECT * FROM test WHERE 1=1";

if($purpose!="")
  $qry .= " AND purpose='$purpose'";

if($location!="")
  $qry .= " AND location='$location'";

if($type!="")
  $qry .= " AND type='$type'";
于 2012-08-07T10:16:33.937 に答える