2012-07-26 14 views
0

我是新來的PHP,我有一個問題。多個下拉菜單查詢結果,當離開空

我有三個下拉菜單來排序結果,但我想這樣做,如果他們不選擇任何默認值是一個SELECT * FROM餐廳,並且如果只有一個下拉菜單被選中只考慮該字段。

<form id="form" name="vicinity" method="post" action="restaurant-list.php"> 
    <select class="form-banner" size="1" id="vicinity" name="vicinity"> 
     <option value=""> Select one </option> 
     <option value="Back Bay">Back Bay</option> 
     <option value="Beacon Hill">Beacon Hill</option> 
     <option value="Chinatown">Chinatown</option> 
    </select><br><br> 
    <p class="font-2">Search by Cuisines</p> 
    <select class="form-banner" size="1" id="cuisine" name="cuisine"> 
     <option value=""> Select one </option> 
     <option value="American">American</option> 
     <option value="Chinese">Chinese</option> 
     <option value="Indian">Indian</option> 
    </select><br><br> 
    <p class="font-2">Search by Price</p> 
    <select class="form-banner" size="1" id="price" name="price"> 
     <option value=""> Select one </option> 
     <option value="$">$ - Cheap</option> 
     <option value="$$">$$ - Moderate</option> 
     <option value="$$$">$$$ - Pricey</option> 
    </select><br><br> 
    <input type="submit" id="banner-search" value="Search"/> 
</form> 

餐廳頁面(當前僅在所有字段被選中時才起作用)如果一個留白沒有顯示。

<?php 
require ("db.php"); 
$vicinity = $_POST["vicinity"]; 
$cuisine = $_POST["cuisine"]; 
$price = $_POST["price"]; 

$query = "SELECT * FROM restaurant WHERE vicinity=\"$vicinity\" AND cuisine=\"$cuisine\" AND price=\"$price\""; 
$result = mysql_query($query); 
?> 

任何幫助或想法我怎麼能做到這一點。

+2

我知道你只是一個初學者,但你也可以正確地開始。不要在你的代碼中編寫你的sql代碼。您將很容易受到http://en.wikipedia.org/wiki/SQL_injection的影響。你需要的是一個存儲過程 – 2012-07-26 21:19:04

回答

1

確保在您的PHP代碼做到這一點:(編輯顯示在預防注射一步法)

<?php 
require ("db.php"); 
$vicinity = mysql_real_escape_string($_POST["vicinity"]); 
$cuisine = mysql_real_escape_string($_POST["cuisine"]); 
$price = mysql_real_escape_string($_POST["price"]); 

$query = "SELECT * FROM restaurant WHERE 1=1 "; 
if($vicinity) $query .= "AND vicinity=\"$vicinity\" "; 
if($cuisine) $query .= "AND cuisine=\"$cuisine\" "; 
if($price) $query .= "AND price=\"$price\""; 
$result = mysql_query($query); 
?> 

把1 = 1的地方只是讓後讓你不用擔心測試看看你是否需要AND或不在你的where語句之前,它不會改變你的查詢結果。

0

如果你的SQL數據庫支持LIKE語句,應該這樣做。

<?php 
require ("db.php"); 
$vicinity = $_POST["vicinity"]; 
$cuisine = $_POST["cuisine"]; 
$price = $_POST["price"]; 

$query = "SELECT * FROM restaurant WHERE vicinity LIKE \"%$vicinity%\" AND cuisine LIKE \"%$cuisine%\" AND price LIKE \"%$price\%""; 
$result = mysql_query($query); 
?> 

當心,這樣,你就容易SQL Injection

爲了防止這種情況,你應該檢查,如果你輸入任何數據,並根據構建查詢是否含有你的一些價值觀或不符合某些SQL框架(Zend_Db也許)或逃避你的變量的值。