0

我一直试图弄清楚这一点,但我没有得到任何结果。我已经阅读了这里和互联网上发布的许多其他问题,但无法找到解决方案。特别是在使用多个复选框的情况下。

当我试图解释我面临的问题时,请耐心等待。

在一个页面上,我有一个人员列表及其相应的位置,我使用 php/sql 从数据库中提取。我想要实现的是能够使用复选框根据位置过滤列表。

这是我目前用于复选框的代码。

<ul>
    <li><input type="checkbox" name="check_list[]" value="sydney">Sydney</li>
    <li><input type="checkbox" name="check_list[]" value="durban">Durban</li>
    <li><input type="checkbox" name="check_list[]" value="delhi">Delhi</li>
    <li><input type="checkbox" name="check_list[]" value="cairo">Cairo</li>
    <li><input type="checkbox" name="check_list[]" value="madrid">Madrid</li>
    <li><input type="submit"></li>
</ul>

这是我用来检查复选框是否被选中并相应地修改 SQL 查询的代码

if (empty ($_POST['check_list'])) {

    $SQLquery = 'SELECT * FROM `people`';
    $query = $conn->query($SQLquery);

} elseif (!empty($_POST['check_list'])) {

    foreach($_POST['check_list'] as $check)

    $location = $check;

    $query = $conn->prepare('SELECT * FROM `people` WHERE `p_location` = :location');
    $query->execute(array('location' => $location));

}

现在,当仅选中一个复选框时,此代码可以正常工作。但是,当检查多个复选框时,这将失败。它什么也没显示。

我知道我可以使用OR运算符修改 SQL 查询以添加其他位置,如下所示:

$query = $conn->prepare('SELECT * FROM `people` WHERE `p_location` = 'Delhi' OR `p_location` = 'Madrid')

但是,我无法弄清楚如何首先检查选中了哪些所有复选框,然后以一种在选择多个城市时过滤结果的方式创建 SQL 语句。

我也想知道这是否是实现此类目标的最佳方法。我对在 php/sql 范围内实现这一目标的替代方法持开放态度。

4

3 回答 3

1

未经测试,但应该让你知道你应该做什么。

答案已修改!

$markers = str_repeat('?, ', count($_POST['check_list']) - 1) . '?';

$query = $conn->prepare('SELECT * FROM `people` WHERE `p_location` IN (' . $markers . ')');
$query->execute($_POST['check_list']);
于 2013-04-20T18:43:38.257 回答
0

试试这个方法:

if (empty ($_POST['check_list'])) {

    $SQLquery = 'SELECT * FROM `people`';
    $query = $conn->query($SQLquery);

} else if (!empty($_POST['check_list'])) {
    $params = implode(",", array_fill(0, count($_POST['check_list']), "?"));

    $sql = 'SELECT * FROM `people` WHERE `p_location` IN ($params)';

    $stmt   = $conn->prepare($sql);

    $stmt->execute($_POST['check_list']);
}
于 2013-04-20T18:51:01.767 回答
0

做这样的事情

where p_location in (the values for your checkboxes)
于 2013-04-20T18:40:56.970 回答