php mysql高级搜索选择框和电台盒问题

时间:2014-06-14 16:55:23

标签: php mysql advanced-search

我想将高级搜索添加到我的网页

我使用此表单获取数据

<form action="advsearch.php" method="POST" >

Search <input type="text" name="oneword" size="20"> word

<p>Time <input type="radio" value="30" name="time">30 min 
    az <input type="radio" name="time" value="60">60 min
    <input type="radio" name="time" value="120">120 min
    <input type="radio" name="time" value="1000" checked>any</p>
<p>&nbsp;</p>
</p>

Cities 

<?php

while($cities=mysql_fetch_array($whichcity)){
echo "<input type='checkbox' name='cities[]' value='$cities[cityname]'>$cities[cityname]";
}
?>

    <p>Category

<?php

while($categories=mysql_fetch_array($whichcat)){
echo "<input type='checkbox' name='categories[]' value='$categories[catname]'>$categories[catname]";
}
?>

    </p>
<p>Weather <input type="checkbox" name="weather[]" value="Rainy">Rainy
    <input type="checkbox" name="weather[]" value="Cloudy">Cloudy
    <input type="checkbox" name="weather[]" value="Clear">Clear
    <input type="checkbox" name="weather[]" value="Foggy">Foggy</p>
<p>&nbsp;Person<input type="radio" name="person" value="2">1-2 person<input type="radio" name="person" value="4">3-4 
    person<input type="radio" name="person" value="6">5-6 person<input type="radio" name="person" value="100" checked>any

    </p>

    <p><input type="submit" value="Search"></p>


</form>

我从数据库获得了一些字段,无论如何我成功发布表单并获取数据,但我的搜索结果是错误的

我得到了这样的数据

$oneword = mysql_real_escape_string($_POST['oneword']); 
$time = (int)$_POST['time'];
$cities= implode(",",$_POST["cities"]);
$categories= implode(",",$_POST["categories"]);
$weather= implode(",",$_POST["weather"]);
$person= (int)$_POST['person'];

这是sql查询

$sql= mysql_query("select * from mytable where time <= '".$time ."' and person = '".$person."' and  category like '".$categories."' and  cities like '".$cities."' and  weather like '".$weather."' and word like '%".$oneword."%' or description like '%".$oneword."%'    ");

那么,我该如何进行这样的高级搜索?

1 个答案:

答案 0 :(得分:2)

您的查询返回的结果不正确,因为最终OR运算符限定了descriptions包含$oneword的所有记录。相反,您需要使用()将文本搜索条件组合在一起。

select * 
from mytable 
where time <= '".$time ."' and person = '".$person."' 
  and  category in ('". implode("','", $_POST['categories']) ."') 
  and  cities in ('". implode("','", $_POST['cities']) ."')
  and  weather in ('". implode("','", $_POST["weather"]) ."') 
  and (word like '%".$oneword."%' or description like '%".$oneword."%');