2010-06-18 69 views
3

我正在我的個人網站上工作,我想在那裏存儲我的顧客最近搜索結果限於此特定會話如何存儲搜索結果?

我正在使用PHP平臺和Javascripts

Here是什麼,我正好在看一個例子

以前搜索域名名稱爲特定會話,使用戶可以通過比較這些結果做出決定。

謝謝。

編輯 -嗯謝謝你的所有答案和建議。

,但如果你已經注意到 above example

它看起來像某種腳本的加載同一頁面上的新內容沒有刷新保持以前的搜索內容<div>,因爲它是。

如何實現這一點使用JavaScript的或某種DIV層的????

回答

2

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

,並在網絡上各種教程。或者你可以在這裏添加評論:)

+0

感謝這樣的描述性答案。這當然會在我的大腦中發現一些燈光。 – MANnDAaR 2010-06-23 15:22:54

+0

那麼,如果你覺得它很有趣,你可以接受它:)或至少給它一個:) – 2010-07-02 09:47:41

0

如果您的網站是一個Web應用程序,您永遠不會重新加載頁面或更改頁面,您可以將JavaScript保存在全球商店中(在頂級域名聲明如var StoredSearch = [];並使用它)。如果不是,那麼使用$_SESSION來存儲這個和AJAX來保存/加載從JavaScript到PHP的搜索。

1

將這個代碼靠近你的腳本(S)的開頭:

if (!isset($_SESSION['previous_searches']) || !is_array($_SESSION['previous_searches'])) { 
    $_SESSION['previous_searches'] = array(); 
} 

[編輯]
這段代碼檢查,如果存在與prevous搜索的數組,如果沒有它,將創建。
[/編輯]

然後,當用戶點擊把這個代碼搜索的接收程序的搜索頁面:

$_SESSION['previous_searches'][] = $_GET['what_ever_your_search_value_might_be']; 

[編輯]
這段代碼將當前的搜索值在與之前的搜索數組的值
[/編輯]

現在你把所有以前的搜索值$_SESSION['previous_searches']