我一直试图弄清楚这一点,但我没有得到任何结果。我已经阅读了这里和互联网上发布的许多其他问题,但无法找到解决方案。特别是在使用多个复选框的情况下。
当我试图解释我面临的问题时,请耐心等待。
在一个页面上,我有一个人员列表及其相应的位置,我使用 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 范围内实现这一目标的替代方法持开放态度。