【问题标题】:how to make a search box in a website? [closed]如何在网站中制作搜索框? [关闭]
【发布时间】:2012-05-31 11:07:47
【问题描述】:

我设计了一个 php 语言的网站。我的网站上有一个搜索框。现在我想让它可用意味着如果用户想要搜索任何东西,他可以在那里输入并获得所需的结果。这是否需要使用 php 或者使用 HTML 标签很容易发生?

【问题讨论】:

  • 制作盒子就像 一样简单。搜索是困难的部分。你试过什么?
  • 我还没有尝试过任何东西...我需要帮助或有人有搜索代码???
  • 你需要学习如何编程,并付出一些努力。
  • 你来错地方了。这不是一个给你代码的网站——你给我们代码,我们帮助你改进它。
  • 我只是想知道它背后的逻辑......搜索栏是如何工作的??

标签: php mysql html


【解决方案1】:

基本搜索

网站上的大多数简单搜索不会搜索网站的结构,它们使用 MySQL 中的 LIKE 语法在相关数据库表的文本字段中查找术语。因此,如果您有一个博客,您可以让您的用户以这种方式在博客正文中进行搜索,并返回包含该术语的条目列表。通过一些巧妙的计数,您甚至可以按照术语出现的次数对该列表进行排序。

在这些情况下,当用户在搜索框中键入“taco”并按 Enter 键时,用户会被带到一个 PHP 页面,该页面在数据库上运行 LIKE 查询,并向用户显示包含 Taco 一词的博客文章他们。

真实搜索

严格来说,以上内容不是网站搜索。如果您的网站包含大量平面 HTML 页面和其他以某种方式不在数据库中的页面,您将需要抓取您的网站并通过搜索该数据来公开数据。 Google can set you up with this. 您还可以使用各种第三方工具。但是,学习如何自己构建网络爬虫可能是一个很好的练习。

以下是生成 URL 数据库的网络爬虫的基本步骤。这个兔子洞永远延伸,所以这只是您进行有效搜索所需的最低限度。

数据库

您的数据库将只有一个表。该表需要这些字段:

  • (整数)ID
  • (var_char) 网址
  • (文本)文本
  • (时间戳)LastChecked

爬虫

爬虫本身需要使用 cron 调度程序连续运行或每隔几分钟运行一次。它需要执行这些最基本的操作:

  1. 从数据库中加载 LastChecked 时间最早的页面。 (如果数据库中没有页面,则为根页面)
  2. 更新 LastChecked 时间。
  3. 使用 cURL 或其他方法从页面获取 HTML。
  4. 如果页面的文本内容已更改,请更新此 URL 的数据库记录。
  5. 在页面上找到所有锚标记<a href="http://www.mysite.com/taco/">Tacos!</a>,并创建一个包含所有这些 URL 的数组。
  6. 删除列表中所有不在您网站上的链接。 (否则,您将抓取整个网络)
  7. 如果该 URL 尚未在数据库中,请添加它。收集页面文本并同时插入。
  8. 从 1 开始重复。

显然,这只会创建所有页面的列表及其上的文本,但这足以使您能够使用基本搜索中的相同技术为您的网站创建搜索。

改进

您可以通过一些简单的方法改进上述爬虫。

  • 在表格上添加一个“错误”字段。如果 URL 有 HTML 错误代码且没有数据,则存储该代码。您可以从搜索中排除这些内容,同时它会像一个方便的链接检查器一样工作。
  • 您可以添加一个新表用于在您存储的位置进行排名:URL ID、计数和 URL 的检查状态。正常运行站点上的每个 URL 并更新此表上的计数。检查主列表中的所有 URL 后,将“计数”移动到主表中的新“排名”字段。转储排名表并重新开始。您将拥有一个不断更新的页面排名,您可以根据该排名对结果进行排序。
  • 您可以通过在每次抓取时存储整个页面内容的 MD5 哈希来收集自动“上次更改”数据,每当您重新抓取页面并且此 MD5 更改时,您都会存储新文本并添加到新的表更改时间的时间戳和 URL ID。使用此数据,您可以构建页面的预期更改率。然后,您可以将“偏移”字段添加到主表,并将其添加到 LastChecked 的所有时间戳。这样,您可以重新排列主列表,以比其他页面更频繁地重新检查某些页面,因为它们更新得更多。

