【问题标题】:multiselect query db多选查询数据库
【发布时间】:2012-12-21 21:15:30
【问题描述】:

我对最近的一篇帖子进行了过度思考并删除了它。希望这个版本更清晰一点。

我有一个多选下拉列表,我希望能够使用它来过滤数据库表。

因此,如果我有以下包含大约 70 个条目的下拉列表:

<select multiple="multiple" id="filter" name="filter">
  <optgroup label="category1"> <!--jquery ui plugin allows for grouping -->
    <option value="sub1">Subcategory 1</option>
    <option value="sub2">Subcategory 2</option>
    <option value="sub3">Subcategory 3</option>
  </optgroup>
  <optgroup label="category2">
    <option value="sub4">Subcategory 4</option>
    <option value="sub5">Subcategory 5</option>
    <option value="sub6">Subcategory 6</option>

...

我有 6 个类别需要在我的 sql 语句中搜索,到目前为止我有:

<?php
    include ("connect.php");

    $filter = $_POST["filter"];

        $result = mysql_query("SELECT * FROM edt_images
                                WHERE category1= '$filter'
                                OR category2= '$filter'
                                OR category3 = '$filter'
                                OR category4 = '$filter'
                                OR category5 = '$filter'
                                OR category6 = '$filter'")
            or die(mysql_error());
        while ($row = mysql_fetch_array($result)) {
            echo "<img src='files/small/thumb0_".$row['item_name'].".".$row['file_extension']."' border='0'/>"; 
        }
?>

现在,如果我只从下拉列表中选择一项,它就可以工作,因为它会在六列中搜索该条目。所以我的问题是如何在这六列中搜索多个条目?

提前致谢

【问题讨论】:

  • 警告! 您的代码包含SQL injection vulnerability——您将原始、未经过滤、未经验证的用户输入直接传递到 SQL 字符串中。 SQL 注入是very easy to fix。考虑switching to PDOmysqli,这样你就可以使用prepared statements with parameterized queries
  • 是的,很清楚,正在寻找有关该概念的更多帮助。这还不是最终代码。
  • 也换成PDO了,我只是觉得用旧格式比较容易学,然后改成PDO
  • 您不想从您的选择中返回多个值吗?
  • @Dagon,是的,我正在寻求帮助

标签: php javascript sql multiple-select


【解决方案1】:

如果过滤器是所选类别的数组,您可以在查询中使用IN

$filterIn = implode("','",$filter);

SELECT * FROM edt_images
        WHERE category1 IN ('$filterIn')
        OR category2 IN ('$filterIn')
        OR category3 IN ('$filterIn')
        OR category4 IN ('$filterIn')
        OR category5 IN ('$filterIn')
        OR category6 IN ('$filterIn')

但请注意,您不应在 SQL 查询中使用未经处理的用户输入。

【讨论】:

  • 有用的答案。注意:我认为 Owen 还需要将 select 更改为 &lt;select multiple="multiple" id="filter" name="filter[]"&gt; 以便 $filter 将成为来自 $POST 的数组?
  • 感谢 Jim,但我该如何将选择放入数组中?
  • 抱歉错过了 DWrights 的帖子。但是我收到:未定义的函数内爆
  • @Owen 如果您做出 DWright 和 peterm 建议的更改,那么 $_POST["filter"] 应该是所选类别的数组。
  • @Owen Bah,我在帖子中拼错了 implode。固定。
【解决方案2】:

恕我直言,首先您需要允许从多选中返回多个值。为此,您需要将括号添加到 name 属性,如下所示:

<select multiple="multiple" id="filter" name="filter[]">

【讨论】:

  • 好的,在其他一些帖子中看到不知道为什么,所以谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2013-06-23
  • 2015-04-06
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
相关资源
最近更新 更多