这个脚本可以搜索,但我希望它突出显示搜索到的部分。
示例:输入:'Hel'
输出1:"大家好!"
输出2:"我的生活就像地狱"
输出的页面不需要突出显示hello和hell的部分"hel"(不同的字体颜色或背景颜色)
这是我的代码:
<?php
mysql_connect("xxxxxx","xxx","xxxxx") or die("Kan geen verbinding maken met de server!");
mysql_select_db("xxxx") or die("Kan de ingevoerde database niet vinden");
$query = $_GET['query'];
$min_length = 0;
if(strlen($query) >= $min_length){
$query = htmlspecialchars($query);
$query = mysql_real_escape_string($query);
$raw_results = mysql_query("SELECT * FROM product
WHERE (UPPER(naam) LIKE UPPER('%".$query."%'))
OR (UPPER(titel) LIKE UPPER('%".$query."%'))
OR (UPPER(druk) LIKE UPPER('%".$query."%'))")
or die(mysql_error());
if(mysql_num_rows($raw_results) > 0){
echo "<table >";
echo"<th>Auteur</th> <th>Titel</th> <th>Druk</th>";
while($results = mysql_fetch_array($raw_results)){
echo "<tr><td>" .
'<a href="bio.php?naam='.$results["naam"].'">' . $results["naam"] . '</a><br>' .
"</td> <td>" .
'<a href="article.php?id='.$results["id"].'">' . $results["titel"] . '</a><br>' .
"</td><td>" .
$results['druk'].
"</td></tr>";
}
echo "<table>";
}
else{
echo "<div style='"text-align:center; padding-bottom: 10px; '"><br /><br />Geen resultaten, probeer het opnieuw of <a href=index.php>ga terug</a></div>";
}
}
else{
echo "Minimum length is ".$min_length;
}
?>
有人能帮我告诉我下一步该做什么吗?
首先将您的代码写入
- 使用mysqli或PDO而不是mysql*
- 从不信任请求参数SQL-IJECTION$query=$_GET['query']
当你纠正了你的代码,只需在while循环中使用一个简单的函数,例如
$results["naam"] = str_replace($_GET['query'],$results["naam"],'<span class="highlight">'.$results["naam"].'</span>';
您可以使用函数str_replace()
$search_str=$_GET['query'];
$replace_str='<font color="#value">'. $search_str.'</font>'; //you can change any style you like
$outdata=str_replace($search_str,$replace_str,$results["titel"]);
echo "<tr><td>" .
'<a href="bio.php?naam='.$results["naam"].'">' .
$results["naam"] .
'</a><br>' .
"</td> <td>" .
'<a href="article.php?id='.$results["id"].'">' .
$outdata . //the outdata with your style
'</a><br>' .
"</td><td>" .
$results['druk'].
"</td></tr>";
像这样http://php.net/manual/de/function.str-replace.php
尝试
$highlightPart = str_replace($query, '<span class="myHighlightClass">' . $query . '</span>', $results["naam"]);
在您的脚本中:
<?php
mysql_connect('xxxxxx','xxx', 'xxxxx') or die('Kan geen verbinding maken met de server!');
mysql_select_db('xxxx') or die('Kan de ingevoerde database niet vinden');
$query = $_GET['query'];
$min_length = 0;
if(strlen($query) >= $min_length){
$query = htmlspecialchars($query);
$query = mysql_real_escape_string($query);
$raw_results = mysql_query('SELECT * FROM product
WHERE (UPPER(naam) LIKE UPPER(''%' . $query . '%''))
OR (UPPER(titel) LIKE UPPER(''%' . $query . '%''))
OR (UPPER(druk) LIKE UPPER(''%' . $query . '%''))')
or die(mysql_error());
if(mysql_num_rows($raw_results) > 0){
echo '<table>';
echo '<th>Auteur</th> <th>Titel</th> <th>Druk</th>';
while($results = mysql_fetch_array($raw_results)){
$highlightNaam = str_replace($query, '<span class="myHighlightClass">' . $query . '</span>', $results["naam"]);
$highlightTitel = str_replace($query, '<span class="myHighlightClass">' . $query . '</span>', $results["titel"]);
echo "<tr><td>" .
'<a href="bio.php?naam=' . $results['naam'] . '">' . $highlightNaam . '</a><br>' .
'</td> <td>' .
'<a href="article.php?id=' . $results['id'] . '">' . $highlightTitel . '</a><br>' .
'</td><td>' .
$results['druk'].
'</td></tr>';
}
echo '<table>';
}
else{
echo '<div style='"text-align:center; padding-bottom: 10px; '"><br /><br />Geen resultaten, probeer het opnieuw of <a href=index.php>ga terug</a></div>';
}
}
else{
echo 'Minimum length is ' . $min_length;
}
?>