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