2012-05-10 48 views
0

我創建了一個帶有搜索框和美國50個州的下拉列表的HTML表單。我想要的是讓用戶在搜索框(電子郵件,主題,用戶名等)中輸入關鍵字,然後從下拉列表中選擇一個狀態。通過從下拉列表中選擇一個狀態,我希望我的PHP代碼僅在該選定狀態下從搜索框中查找關鍵字。例如,作爲用戶,我想在華盛頓州找到「足球」並看到結果列表。如何結合搜索框和下拉列表輸出結果(php,mysql)

換句話說,我將如何顯示結果只在選定的狀態結合我的搜索表單?

這裏有一段我​​的PHP代碼給你所有我想要完成的想法。

// this is pulling the text that was typed in the html search box 
$searchbox = $_POST['searchbox']; 

// this is pulling the state from my HTML drop down menu 
$state = $_POST['state']; 

$searchboxresult = mysql_query(" 
    SELECT * 
    FROM table 
    WHERE (ID  LIKE '%".$_POST['searchbox']."%') 
    OR (stateID LIKE '%".$_POST['searchbox']."%') 
    OR (city LIKE '%".$_POST['searchbox']."%') 
    OR (subject LIKE '%".$_POST['searchbox']."%') 
    OR (email LIKE '%".$_POST['searchbox']."%') 
    OR (posting LIKE '%".$_POST['searchbox']."%') 
    OR (skill LIKE '%".$_POST['searchbox']."%') 
    OR (event LIKE '%".$_POST['searchbox']."%') 
    OR (days LIKE '%".$_POST['searchbox']."%') 
    OR (url  LIKE '%".$_POST['searchbox']."%') 
"); 

// and 

$statedropdownresult = mysql_query(" 
    SELECT * FROM table WHERE stateID LIKE '%$state%' 
"); 

然後我有一個while循環搜索所有內容並輸出數據。但是我不能讓狀態下拉以限制用戶正在搜索的內容。我只能得到一個或另一個mysql_query與我的while循環結合使用,而不是兩者。出於某種原因,將查詢合併爲一個使用似乎也不起作用。有任何想法嗎?

我知道代碼是草率的,並且存在安全問題,但是我將在後面進行清理。如果您需要更多細節或澄清某些事情,我會很樂意詳細說明!

+0

我很感謝你在你的問題中承認它,但是爲了其他讀者的利益:**這段代碼容易受到SQL注入**一個*真正*應該使用預先準備好的語句,將一個變量作爲參數不會針對SQL進行評估。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables](http://bobby-tables.com)的故事。 – eggyal

回答

1

你可以嘗試這樣的事情: -

$sql ="SELECT * FROM table WHERE 1"; 

if($_POST['searchbox'] != ''){ 
    $sql =" and (ID LIKE '%".$_POST['searchbox']."%') OR (stateID LIKE    
    '%".$_POST['searchbox']."%') OR (city LIKE '%".$_POST['searchbox']."%') OR 
    (subject LIKE '%".$_POST['searchbox']."%') OR (email LIKE 
    '%".$_POST['searchbox']."%') OR (posting LIKE '%".$_POST['searchbox']."%') OR 
    (skill LIKE '%".$_POST['searchbox']."%') OR (event LIKE 
    '%".$_POST['searchbox']."%') OR (days LIKE '%".$_POST['searchbox']."%') OR (url 
    LIKE '%".$_POST['searchbox']."%')"; 
} 
if($state != ''){ 
    $sql .= " and stateID LIKE '%".$state."%'"; 
} 

    mysql_query($sql); 

希望這有助於。

+1

謝謝你的幫助!我有點困惑,爲什麼你在$ sql =「SELECT * FROM table WHERE 1」中使用1;這只是一個佔位符? – sonarbiscuit