我在下面有一个脚本,它从我的网页上的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/>';
}
?>
答案 0 :(得分:7)
比方说,您有一个数组$results
,其中包含MySQL查询的一些结果。
假设您在字段name
内搜索。
您可以使用非常简单的str_replace
来实现此目的:
foreach($results as $result)
echo str_replace($search,'<b>'.$search.'</b>',$result['name']);
这会在$search
内用<b>$search</b>
替换$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
答案 1 :(得分: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/>';
}
答案 2 :(得分: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 -