我的搜索脚本出现问题。
基本上,如果找到结果但是如果DB(MySQL)中没有匹配则搜索一切正常,那么我的错误就不显示了...我错过了什么吗?继承人代码:
<?php
$term = $_GET['term'];
$sql = mysql_query("select * from search_e where content like '%$term%'");
while ($row = mysql_fetch_array($sql)){
$data = $row['content'];
$first_pos = strpos($data,$term);
if ($first_pos !== false) {
$output = substr($data,max(0,$first_pos - 100),200 + strlen($term));?>
<div>
<p class="ptitle"><?php echo $row["fn"]; ?></p><hr>
Brief summary of contents:
<hr class="hr">
<p style="padding: 5px;">
<i>"<?php echo $output; ?>" </i>..
</p>
</div><br><br>
<?php
}
else {?>
<div><?php echo "Sorry! No results were found using term: ".$_GET['term']."<br>Try using fewer Keywords"; ?></div>
<?php }?>
<?php
}
//close
mysql_close();
?>
这可能是一件简单的事情我做错了但我只是想弄清楚。我也知道代码很脏,但我的工作方式。
我也希望实现一个我发现浏览网络的小片段,它突出了一个短语中的特定单词。
function highlight($sString, $aWords) {
if (!is_array ($aWords) || empty ($aWords) || !is_string ($sString)) {
return false;
}
$sWords = implode ('|', $aWords);
return preg_replace ('@\b('.$sWords.')\b@si', '<strong style="background-color:yellow">$1</strong>', $sString);
}
这可以用到我的脚本吗?
答案 0 :(得分:2)
如果我清楚你想要完成什么,我会改变它:
if(mysql_num_rows($sql) > 0) {
while ($row = mysql_fetch_array($sql)) {
...
}
} else {
echo("No Records!");
}
barfoon是正确的。保护您的网站和后端数据库免受恶意用户的侵害。
$term = mysql_real_escape_string($_GET['term']);
修改强>
为了完整性,在回顾了你发布的内容之后,没有输出的原因是因为如果没有找到任何匹配,while
循环内的任何内容都不会被执行,那么你的if($first_pos !== false)
检查是没有意义的,除了对匹配的记录进行某种“健全性检查”。
要使用您发布的功能突出显示单词,请更改:
<i>"<?php echo $output; ?>" </i>
要:
<i>"<?php echo highlight($output, array( $term )); ?>" </i>
答案 1 :(得分:2)
你的逻辑存在缺陷:
为什么当PHP已经被数据库过滤时,PHP会重新搜索内容?同样,由于数据库查询不会返回您没有出现内容的任何行,因此您将永远不会看到错误消息,因为您的php搜索每次都会成功。
流程应该基本上是这样的:
$term = mysql_real_escape_string($_GET['term']);
$sql = "SELECT .... WHERE content LIKE '%$term%'";
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) == 0) {
echo "Sorry, no results found"
} else {
while ($row = mysql_fetch_assoc($result)) {
... do your output processing here ...
}
}