2011-09-05 70 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-