我是 PHP 新手,我正在尝试制作一个基本的搜索引擎。每次搜索后,我想在 HTML 页面中呈现结果摘要,其中包含满足查询的所有项目。每个项目摘要还应显示一个指向特定 HTML 页面的链接,其中包含有关该项目的详细信息(每个项目的页面)。这与 stackoverflow 或 google 或任何其他搜索引擎非常相似。
这可以用 PHP 实现吗?
我发现做到这一点的唯一方法是使用这样的代码自动为每个搜索生成 HTML 摘要代码(并且它有效),用于摘要页面(我必须执行类似的操作来生成 HTML 页面) :
<?php
function frontPagePresentation($theFirstName,$theLastName,$theUserName,$theSummary)
{
$fileName='ShowSearch'.$theUserName.'.html';
$theHTML="profileO".$theUserName.".html";
$theLinkText=$theFirstName." ".$theLastName;
$theFigureName="/NetBeansProjects/NewPhpProject/photos/".$theUserName;
$thePos=strpos($theSummary, ' ', 200);
$theSummary=substr($theSummary,0,$thePos);
$theSummary=": ".$theSummary;
//$file = fopen(,"w");
$str1="<table border=\"0\" width=\"75%\">";
echo $str1;
if (!($fp = fopen($fileName, 'w'))) {
return;
}
$str1="<table border=\"0\" width=\"75%\">";
$str2="<tr>";
$str3="<td width=\"20%\">";
$str4="<img src= $theFigureName alt=\" \" width= \"100\">";
$str5="</td>";
$str6="<td width=\"80%\">";
$str7="<a href= $theHTML > $theLinkText </a>";
$str8= $theSummary;
$str9="</td>";
$str10="</tr>";
$str11="</table>";
$len = fprintf($fp, '%s',$str1."\n");
$len = fprintf($fp, '%s',$str2."\n");
$len = fprintf($fp, '%s',$str3."\n");
$len = fprintf($fp, '%s',$str4."\n");
$len = fprintf($fp, '%s',$str5."\n");
$len = fprintf($fp, '%s',$str6."\n");
$len = fprintf($fp, '%s',$str7."\n");
$len = fprintf($fp, '%s',$str8."\n");
$len = fprintf($fp, '%s',$str9."\n");
$len = fprintf($fp, '%s',$str10."\n");
$len = fprintf($fp, '%s',$str11."\n");
}
?>
之后,我使用如下方式将此页面加载到 HTML 页面(将显示摘要的 HTML 页面)中:
$theUser=mysql_fetch_assoc($theUserSearch); $theFirstName=$theUser['名字']; $theLastName=$theUser['姓氏']; $theUserName=$theUser['用户名']; $theSummary=$theUser['summary'];frontPagePresentation($theFirstName,$theLastName,$theUserName,$theSummary);
$theHTML="ShowSearch".$theUserName.".html";
require($DOCUMENT_ROOT . $theHTML);
正如我所说,我是 PHP 新手,但这似乎不是一个非常聪明的方法。
每次我必须生成大量摘要以及与这些摘要相关的所有主页(因为将浏览器发送到 HTML 后,我无法再访问它们 - 我在客户端)并且每次搜索后我必须删除它们(与每个项目相关的摘要和 HTML 页面)。此外,目前还不清楚如何选择正确的时间来删除它(如何知道这些结果是否仍在使用?)
正确的做法是什么?
最佳答案
我认为你应该做的是尝试学习一个小型的 php 框架,比如 Codeigniter 或 Laravel。 基本上,它允许您“开箱即用”地将 URL 映射到特定代码。
例如,您可以仅使用 2 个不同的代码部分来管理此问题。 第一部分可以显示搜索表单。 第二部分可以显示结果。无需生成任何 html。如果您需要“缓存”数据,可以使用我列出的框架来完成。
总而言之,您可以使用这些框架执行以下操作: - 将 url/search 映射到文件 search.php - 将 url/search-result/* 映射到文件 search_result.php
请注意,“*”是通配符,如果网址以/search-result/... 开头,则始终会调用文件“search_result.php”
之后,在文件“search_result.php”中,您可以访问该通配符的值。
<小时/>向您提问:为什么需要生成 HTML 文件,其背后的需求是什么?是为了性能吗?与某人分享结果..?
(抱歉,我会使用评论功能,但我的声誉还不到 50)
<小时/>编辑 2:如果您有空闲时间,我建议您要么尝试学习 Laravel(变得“更酷”),要么尝试学习 code igniter(轻量级)。
第二个选项,如果您想更快地完成,请了解一些有关使用 Apache 重写 URL 的知识。例如,查看:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html (或在 Google 上搜索 Apache 重写教程)
您想要实现的目标是: - 获取/user/中的所有 URL 并将其发送到您的 search_user.php?stringToSearch=$1 php 脚本 - 请注意,$1 将被替换为 url 中“/user/”部分后面的内容 - 因此,如果您输入/user/bob,则 URL 基本上将是 search_user.php?stringToSearch=bob (但这将是“静默重定向”,因此用户仍会在 URL 中看到/user/bob。 - 然后,在您的 search_user.php 脚本中,您将执行
<?php
$stringToSearch = $_GET['stringToSearch'];
$theUser=mysql_fetch_assoc($stringToSearch);
...
这就是搜索引擎的“详细信息”部分。
对于“搜索和显示”部分,创建一个新脚本(如index.php)并基本上执行您在开始时发布的内容。但不是这一行:
$str7="<a href='$theHTML'> $theLinkText </a>";
用这个
$str7="<a href='http://www.yoursite.com/user/$theUserName'> $theLinkText </a>";
这有意义吗?
关于php - MySQL 搜索和 PHP 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152014/