我正在使用复选框从数据库中过滤结果,并且它可以正常使用一个复选框,但是当我选中多个复选框时,它仅返回第一个复选框的行。如何使用多个复选框过滤结果?
以下是复选框
<form id="form" method="post" action="">
<input type="checkbox" name="football" class="checkbox" <?=(isset($_POST['football'])?' checked':'')?>/> Football<br>
<input type="checkbox" name="basketball" class="checkbox" <?=(isset($_POST['basketball'])?' checked':'')?>/> Basketball<br>
<input type="checkbox" name="volleyball" class="checkbox" <?=(isset($_POST['volleyball'])?' checked':'')?>/> Volley Ball<br>
</form>
<script type="text/javascript">
$(function(){
$('.checkbox').on('change',function(){
$('#form').submit();
});
});
</script>
这里是select查询..第三个else if
语句只返回第一个复选框值,即篮球
if (isset($_POST["football"])){
$paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%foot%' ORDER BY id desc", $options);
}
else if (isset($_POST["basketball"])){
$paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%bask%' ORDER BY id desc", $options);
}
else if (isset($_POST["volleyball"])){
$paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%vol%' ORDER BY id desc", $options);
}
else if (isset($_POST["basketball"]) && isset($_POST["football"]) && isset($_POST["volleyball"])){
$paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%bask%' or type LIKE '%foot%' or type LIKE '%vol%' ORDER BY id desc", $options);
}
else { $paginate = new pagination($page, 'SELECT * FROM balls ORDER BY id desc', $options);
}
答案 0 :(得分:3)
如果设置了足球,您的页面将不会调用任何其他功能。您可以通过将if (isset($_POST["basketball"]) && isset($_POST["football"]) && isset($_POST["volleyball"])){
作为第一个参数而不是第三个参数来修复它,但是此方法不处理三个中只有两个被选中的情况。
编辑1: 更合适的方法是:
if (isset($_POST["basketball"]) {
$arguments[] = "type LIKE '%bask%'";
}
if (isset($_POST["football"]) {
$arguments[] = "type LIKE '%foot%'";
}
if (isset($_POST["volleyball"]) {
$arguments[] = "type LIKE '%vol%'";
}
if(!empty($arguments)) {
$str = implode(' or ',$arguments);
$qry = "SELECT * FROM balls where " . $str . " ORDER BY id desc";
$paginate = new pagination($page, $qry, $options);
} else {
//Whatever happens when there's none checked.
}
编辑2:
让我解释一下这里发生了什么。首先,我们检查每个post变量以查看它的设置。如果是,我们使用$arguments
参数向type LIKE '%search term%'
数组添加值。
然后,一旦我们检查了所有参数,我们将它们一起内爆并用“或”分隔。然后我们将这个参数字符串插入到我们的查询中,并运行一个完全符合我们需要的分页。不多也不少。
答案 1 :(得分:0)
您使用else if
块序列。因此,只评估一个。
改变这一点,你会没事的。