使用复选框组从mysql过滤数据

时间:2014-12-02 15:14:07

标签: php mysql

嘿,伙计们正在建立一个网站,列出了包括体育和游戏在内的多个学校和活动。有一点,我希望用户通过选择他们选择的运动来过滤学校。这是html部分:

 <input type="checkbox" name="sport[]" value="swimming"/>
  <input type="checkbox" name="sport[]" value="hockey"/>
  <input type="checkbox" name="sport[]" value="ping pong"/>
  <input type="checkbox" name="sport[]" value="rugby"/>
  <input type="checkbox" name="sport[]" value="soccer"/>

这里是php

     if( isset($_POST['sport'])){

     $sport=implode(",",$_POST['sport']);

     $query=mysql_query("SELECT * FROM schools WHERE sports LIKE '%$sport%'");
            while($fetch=mysql_fetch_assoc($query)){
              //fetch a schools data

            }
      }

在mysql db中我有一个体育专栏和每个学校,我已经插入了以下运动:乒乓球,网球,足球,橄榄球....等等 我发现如果只选择了一个复选框,代码就可以完美运行。但是如果选择了不止一个,没有找到结果,那么有很多学校提供上述所有运动。请帮忙

2 个答案:

答案 0 :(得分:2)

问题是你正在生成这样的东西:

SELECT ... WHERE sports LIKE '%hockey,ping pong,soccer%'

只会匹配其中包含EXACT hockey,ping pong,soccer字符串的记录。

你想要的更像是:

SELECT ... WHERE sports IN ('hockey', 'ping pong', 'soccer')

e.g。

 $sports = "'" . implode("','",$_POST['sport']) . "'";
 $sql = "SELECT ... WHERE sports IN ($sports)";

请注意,这对sql injection attacks是敞开的。您应 NOT 在生产系统中使用任何此类代码。它只是为了说明你的问题和潜在的(但仍然是错误的)解决方案。

答案 1 :(得分:0)

尝试这样的事情

首先,你将循环遍历所有复选框,即命名运动然后查找一个被检查然后制作逻辑以连接并准备一个Like语句作为列LIKE'%keyword1%'或列LIKE '%关键字1%'

  $sport=" sports LIKE ";
 for($a=0;a<count($_POST['sport']);$a++){
if( isset($_POST['sport'][$a])){

         $sport.=($sport=="")?"":" OR sports LIKE";
         $sport.="'%".$_POST['sport'][$a]."%'"; 

    }



 }

   $query=mysql_query("SELECT * FROM schools WHERE $sport ");
                while($fetch=mysql_fetch_assoc($query)){
                  //fetch a schools data
    }