2010-12-01 57 views
0

我有一個web應用程序,它顯示從mysql數據庫中獲取並呈現給用戶的事件列表。然後PHP和MySQL用戶過濾

用戶可以根據幾種過濾結果(8-10)「類型」

我的問題是,我應該怎麼處理這個?基本上我需要做的是採取用戶輸入的過濾器(在$_GET),然後找出他想要過濾哪些類型,並據此,更改我的SQL查詢。

我該如何以一種不太複雜的方式做到這一點?我想過使用許多'if'或'case'語句,但我不確定這是否是最好的解決方案,因爲它是一個非常簡單的事情的很多編碼。

任何人都可以給我一些建議嗎? 謝謝,

實例DB:

EVENT_ID EVENT_NAME  EVENT_TYPE 
1   test   regular 
2   test2   vip 
3   test4   testtype 

...

例子$ _GET:

$_GET['regular'] = 'on' 

...

+0

給我們您的代碼(至少在PHP $ _GET和MYSQL) – Thariama 2010-12-01 09:51:16

+0

當建立你的MySQL查詢(例如,作爲字符串與$ _GET-paramenters合併)記住檢查,如果值是在特定的範圍或至少轉義/刪除特殊字符以防止SQL注入。 – acme 2010-12-01 10:11:08

回答

0

你應該使用複選框

<input type="checkbox" name="types[]" value="regular" /> Regular 

<input type="checkbox" name="types[]" value="vip" /> VIP 

,那麼你將有類型的$ _REQUEST [「類型」]數組可能要創建的類型的數組...

回聲破滅(「」 ,$ _ REQUEST ['類型]); //例如

那麼它取決於你是否實際存儲event_types作爲字符串(你不應該)。

如果你改變他們爲int,你可以簡單地做

$query = "select * from events"; 

if(isset($_REQUEST['types'])){ 
    $query .= "and event_types in (".implode(",",$_REQUEST['types']).")"; 
} 

如果你讓他們作爲字符串中你分貝,你可以做同樣的事情,但你必須有'周圍的價值觀.. 。

當然你必須確保這一

0

它是否應該允許多重選擇或只有1個過濾器選擇。 如果你可以使用case函數,或者你可以使用javascript的onchange函數。

+0

對不起,我沒有提到它,有多個選項可用 – JohnB 2010-12-01 09:53:43

0

注意到從一些複選框的GET和創建SQL查詢。您需要更改列名稱和$ getOptions數組。 $ getOptions元素的關鍵是類型的名稱。

$getOptions = array(
    'regular' => $_GET['regular'], 
    'vip'  => $_GET['vip'], 
    'testtype' => $_GET['testtype'] 
); 

$sql = "SELECT * FROM events"; 

$sqlOptions = array(); 

foreach($getOptions as $key => $value) 
{ 
    if($value == 'on') 
    { 
     $sqlOptions[] = $key; 
    } 
} 

if(!empty($sqlOptions)) 
{ 
    $sql .= " WHERE EVENT_TYPE IN ('" . implode("','", $sqlOptions) . "')"; 
} 

// Execute $sql