2011-02-24 202 views
1

感謝您閱讀我的問題。在SQL中使用SELECT語句的下拉菜單

我正在構建一個表單,可以讓用戶在一個可收集卡片遊戲中使用的卡片搜索數據庫。我想添加一個下拉菜單,讓用戶將搜索範圍縮小到特定的卡片擴展。

這裏是我的下拉菜單:

<select name="Expsn" onchange="this.submit()"> 
    <option>All Expansions</option> 
    <option value="Core">Core</option> 
    <option value="SoM">Shadows of Mirkwood</option> 

這裏是select語句:

$sql = "SELECT * FROM carddb 
WHERE Expsn ='" . $_POST['Expsn'] . "' AND Type='Hero' "; 

選擇無論是核心還是鐵道部,但如果Dropbox的是,當這種運作良好留空「All Expansions」傳入$ _POST ['Expsn']。 (我使用echo $ sql;來輸出SELECT語句)。我如何設置所有擴展的默認返回卡。

我已經花了最近幾周在線學習PHP和SQL,所以很可能我的整個方法非常錯誤,不可擴展,所以任何'大圖'的幫助將不勝感激。謝謝。

回答

1

如果Expsn初始設定,然後添加條件SQL,如:

$expsn = (strlen($_POST['Expsn']) > 0) ? "Expsn = '" . $_POST['Expsn'] . "' AND " : ''; 
$sql = "SELECT * FROM carddb WHERE $expsn Type='Hero'"; 
+0

'if($ _POST ['Expsn']!=「1」){$ expsn =「Expsn ='」。 $ _POST ['Expsn']。 「」 AND 「;} \t \t其他{$ expsn =」 「;} \t \t $ SQL =」 SELECT * FROM carddb其中$ expsn類型= '英雄'「;' – Mason240 2011-02-24 04:31:30

+0

我沒有想過把變量在SELECT語句中,然後在變量上做一個簡單的if語句。我將默認選項標記更改爲:。我還有更多的東西要添加,所以我認爲這會更好一些。 – Mason240 2011-02-24 04:35:14

+1

太好了。對於這樣的小型ifs來說,三元運算符看起來更好:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary – TuteC 2011-02-24 04:46:04

3

首先改變你的「所有擴展」選項,有一個空值:

<option value="">All Expansions</option> 

這是爲了讓你以後可以改變措辭,而不必更新你的PHP代碼。

if (empty($_POST['Expsn'])) { 
    $sql = "SELECT * FROM carddb WHERE Type='Hero'"; 
} else { 
    $sql = "SELECT * FROM carddb WHERE Expsn ='" . mysql_real_escape_string($_POST['Expsn']) . "' AND Type='Hero'"; 
} 

mysql_real_escape_string位是非常重要的,以防止SQL注入 - 我假設你在這裏使用mysql擴展,但有對其他擴展功能等同。

+1

這看起來不錯,但我的理解是$ _ POST [ 'Expsn' ]不是空的。 if語句應該檢查它是否等於「All Expansion」,在這種情況下它應該忽略它。 – Will 2011-02-24 04:06:08

+0

好趕@ @,更新答案以糾正錯誤。我通常使用value =「」來避免將處理與演示文稿綁定。 – 2011-02-24 04:09:25

+0

在這種情況下,您確實應該具有空字符串的正確值屬性。 。這將避免任何含糊不清。 – brianlmoon 2011-02-24 04:27:08

0

只是用這個

<option value="*">All Expansions</option>