PHP - 如果搜索失败,则显示错误

时间:2011-05-19 20:08:26

标签: php search-engine

我的搜索脚本出现问题。

基本上,如果找到结果但是如果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);
}

这可以用到我的脚本吗?

2 个答案:

答案 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)

你的逻辑存在缺陷:

  1. 检索包含搜索字词的数据库中的所有行
  2. 循环遍历这些行:
    2A。检索一行 2B。使用PHP搜索AGAIN行作为搜索词
    2C。显示内容(如果已找到),或显示错误(如果不是)。为每一行执行此操作
  3. 为什么当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 ...
       }
    }