我正在尝试从我的数据库中显示一些内容。这个名为Genre的专栏可以是五个不同值中的一个。现在,我想通过选中复选框,仅显示用户选择的类型的数据。用户可以选择多种类型。我知道如何使用WHERE ... AND显示一个,两个或三个类型...但我不知道用户会选择多少类型!这是我在选中复选框“actie”时显示数据的方法:
if (isset($_GET["actie"]))
{
$stmt = $db->prepare("SELECT ProductID,Afbeelding,Product,Prijs,Beschrijving FROM Producten WHERE Genre='Actie' order by Product ASC");
}
如何为多个复选框执行此操作,以便显示何时检查“actie”和“sports”的所有数据?我很困惑,因为我不知道用户将选择多少个复选框,无,一,二,三,四或五。 在此先感谢您的帮助!
答案 0 :(得分: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,..'字符串。
WHERE IN语法正确: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
}
希望这有帮助!