我一直试图解决这个问题,但是我没有随处可见。我已经阅读了很多此处和互联网上发布的其他问题,但我无法找到解决方案。特别是在使用多个复选框的情况下。
当我试图解释我面临的问题时,请耐心等待。
在页面上,我有一个人员列表及其对应的位置,我使用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范围内实现这一目标。
答案 0 :(得分: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']);
答案 1 :(得分:0)
做这样的事情
where p_location in (the values for your checkboxes)
答案 2 :(得分: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']);
}