SELECT * FROM表WHERE列= ???在PHP中具有未知数量的值?

时间:2014-01-28 23:48:22

标签: php sql select

我正在尝试从我的数据库中显示一些内容。这个名为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”的所有数据?我很困惑,因为我不知道用户将选择多少个复选框,无,一,二,三,四或五。 在此先感谢您的帮助!

1 个答案:

答案 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

    }

希望这有帮助!