在SESSION中发布/重定向/获取并保存数据库查询

时间:2012-01-17 23:28:50

标签: php mysql session post-redirect-get

我是发布/重定向/获取的新手。我正在编写第一个让我发现PRG需求的真实网站。 所以我编写并获得了执行以下操作的代码:

1) user enters a search string

2) we search the database and find their desired search results

3) if we found their search results successfully, we alter the database -- 
   a 'frequency of lookups' -- to indicate the user searched and found what 
   he was looking for

4) then display the results he searched on

我发现在浏览器中刷新页面导致用户再次看到相同的搜索结果,但我们增加了“查找频率” - 用户在数据库中查找的频率有限 - 所以如果用户刷新页面次数太多次,他们按小时计算数据库查找次数。那是我几天前发现Post / Redirect / Get的时候。

我现在正在浏览网站并更改所有改变数据库并显示结果并将其切换到PRG的页面。这是新流程:

1) user enters a search string

2) we search the database and find their desired search results

3) if we found their search results successfully, we alter the database -- 
   a 'frequency of lookups' -- to indicate the user searched and found 
   what he was looking for

4) PRG to a 'results' page

5) then display the results he searched on

我遇到了一个问题。我需要以某种方式“传递”上面步骤(2)的搜索结果 到我为实现PRG而创建的步骤(5)中的新“结果”页面。

所以我的问题是 - 有一种'最常见'的方法吗?在阅读时我已经看到'将结果保存在.CSV文件中'并且'将数据库搜索结果保存在SESSION中。'

我想在SESSION中保存搜索结果然后在我为PRG添加的'GET'页面上显示结果,我将从会话变量中读取搜索结果并显示它们。

我的意思是我想这样做:

$result = mysql_query($query, $theDbServer);
$_SESSION['theSearchResults'] = $result.

然后在“显示”页面上,回读$ _SESSION ['theSearchResults']中的搜索结果 并使用以下方式显示它们:

 $result = $_SESSION['theSearchResults'];
 $row = mysql_fetch_row($result);

这是正常的做法吗?而且我怀疑我无法将原始$ result保存在如上所述的会话变量中 - 但我也不确定如何将$ result放在$ _SESSION中 - 这通常是怎么做的?

1 个答案:

答案 0 :(得分:2)

假设您不想让最终目标网页进行查询(当然不会减少其配额),那么您将需要使用会话。

保存为CSV不是标准的,并且不能很好地扩展。我会将查询结果解析为更加用户友好的形式(简单的类或列表或任何你需要的)。然后我会将课程而不是读者存储到会话中。您可能希望在离开结果页面时清除该部分会话(特别是如果它是大量数据)。

这假设您正在使用原始php。有许多框架具有针对这种情况的特征(您希望将一个数据从一个页面传送到下一个页面)。