2014-01-28 46 views
2

我試圖從我的數據庫中顯示一些東西。這個專欄稱爲體裁,它可以是五個不同值中的一個。現在我只想通過選中複選框來顯示用戶選擇的流派數據。用戶可以選擇多種流派。我知道如何通過使用WHERE ...和...來顯示一個,兩個或三個流派,但我不知道用戶將選擇多少流派!這是我用它來顯示數據時,一個複選框「actie」被選中:SELECT * FROM table WHERE column = ???在PHP中具有未知數量的值?

if (isset($_GET["actie"])) 
    { 
    $stmt = $db->prepare("SELECT ProductID,Afbeelding,Product,Prijs,Beschrijving FROM Producten WHERE Genre='Actie' order by Product ASC"); 
    } 

我該怎麼做了多個複選框,使其顯示所有數據時,例如「actie」和「運動」是檢查?我很困惑,因爲我不知道用戶會選擇多少個複選框,無,一,二,三,四或五。 在此先感謝您的幫助!

+7

對任意邏輯使用['IN'](http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in)(*和*佔位符)。您需要動態構建IN結構 - 例如「X IN(?,?,?)」,以獲取來自用戶的正確數量的值。類似的方法可以用於任何任意結構(可能需要)。 – user2864740

回答

1

你需要確保所有的複選框具有相同的名稱屬性,然後按[] 即

<input type="checkbox" name="mycheckbox[]" value="gen1"> 
<input type="checkbox" name="mycheckbox[]" value="gen2"> 
<input type="checkbox" name="mycheckbox[]" value="gen3"> 

然後當你提交表單,用相同的通用名稱的所有選擇複選框將作爲$_POST['mycheckbox']$_GET['mycheckbox'];根據您在值字段中設置的值,它們的相應值將爲gen1,gen2或gen3。

$genres = $_POST['mycheckbox'];//creates an array of selected checkboxes values gen1,gen2,gen3 

然後使用MySQL WHERE IN子句。您必須使用implode()將數組轉換爲'gen1,gen2,..'串。

凡在正確的語法:SELECT * FROM my_table WHERE Genre IN ('gen1','gen2','gen3',...)

if (isset($_GET["actie"])) 
    { 

    $genres_str = "'" .implode("','" ,$genres) ."'";//converts the array into 'gen1,gen2,gen3,..' 

    $stmt = $db->prepare("SELECT ProductID,Afbeelding,Product,Prijs,Beschrijving FROM Producten WHERE Genre IN (". $genres_str .") order by Product ASC"); 

    //don't forget to execute the query 

    } 

希望這有助於!

+0

到目前爲止幫助很大!至少現在我知道基本想法是什麼。但有一個問題,當我檢查一個或多個盒子時,它什麼也沒有顯示。我認爲這是因爲implode(',',$ genres)創建字符串:gen1,gen2,gen3,...而不是字符串:'gen1','gen2','gen3',...這樣(gen1,gen2,gen3)中的WHERE Genre將其視爲一個正好具有逗號的值。還是我說的話很愚蠢? – EerlijkeDame

+0

@DeEerlijkeDame你需要爲每個複選框設置一個值。我將編輯我的答案以包含它。 – Yani

+0

@DeEerlijkeDame它現在應該工作。如果遇到問題,請嘗試將值設置爲數字(1,2,3代替gen1,gen2,gen3),並將其與流派ID匹配,而不是流派名稱。 – Yani

相關問題