2014-01-16 369 views
0

我是PHP新手,我正在嘗試構建一個基本的搜索引擎。每次搜索後,我想在HTML頁面中顯示結果摘要,其中包含滿足查詢的所有項目。每個項目摘要還應提供指向特定HTML頁面的鏈接,並提供有關此項目的詳細信息(每個項目的頁面)。這與例如stackoverflow或谷歌或任何其他搜索引擎非常相似。MySQL搜索和PHP結果

這是可能在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 ['firstname']; $ theLastName = $ theUser ['lastname']; $ theUserName = $ theUser ['username']; $ theSummary = $ theUser ['summary'];

frontPagePresentation($ theFirstName,$ theLastName,$ theUserName,$ theSummary);

$ theHTML =「ShowSearch」。$ theUserName。「。html」;

require($DOCUMENT_ROOT . $theHTML); 

正如我所說的,我是PHP新手,但這似乎並不是一個非常聰明的方法。

每次我必須生成很多摘要和與這些摘要相關聯的所有主頁(因爲在將瀏覽器發送到HTML之後,我無法再訪問它們 - 我處於客戶端),並且在每次搜索之後我必須刪除它們(包括與每個項目相關的摘要和HTML頁面)。此外,目前還不清楚如何選擇正確的時間來刪除它(如何知道這些結果是否仍在使用?)

要做到這一點的正確方法是什麼?

回答

1

我認爲你應該做的是嘗試學習像Codeigniter或Laravel這樣的小型PHP框架。 基本上,它允許您「開箱即用」的功能是將URL映射到特定的代碼。

例如,您可以僅使用2個不同的代碼部分來管理它。 第一部分可以顯示搜索表單。 第二部分可以顯示結果。不需要生成任何html。如果你需要「緩存」你的數據,你可以使用我列出的框架來完成。

因此,簡言之,你可以用這些框架做的是一樣的東西: - 網址映射/搜索到的文件的search.php - 映射的URL /搜索結果/ *的文件search_result.php

注意,「*」是通配符,將始終調用文件「search_result.php」如果URL始於/搜索結果/ ...

之後,在文件中「search_result。 PHP「,你可以訪問這個通配符的值。


追問你:爲什麼你需要生成HTML文件,有什麼背後的需要?它是爲了表現嗎?與某人分享結果..?

(對不起,我會使用評論功能,但我的名聲並不在50尚未)


編輯2:我建議你所能做的就是儘量去學習Laravel(越來越「冷」 )或代碼點火器(輕量級),如果你有空閒時間。

第二種方法,如果您想更快地做到這一點,請學習一些關於使用Apache重寫URL的知識。例如,檢查出:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html (或搜索在谷歌的Apache重寫教程)

什麼你要實現與那就是: - 讓所有的URL與人類/用戶/並將其發送到您的search_user .php?stringToSearch = $ 1 php腳本 - 請注意,$ 1將被替換爲url 中的「/ user /」部分 - 如果您輸入/ user/bob,則URL基本上是search_user.php ?stringToSearch =鮑勃(但是這將是一個「沉默的重定向」,因此用戶仍然會看到在URL /用戶/鮑勃 - 那麼,在你的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>"; 

這是否有意義?

+0

我想創建HTML以與其他人分享結果。我不是唯一會使用搜索結果的人。 – DanielTheRocketMan

+0

您是否會通過電子郵件發送搜索結果並使用.zip發送搜索結果,還是將您的網站鏈接發送給他們? – mogosselin

+0

mogosselin我想與其他人分享我的網站的鏈接。比如和我一起工作的人。 – DanielTheRocketMan