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


Filtering data from mysql using checkbox group

嘿伙计们正在制作一个网站,其中列出了每所学校和每所学校发生的活动,包括体育和游戏。有一次,我希望用户通过选择他们选择的运动来过滤学校。这是 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中,我有一个体育列,对于每所学校,我插入了如下运动:乒乓球,网球,足球,橄榄球......等等我发现如果只选中一个复选框,代码就可以完美运行。但是,如果选择了不止一项,则找不到结果,但有许多学校提供上述所有运动。请帮忙

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

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

它只会匹配具有该 EXACT hockey,ping pong,soccer 字符串的记录。

你想要的更多是:

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

例如

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

请注意,这很容易受到SQL注入攻击。不应在生产系统中使用此代码中的任何代码。这只是为了说明您的问题和潜在(但仍然是错误的)解决方案。

尝试这样的事情

首先,您将遍历所有复选框,即具有名称运动,然后选中一个复选框,然后制作一个逻辑来连接并准备一个 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
    }