2011-09-05 84 views
3

我有一個腳本,下面顯示的信息從我的網頁上的MySQL數據庫讀取,我怎麼能使匹配的結果加粗?例如,如果我搜索「john」如何使顯示結果爲「john blogs」。感謝php mysql搜索腳本,如何使匹配結果大膽

這裏是腳本到目前爲止,

<? 
mysql_connect ("localhost", "user","pass") or die (mysql_error()); 
mysql_select_db ("databasename"); 

$term = $_POST['term']; 

$sql = mysql_query("select * from tablename where category like '%$term%' or title like '%$term%' or postcode like '%$term%' or info like '%$term%' "); 

while ($row = mysql_fetch_array($sql)){ 
    echo '<br/> Category: '.$row['category']; 
    echo '<br/> Title: '.$row['title']; 
    echo '<br/> Address: '.$row['add1']; 
    echo '<br/> Street: '.$row['street']; 
    echo '<br/> City: '.$row['city']; 
    echo '<br/> Postcode: '.$row['postcode']; 
    echo '<br/> Phone: '.$row['phone']; 
    echo '<br/> E-Mail: '.$row['email']; 
    echo '<br/> Website: '.$row['website']; 
    echo '<br/><br/>'; 
    } 
?> 
+0

拜託,這裏是腳本? – ajreal

回答

7

比方說,比如你有一個包含從你的MySQL查詢結果很少數組$results

假設您正在尋找name

你可以使用一個非常簡單的str_replace來實現這一目標:

foreach($results as $result) 
    echo str_replace($search,'<b>'.$search.'</b>',$result['name']); 

這將替換內$result['name']<b>$search</b>$search所有實例(這應該是你的搜索字符串)。

你的情況:

while ($row = mysql_fetch_array($sql)){ 

    echo '<br/> Category: '.str_replace($term,'<b>'.$term.'</b>',$row['category']); 
    echo '<br/> Title: '.str_replace($term,'<b>'.$term.'</b>',$row['title']); 
    echo '<br/> Address: '.$row['add1']; 
    echo '<br/> Street: '.$row['street']; 
    echo '<br/> City:  '.$row['city']; 
    echo '<br/> Postcode: '.str_replace($term,'<b>'.$term.'</b>',$row['postcode']); 
    echo '<br/> Phone: '.$row['phone']; 
    echo '<br/> E-Mail: '.$row['email']; 
    echo '<br/> Website: '.$row['website']; 
    echo '<br/><br/>'; 

} 

BY THE WAY(重要)

,你在這裏做什麼:

$term = $_POST['term']; 

$sql = mysql_query("select * from tablename where category like '%$term%' or title like '%$term%' or postcode like '%$term%' or info like '%$term%' "); 

是極其危險的。 $_POST['term']來自用戶,如果該用戶填寫';DROP TABLE tablename --會怎麼樣?您的查詢會突然變爲某種可能導致整個表格丟失並刪除所有信息的內容。

您應經常檢查你的用戶輸入,這裏是一個很好的教程說明一些方法如何:

http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

+0

感謝promt回覆,但我正在努力實現這一點。我是新來的PHP,我不知道我的搜索字符串是什麼。我正在嘗試使用戶輸入的匹配結果返回爲粗體。提前致謝。 –

+0

在你的例子中,這將是'$ _POST ['term']'或'$ term'。 – Kokos

+0

再次感謝,最後一件事,我的代碼中的abouts會插入這段代碼?謝謝 foreach($ results as $ result) echo str_replace($ term,''。$ term。'',$ result ['title']); –

1
function highlight($term, $result) { 
    return str_replace($term, '<strong>'.$term.'</strong>', $result); 
} 

然後就爲你做這個要顯示的每個項目。

while ($row = mysql_fetch_array($sql)){ 
echo '<br/> Category: '.highlight($term, $row['category']); 
echo '<br/> Title: '.highlight($term, $row['title']); 
echo '<br/> Address: '.$row['add1']; 
echo '<br/> Street: '.$row['street']; 
echo '<br/> City: '.$row['city']; 
echo '<br/> Postcode: '.highlight($term, $row['postcode']); 
echo '<br/> Phone: '.$row['phone']; 
echo '<br/> E-Mail: '.$row['email']; 
echo '<br/> Website: '.$row['website']; 
echo '<br/><br/>'; 
} 
+0

感謝理查德,在我的代碼約在我會插入你的代碼,在此先感謝 –

+0

@John我已經更新了我的答案,告訴你它將如何工作。它基本上與Kokos的答案相同,但是調用一個函數而不是重複代碼(通常是一個好主意)。您應該注意他關於SQL注入的警告。 –

0

您也可以在所有字段中突出顯示一次。恩。

while ($row = array_map(function($res) use ($search){ 
     str_replace($search,'<b>'.$search.'</b>',$res); 
    },mysql_fetch_array($sql))){ 
    //your print 
} 

它需要PHP 5.3+但是可以rewriten以5.2-