2013-03-12 54 views
-1

我有一個搜索表單,您可以在其中搜索屬性。現在它只有在你填寫所有字段時纔有效。但是,如果我想將空白處留空並只搜索其餘部分,或者只搜索一個字段並將其餘部分留空,我該怎麼辦?在searchform中留下一個空白字段

這是查詢我今天的代碼:提前

$sql = mysql_query(" 
SELECT * 
FROM property 
WHERE (rooms LIKE '%$room%' OR '$room' = '') 
AND (status LIKE '%$status%' OR '$status' = '') 
AND (type LIKE '%$type%' OR '$type' = '') 
AND (adress LIKE '%$county%' OR '$county' = '') 
AND (area LIKE '%$area%' OR '$area' = '') 
AND (price BETWEEN '$min' AND '$max') 
") or die(mysql_error()); 

謝謝!

也許你應該注意,所有的字段都是選擇字段,而不是文本字段。

+1

請使用PDO或Mysqli,這個查詢很容易被sql注入。 Mysql_ *函數也被棄用。要回答您的問題,您需要爲傳遞給您的查詢的變量設置默認值,或者僅使用必要的過濾器構建查詢;想必你會用if語句來做這件事。 – Yellowledbet 2013-03-12 23:57:33

回答

3

我通常做這樣的事情是唯一的項目添加到實際上有一個值集WHERE子句的方式:

$sql_stmt = 'SELECT * FROM property'; 
$where_items = array(); 

if ($room != '') { 
    $where_items[] = "(rooms LIKE '%$room') "; 
} 
if ($status != '') { 
    $where_items[] = "(status LIKE '%$status') "; 
} 
// ... repeat for all optional variables ... 

if (count($where_items) > 0) { 
    $sql_stmt .= ' WHERE ' . implode(' AND ', $where_items); 
} 

$result = mysql_query($sql_stmt); 
// ... 

有多種方式建立起來的查詢,但是這一次基本上創建一個項目的數組,這些項目將與最終查詢一起進行「與」運算。

+0

只是要小心;這很容易受到SQL注入的影響。 – 2013-03-13 00:05:34

+0

同意。這是對問題的直接回答,但並未解決SQL注入或已棄用方法的問題。我個人的建議是使用PDO並準備好陳述(個人偏好)。 – 2013-03-13 16:19:45

相關問題