【问题标题】:php search modulephp搜索模块
【发布时间】:2013-02-13 20:11:20
【问题描述】:

在为我的网站创建搜索结果页面时,我需要您的帮助。它是一个简单的 php cms 站点,只是从 mysql 中获取内容。 使用简单的查询来获取搜索

$search = $_GET["search"];
$search = preg_replace('#[^0-9]#i','',$_GET['search']);

$searchresult = mysql_query ("SELECT * FROM pages WHERE pgcontent LIKE '%$search%'");   

    while ($row = mysql_fetch_array($searchresult)) 
    {
        echo '<h3>' . $row["PageTitle"] . '</h1>';
        echo '<p>' . $row["PageContent"] . '</p><br /><br />';  
    }

我想要做的不是显示整个页面内容,而是显示任何单词与搜索词匹配的行......或者只是找到搜索词的页面的前几行。

朋友们能帮我做这件事吗?这将是一个很大的帮助......谢谢你

【问题讨论】:

  • 欢迎来到 Stack Overflow!请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你选择 PDO here is a good tutorial.
  • 您的代码对 SQL 注入非常开放。
  • 只是为了澄清:您的查询返回多行字符串,并且您想从该字符串中选择匹配的一行。听起来像 grep 这样的命令的工作......
  • 为什么会有searchresult 和searchcontent ?哪个是对的?
  • War10ck 在他的评论中涵盖了这一切。切换到 mysqli 或 PDO 并使用准备好的语句。切换并不难。事实上,只需忘掉你所知道的关于 mysql_ 函数的一切。

标签: php mysql search content-management-system


【解决方案1】:

您可以在 $row["PageContent"] 上运行后期处理

类似

while ($row = mysql_fetch_array($searchresult)) 
{
    echo '<h3>' . $row["PageTitle"] . '</h3>';

    $position = strpos($row["PageContent"], $search);
    $snippet = substr($row["PageContent"], $position - 100, $position + 100);

    echo '<p>' . $snippet . '</p>';
    echo '<br /><br />';  
}

从匹配术语的开头开始您的 sn-p 100 个字符并在术语开始后的 100 个字符处结束。显然,您可以将其调整为您想要的任何内容,但这是基本思想。

如果我错过了重点,请告诉我,我可能会更新。

【讨论】:

  • 没问题。您还可以使用 strpos 的变体(最后出现的 strrpos 等)将字符串按句子开头、整个单词等切分,这样您就不会得到奇怪的句子片段。 ...要写的东西...明白我的意思吗?您应该使用 strpos,如果遇到困难,请在 SO 上发布一个关于如何确保您的 sn-p 被修剪为人类可读句子的新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2011-04-01
  • 1970-01-01
相关资源
最近更新 更多