Php mysql搜索脚本,如果搜索词与我的数据库条目不完全匹配,如何使单个搜索词变为粗体

时间:2011-09-06 10:53:06

标签: php mysql database

到目前为止,我的脚本如下。如果完全匹配,则以粗体显示用户搜索词。例如。如果用户搜索“john bloggs”,那么它将以粗体返回。而如果用户搜索“john”,那么它将显示john bloggs条目,但它不会以粗体显示。任何帮助将不胜感激。

<?
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: '.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/>';

}
?>

4 个答案:

答案 0 :(得分:2)

我正在使用以下内容:

/**
 * higlights search string with HTML5-mark
 *
 * @param string needle search string
 * @param string haystack original text, may contain search string
 * @return string original text with additional HTML-mark highlighting
 */
function highlight($needle, $haystack)
{
    return preg_replace('/(' . preg_quote($needle, '/') . ')/i', '<mark>$1</mark>', $haystack);
}

用法:

echo '<br/> Category: ' . highlight($term, $row['category']);

答案 1 :(得分:0)

试试这个:

echo '<br/> Category: '.($term == row['category'] ? '<b>'.$term.'</b>' : $row['category']);

答案 2 :(得分:0)

我猜你面临的问题是%term%。在数据库中,它将查找任何匹配的任何位置。因此,如果您尝试将字符串替换为“foo bar”,它将仅搜索匹配的字符串“foo bar”而不是“foo”或“bar”。

您可以执行以下操作     while($ row = mysql_fetch_array($ sql)){         $ terms = explode(“”,$ term);         foreach($ terms为$ wordToReplace)         {          $ category = str_replace($ wordToReplace,'<b>'。$ wordToReplace。'</b>',$ row ['category']);          $ title = str_replace($ wordToReplace,'<b>'。$ wordToReplace。'</b>',$ row ['title']);          $ postCode = str_replace($ wordToReplace,'<b>'。$ wordToReplace。'</b>',$ row ['postcode']);         }          //然后展示它         echo'
分类:'。$ category;         echo'
标题:'。$ title;         echo'
地址:'。$ row ['add1'];         echo'
街:'。$ row ['street'];         echo'
城市:'。$ row ['city'];         echo'
邮编:'。$ postCode;         echo'
电话:'。$ row ['phone'];         echo'
电子邮件:'。$ row ['email'];         echo'
网站:'。$ row ['website']; }

注意:此代码未经过测试!

答案 3 :(得分:0)

如果你只是寻找快速和功能性的东西你应该没事。如果你想稍微改进一下,你可能想要使用样式而不是<b>标签,并使用PHP的strcasecmp()函数

例如:

$field = (strcasecmp($term, $row['foo'])==0) ? "<span class='bold'>".$row['foo']."</span>" : $row['foo'];