在多级列表中传递变量

时间:2011-05-28 18:49:40

标签: php variables

这个问题是关于后台办公室的数据列表,包括订单,页面数量,过滤器等变量。

我过去常常通过GET在页面之间传递这个变量,但我遇到了很多麻烦,并改为在会话中存储这些变量。我不介意书签问题,因为它是一个后台工具。一切都还可以,直到今天:我正在查看列表,我更改了一个过滤器,然后我想回到以前的结果。我的自然姿势是按下浏览器“后退”按钮。当然,我没有接受以前的结果,因为我已经覆盖了会话。

那么,这是最好的方法吗?不仅要考虑用户的体验,还要考虑编码设施并避免错误。

当我通过URL传递变量时,我发现了麻烦,特别是在两个或三个级别列表中:

  • 有很多变数和很多变数 我必须把它们放在哪里:链接 编辑项目,表单的动作, 后退链接,页面导航链接......
  • 有些变量可以有相同的含义 名称(即每个级别都有一个 页数)。做起来容易 这个错误,尤其是当你 必须在内部编写新内容 以前的脚本。
  • 我不能只使用 查询字符串,因为有 我必须改变一些的情况 var的值(即,在分页中 导航链接我要改变 number_of_pag变量)。

我认为最好的解决方案不是“嘿,如果你多注意,你就不会犯这些错误”。有没有我尚未发现的系统?伟大的人是如何做到的?

也许实现自动渲染链接的方法?

感谢。

1 个答案:

答案 0 :(得分:1)

这些类型的变量的位置是查询字符串。不仅需要书签,而且通常需要导航到给定的内容,就像您使用后退按钮发现的那样。但是,如果您确实要缩写查询字符串,请考虑使用标记或标识符。

也就是说,在会话中,请考虑使用这样的系统:

// this represents the query data for one page request
$_SESSION['queryid']['38hghfd85423lk'] = array(
    'all' => array('the => 'query', 'data'),
    'is' => array('stored', 'like', 'this)
);

// this represents the query data for another page request
$_SESSION['queryid']['432423jkgrfsd9'] = array(
    // .... other data ....
);

现在您的查询字符串将如下所示:

http://www.example.com/index.php?queryid=38hghfd85423lk

或者像这样:

http://www.example.com/index.php?queryid=432423jkgrfsd9

当然,您使用GET数据中给出的queryid来标识要从$_SESSION使用的查询数据。现在浏览器后退按钮将起作用。

问题可能是,在长时间会话之后,$_SESSION中的查询缓存将变得非常大。要缓解这种情况,您可以限制缓存的长度,比如最后100页。如果用户尝试返回超过100页,您会注意到他们的queryid不再存在,并且能够通知他们页面已过期。

如果要支持书签,可以将queryid和数据保存到数据库中。当然,您可能仍需要考虑修剪方法 - 例如,清除一个月未使用的查询。然而,这对用户来说可能是令人沮丧的。