【讨论】:

    【解决方案2】:

    最简单的方法是添加 Google(或其他搜索引擎)网站搜索。您不需要 PHP,但需要一点 HTML。

    Google Site Search

    虽然 google 站点搜索是最简单的解决方案,但您也可以使用自己的 PHP 搜索解决方案或使用 3rd 方脚本,例如这个

    3rd party search spider script(我自己也没有使用过,也没有附属,这是您可能在互联网上找到的一种脚本类型的示例,而不是推荐)

    【讨论】:

      【解决方案3】:

      您无法使用 HTML 标记执行此类功能。 PHP 在技术上 不是必需的(有替代方案),但在您的情况下,可能的答案是:是的,您需要使用 PHP。

      【讨论】:

      • ok .. 那你有这方面的知识吗??
      • 简单版:解析你的所有内容,用相应的 URI 将每个单词存储在你的数据库中,让你的用户查询那个数据库,用 URI 呈现他们。
      【解决方案4】:

      最好的事情是你应该使用谷歌搜索 实施谷歌搜索并不难。您必须提供有关您网站的信息,然后会生成一个脚本,您必须将其放在您的 html 页面上

      【讨论】:

        【解决方案5】:

        这是搜索栏的 php 代码

        家 html、body、div、span、applet、object、iframe、h1、h2、h3、h4、h5、h6、p、blockquote、pre、a、abbr、首字母缩略词、地址、大、引用、代码、del、dfn、 em,字体,img,ins,kbd,q,s,samp,小,罢工,强,sub,sup,tt,var,dl,dt,dd,ol,ul,li,字段集,形式,标签,输入,文本区域,字段集,图例,表格,标题,tbody,tfoot,thead,tr,th,td { margin:0;填充:0;边界:0;大纲:0; }

        $keyword=trim($_POST["keyword"]); 
        
        //check if the keyword is empty 
        
        if($keyword==""){ 
        
        echo"no keywords"; 
        
        exit; 
        
        } 
        
        
        
        //With above, you can give hints to your users when they forget to enter a keyword. Now let's go through all the files or articles in your website. 
        
        
        function listFiles($dir){ 
        
        $handle=opendir($dir); 
        
        while(false!==($file=readdir($handle))){ 
        
        if($file!="."&&$file!=".."){ 
        
        //if it is a directory, then continue 
        
        if(is_dir("$dir/$file")){ 
        
        listFiles("$dir/$file"); 
        
        } 
        
        else{ 
        
        //process the searching here with the following PHP script 
        
        } 
        
        } 
        
        } 
        
        } 
        
        
        
        //The following scripts read, process files and check whether the files contain $keyword. If $keyword is found in the file, the file address will be saved in an array-type variable. 
        
        function listFiles($dir,$keyword,&$array){ 
        
        $handle=opendir($dir); 
        
        while(false!==($file=readdir($handle))){ 
        
        if($file!="."&&$file!=".."){ 
        
        if(is_dir("$dir/$file")){ 
        
        listFiles("$dir/$file",$keyword,$array); 
        
        } 
        
        else{ 
        
        //read file 
        
        $data=fread(fopen("$dir/$file","r"),filesize("$dir/$file")); 
        
        //avoid search search.php itself 
        
        if($file!="search.php"){ 
        
        //contain keyword? 
        
        if(eregi("$keyword",$data)){ 
        
        if(eregi("(.+)",$data,$m)){ 
        
        $title=$m["1"]; 
        
        } 
        
        else{ 
        
        $title="no title"; 
        
        } 
        
        $array[]="$dir/$file $title"; 
        
        }
        
        } 
        
        } 
        
        } 
        
        } 
        
        } 
        
        //define array $array 
        
        $array=array(); 
        
        //execute function 
        
        listFiles(".","php",$array); 
        
        //echo/print search results 
        
        foreach($array as $value){ 
        
        list($filedir,$title)=split("[ ]",$value,"2"); 
        
        echo "$value"."
        \n"; 
        
        }  
                ?>
        hello
        </body>
        </html>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-18
          • 2010-09-07
          • 2012-11-27
          • 1970-01-01
          • 1970-01-01
          • 2011-10-07
          • 1970-01-01
          • 2015-07-20
          相关资源
          最近更新 更多