2012-08-07 58 views
0

嗨,我是新的PHP和与搜索框努力,我创建了一个表格如下php多选项搜索查询....?

<form method="post" action="search.php"> 
<select name="purpose"> 
<option value="" selected="selected">-any-</option> 
<option value="For Sale">For Sale</option> 
<option value="For Rent">For Rent</option> 
</select> 

<select name="type"> 
<option value="" selected="selected">-any-</option> 
<option value="Bungalow">Bungalow</option> 
<option value="Apartment">Apartment</option> 
</select> 

<select name="location"> 
<option value="" selected="selected">-any-</option> 
<option value="Norway">Norway</option> 
<option value="Itley">Itley</option> 
    </select> 
<input type="submit" value="Search"> 
</form> 

的search.php

我试图与这些奎雷斯但得到的问题

$purpose=$_POST['purpose']; 
$type=$_POST['type']; 
$location=$_POST['location']; 

,如果我把这样的查询

SELECT * FROM test WHERE purpose='$purpose' AND location='$location' AND type='$type' 

那么它不是一个结果过滤一个其显示为空白

,如果我把OR这样的查询

SELECT * FROM test WHERE purpose='$purpose' OR location='$location' OR type='$type' 

然后过滤混合导致

我想,如果所有选择它的过滤器(目的> >型>>位置),并且如果一个选定然后通过这一点,但确切的结果 别的过滤显示

Result not found! 

先生我正在这样做,但它显示错误

$ qry =“SELECT * FROM test WHERE 1 = 1”;

if($ purpose!=“”) $ qry。=“AND purpose ='$ purpose'”;

if($ location!=“”) $ qry。=“AND location ='$ location'”;

if($ type!=“”) $ qry。=“AND type ='$ type'”;

而($行= mysql_fetch_array($ SQL))

回波$行[ '目的'];

echo $ row ['location'];

echo $ row ['type'];

我想如果不匹配没有其他人发现显示结果它过滤所有并逐一

回答

2

把那获取变量之后:

$sql = array(); 

if (!empty($purpose)) { 
    $sql[] = "purpose='$purpose'"; 
} 

if (!empty($type)) { 
    $sql[] = "type='$type'"; 
} 

if (!empty($location)) { 
    $sql[] = "location='$location'"; 
} 

$sql = implode(' AND ', $sql); 
$sql = "SELECT * FROM test" . (!empty($sql)?: " WHERE " . $sql: ''); 

编辑:看到您的意见后,

首先,您应该使用mysql_connect函数建立与数据库的连接。比方说,你有这段代码:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 

if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

在$ link var现在你有你的mysql句柄。这段代码必须在你想使用mysql连接的每一页的第一页。一旦你的SQL语句(在我第一次写的代码中,$ SQL VAR),使用此之后:

$result = mysql_query($sql); 

if (mysql_num_rows($result) === 0) { 
    echo 'Result not found'; 
} 

while ($row = mysql_fetch_array($result)) { 
    echo $row['purpose'] . '<br/>'; 
    echo $row['location'] . '<br/>'; 
    echo $row['type']; 
} 
+0

+1我用这个方法太,但mysql_real_escape_string()藏汉 – Waygood 2012-08-07 10:22:54

+0

这是正确的。应始终使用mysql_real_escape_string()。我没有说的原因是他说他是PHP的新手,所以我不知道他是否启用了magic_quotes。所以,如果启用,他会遇到mysql_real_escape_string()函数的问题。 – elxordi 2012-08-07 10:25:51

+0

先生我这样做,但它显示错误$ sql = array($ purpose,$ location,$ type);如果(!empty($ purpose)){ $ sql [] =“purpose ='$ purpose'”; } if(!empty($ Pro_type)){ $ sql [] =“type ='$ type'”; ($ empty($ location)){ } $ sql [] =“location ='$ location'”; } $ sql = implode('AND',$ sql); $ sql =“SELECT * FROM test”。 (!empty($ sql)?“WHERE”。$ sql:''); – 2012-08-07 13:37:25

0
$qry = "SELECT * FROM test WHERE 1=1"; 

if($purpose!="") 
    $qry .= " AND purpose='$purpose'"; 

if($location!="") 
    $qry .= " AND location='$location'"; 

if($type!="") 
    $qry .= " AND type='$type'";