1

我正在使用复选框过滤来自数据库的结果,并且它可以与一个复选框一起正常工作,但是当我选中多个复选框时,它仅返回第一个复选框的行。我怎样才能让它用多个复选框过滤结果?

这是复选框

 <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>

这是选择查询。第三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);

}
4

2 回答 2

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%'

然后,一旦我们检查了所有参数,我们将它们内爆在一起并用“或”分隔。然后我们将这个参数字符串插入到我们的查询中,并运行一个完全符合我们需要的分页。不多也不少。

于 2013-08-10T23:43:30.697 回答
0

您使用一系列else if块。因此,将只评估一个。

改变这个,你会没事的。

于 2013-08-10T23:48:47.727 回答