2014-01-28 49 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

相关问题