嘿伙计们正在制作一个网站,其中列出了每所学校和每所学校发生的活动,包括体育和游戏。有一次,我希望用户通过选择他们选择的运动来过滤学校。这是 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
}