2010-06-18 105 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']