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