UPDATE START
本示例使用頁面重新加載。如果你想在沒有頁面重新加載的情況下做到這一點,你可以,但你必須使用AJAX加載新的搜索結果。但是,這不是PHP的問題。我建議看看jQuery庫,因爲它可以很容易。教程:http://docs.jquery.com/Tutorials和這一個(http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Rate_me:_Using_Ajax)。
當加載通過AJAX,頁面呈現的結果(在我的例子search.php中)數據應爲結果的一部分,而不是整個HTML頁面只返回HTML。這通常是我的教程的第一部分(沒有會話)。
但我真的認爲在這裏的AJAX並不是真的需要。會話更可靠,並允許從舊版/移動瀏覽器訪問您的頁面,但並不總是JS能正常工作。
更新的最終
那麼好。那麼我們來試試簡單的教程吧。對不起,如果太簡單了,但我不知道你的確切水平。
PHP有稱爲會話的機制。實際上,它們只是存儲在服務器上的字節。服務器通過從客戶端瀏覽器讀取會話cookie來知道每個客戶端的哪個會話。
並不是每一頁都使用會話(不是每個頁面都需要它,會話使用的服務器空間,即使只是暫時的),會話默認情況下不啓用。要打開會話使用命令
<?php session_start(); ?>
在大多數情況下,這是無論是PHP框架,運行使用,或放在靠近你的網站的頂部。如果你想以某種方式驗證用戶,會話肯定是需要的。或者在你的情況:)
要訪問會話,您可以使用超全局變量$_SESSION
(你可以在任何地方訪問它超全局手段)。它是一個數組,所以會話元素將會是$_SESSION['search']
等
作爲例子,讓我們假設你的頁面看起來像
<html>
...
<form action="search.php" method="post">
Search: <input type="text" name="searchQuery" />
<input type="submit" value="Search" />
</form>
...
</html>
這個非常表格將發送用戶搜索到文件命名爲search.php中。它可以是表單所在的同一個文件 - 在最簡單的情況下,當您將代碼和HTML放在一個文件中時。初學者經常使用這個模式,儘管這是不可取的,因爲結果是一團糟,很難進一步改變。
在search.php中的話,你會使用類似的代碼:
<?php
if (!empty($_POST['searchQuery'])) //we have a new search
{
$result = do_search($_POST['searchQuery']);
}
?>
然後,下面的地方,你會顯示搜索結果($result
變量)。 do_search()
函數是你的搜索機制,我想你有它的地方。你可能沒有把它包裝在一個函數中,然後我建議像這樣創建它,它更有用。
function do_search($searchQuery)
{
...
return $result;
}
想起來,上面的代碼還沒有使用會話呢。讓我們添加在會話中保存以前的搜索結果。然後,該代碼可能看起來像:
<?php
session_start(); //Starting session
//let's create session variable used to store results
if (!isset($_SESSION['searches']))
$_SESSION['searches'] = array();
if (!empty($_POST['searchQuery'])) //we have a new search
{
if (isset($_SESSION['searches'][$_POST['searchQuery']]) //User already searched on this value, delete previous result from sesion
{
unset($_SESSION['searches'][$_POST['searchQuery']]);
}
$result = do_search($_POST['searchQuery']);
//Let's add new search on the begining of session array to make iterations easier.
$result = array($_POST['searchQuery'] => $result); //convert result to same format as session table
$_SESSION['searches'] = array_merge($result, $_SESSION['searches']);
}
?>
在顯示器上,你現在不是在$結果變量作爲前迭代,而是你會做這樣的事情
foreach ($_SESSION['searches'] as $query => $result)
{
...//display of single result
}
我沒有測試過以下代碼,它不是一個完整的程序。沒有描述顯示結果和做實際搜索的部分,但我想你已經準備好了。而且,這只是無數可能性的一種可能方法。但我希望這有助於:)
可能的修改 - 現在我總是執行搜索,即使用戶已經搜索過這個術語。您可能想要從緩存中接收結果而無需第二次搜索。然後代碼將看起來像
if (isset($_SESSION['searches'][$_POST['searchQuery']]) //User already searched on this value
{
$result = $_SESSION['searches'][$_POST['searchQuery']];
unset($_SESSION['searches'][$_POST['searchQuery']]);
}
else
{
$result = do_search($_POST['searchQuery']);
}
有關在我的例子中使用的會話和其他一些結構更深入的信息,我建議PHP手冊
http://pl.php.net/manual/en/book.session.php
,並在網絡上各種教程。或者你可以在這裏添加評論:)
感謝這樣的描述性答案。這當然會在我的大腦中發現一些燈光。 – MANnDAaR 2010-06-23 15:22:54
那麼,如果你覺得它很有趣,你可以接受它:)或至少給它一個:) – 2010-07-02 09:47:41