多个复选框过滤php

时间:2013-08-10 23:38:35

标签: php html mysql

我正在使用复选框从数据库中过滤结果,并且它可以正常使用一个复选框,但是当我选中多个复选框时,它仅返回第一个复选框的行。如何使用多个复选框过滤结果?

以下是复选框

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

}

2 个答案:

答案 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块序列。因此,只评估一个。

改变这一点,你会没事的。