2012-08-07 48 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'";