3

我在下面有一个脚本,它从我的网页上的 mysql 数据库中读取显示的信息,请问如何使匹配的结果加粗?例如,如果我搜索“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: '.$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/>';
    }
?>
4

3 回答 3

7

例如,假设您有一个数组$results,其中包含一些 MySQL 查询的结果。

假设您在 field 内搜索name

您可以使用一个非常简单str_replace的方法来实现这一点:

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

$search这会将(应该是您的搜索字符串)的所有实例替换为<b>$search</b>within $result['name']

在你的情况下:

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/>';

}

顺便说一下(重要)

你在这里做什么:

$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

于 2011-09-05T15:23:21.540 回答
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/>';
}
于 2011-09-05T15:29:34.913 回答
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+,但可以重写为 5.2-

于 2011-09-05T15:39:32.007 回答