2014-06-14 55 views
-1

我要添加高级搜索到我的网页PHP MySQL的高级搜索选择框,单选框发出

我用这种形式获取数据

<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."%' "); 

那么,我该如何做高级搜索呢?

+0

这是错误的'$ weather = weather(“,”,$ _ POST [“weather”]); ' –

+0

是的,这是我的错误,我修正了它 – Seyhan

+0

你有'name ='oneword''但与'($ _POST ['word'])一起使用'''''''word']'问题。 –

回答

2

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

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."%'); 
+0

另外,'LIKE'运算符采用带有通配符的字符串。你有什么是逗号分隔的列表。使用'IN'函数,例如。天气IN(“。$ weather。”)“'。 –

+0

@NisseEngström,good point。answer根据您的建议更新了 – Fabricator

+0

但是这不是每次搜索都会收到回复 – Seyhan