PHP-如何存储搜索结果?

我正在我的个人网站上工作,我想在此存储我的客户最近限于该特定会话的搜索结果.

我正在使用PHP平台和Javascript.

Here是我正在查看的示例:

它存储该特定会话的先前搜索的域名,以便用户可以通过比较那些结果来做出决定.

谢谢.

编辑-好,感谢您的所有回答和建议.

但是如果你已经注意到
above example

看起来好像某种脚本在同一页面上加载新内容而无需刷新它并保持以前的搜索内容< div>照原样.

如何使用javascript或某种div层实现此目标?

最佳答案
更新开始

本示例使用页面重新加载.如果要在不重新加载页面的情况下进行操作,则可以,但是必须使用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框架运行,或者放在您网站的顶部附近.如果您想以某种方式对用户进行身份验证,则绝对需要会话.或者你的情况:)

要访问会话,您可以使用superglobal $_SESSION变量(superglobal意味着您可以在任何地方访问它).这是一个数组,因此会话元素例如$_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']);
}
?>

在显示中,您现在将不再像以前那样对$result变量进行迭代,而是执行类似的操作

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

以及网络上的各种教程.或者您可以在此处添加评论:)

相关文章

1.第一步 设置响应头 header(&#39;Access-Control-Allow...
$.inArray()方法介绍 $.inArray()函数用于在数组中搜索指定的...
jquery.serializejson.min.js的妙用 关于这个jquery.seriali...
JS 将form表单数据快速转化为object对象(json对象) jaymou...
jQuery插件之jquery.spinner数字智能增减插件 参考地址:http...