2013-07-31 13 views
0

我想從MyTable的Mysql的Fiterby多個複選框的正確方法

過濾器,我得到的結果只有與選中的複選框行的方式。

(1) <input type="cBox" name="Filter[Table_Column_Name_X]" value="y" /> 
(2) <input type="cBox" name="Filter[Table_Column_Name_Y]" value="y" /> 
(3) <input type="cBox" name="Filter[Table_Column_Name_Z]" value="y" /> 

例:

如果 '僅' 複選框(1)被選中

我檢索'僅僅'WHERE Table_Column_Name_X='y'

如果複選框(1)和checkbo X(3)檢查

我找回'僅僅'WHERE Table_Column_Name_X='y' AND Table_Column_Name_Z='y'

.........等等的foreach複選框選中!

像這樣的事情

if(isset($_POST['Filter'][]) && !empty($_POST['Filter'][]){ 
$query= "Select * From MyTable WHERE Table_Columns_Names_Checked='y'"; 
} 

Myabe我應該使用變量或foreach語句。任何幫助讚賞。

回答

0

你的HTML代碼不正確:

<input type="checkbox" name="Filter[]" value="Table_Column_Name_X" /> 
<input type="checkbox" name="Filter[]" value="Table_Column_Name_Y" /> 
<input type="checkbox" name="Filter[]" value="Table_Column_Name_Z" /> 

你的PHP代碼(下面的代碼是未經測試):

$where = ""; 
if(isset($_POST['Filter']) { 
    foreach($_POST['Filter'] as $filter) { 
    switch($filter) { 
     case 'Table_Column_Name_X' : if($where != '') $where .= " AND "; 
            $where .= Table_Column_Name_X = ??????????; 
            break; 
     //--- repeat above for other 2 options 
    } 
    $sql = "Select * From MyTable"; 
    if($where != "") $sql .= " WHERE " . $where; 
    //--- do the query 

的?????表示該列必須具有特定值以供查詢處理,否則它將僅返回所有內容並且不需要過濾器。

在您的HTML中使用表/字段名是不明智的,因爲您將數據庫的結構暴露給黑客。改用數字。

+0

明天我會測試你的代碼,我會留下你的反饋。謝謝你提供有關你的安全的建議。 – user2635574

+0

'$ where =「」;' 'if(isset($ _POST ['Filter'])&&!empty($ _POST ['Filter'])){' 'foreach($ _POST ['Filter'] as $ filter){' switch($ filter){ case'Elevator':if($ where!='')$ where。=「AND」; $ where。='y'; break;' – user2635574

+0

現在我想念最重要的部分「做你的查詢」。我應該把你的代碼放在查詢中? – user2635574

相關問題