首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何才能成功地实现“记住此操作”例程?

我如何才能成功地实现“记住此操作”例程?
EN

Stack Overflow用户
提问于 2013-05-15 22:42:08
回答 1查看 174关注 0票数 1

我真的很难开始这项任务。

我在同一页上有两个表单。

第一个表单提供了一个搜索框,用户可以输入几个搜索过滤器中的一个,如地址、邮政编码、街道、地段,甚至州名称。

如果搜索产生多个结果,则用户可以单击Advanced Search链接。

Advanced Search包含多个复选框,允许用户选中一个或多个框以缩小搜索结果范围。

这很好用。

现在的问题是给予用户“保存”他们的搜索结果的能力,可能使用cookie,以便用户下次加载这个页面时,他/他上次保存的搜索结果将成为他/她的默认搜索页面,直到他们更改它或直到他们删除删除这个最后操作的cookie。

这更像是记住用户上次搜索此页面时的最后一次操作。

到目前为止,我的想法是首先将SQL查询存储在php代码中的会话变量中。

然后,当用户单击我要创建的"Remember This Action"按钮时,我可以让我的php代码将该会话变量值保存在cookie中。

换句话说,我会这样做:

代码语言:javascript
运行
复制
$tsql = "SELECT  Name, FeatType,
         MinX, MinY, MaxX, MaxY
         FROM mytable
ORDER BY ListOrder, Name DESC";

Session("LastAction") = $tsql

然后让"Remember This Action"按钮发布到我的php页面,这样做很简单:

代码语言:javascript
运行
复制
Cookies("LastAction") = Session("LastAction")
Cookies("LastAction").Expires = Date() + 365 ' expires in one year

最后,我可以在我们的页面上提供一个"Repeat Last Action“按钮,它所做的就是

代码语言:javascript
运行
复制
$tsql = Request.Cookies("LastAction")
$stmt = sqlsrv_query( $conn, $tsql);

我遇到的许多问题之一是,我甚至无法超越这个查询:

代码语言:javascript
运行
复制
$tsql = "SELECT  Name, FeatType,
         MinX, MinY, MaxX, MaxY
         FROM mytable
ORDER BY ListOrder, Name DESC";

Session("LastAction") = $tsql

我一直收到"invalid“错误

代码语言:javascript
运行
复制
  Session("LastAction") = $tsql

显然,我在php上非常,非常弱,但我努力工作来提高速度。

非常感谢您的帮助

我在这里已经做了一些初步的工作。

我能够在语法上做到这一点:

代码语言:javascript
运行
复制
$_SESSION["LastAction"] = $tsql;

我还可以设置正确的

代码语言:javascript
运行
复制
setcookie('LastAction',$_SESSION["LastAction"],time() + (86400 * 365)); // 86400 = 1 year

那么,这一行在php中的等价性是什么呢?

代码语言:javascript
运行
复制
 $tsql = Request.Cookies("LastAction")

上面是我最好的尝试,但我不认为它是正确的。

我基本上是想把一个"Remember Last Action"按钮放在另一个页面上。

然后使用:

$tsql = Request.Cookies("LastAction")

若要将值从另一页抓取到此页中,请执行以下操作。

EN

回答 1

Stack Overflow用户

发布于 2013-05-17 21:44:13

您在这里所做的基本上是将SQL查询保存到cookie (用户可编辑的数据)。

代码语言:javascript
运行
复制
setcookie('LastAction',$_SESSION["LastAction"] /*We're saving the value, not the session. */,time() + (86400 * 365)); // 86400 = 1 year

无论如何,我建议将搜索标志作为serialized数组保存到cookie中,然后在需要重用该数据时使用该数据进行普通搜索,而不是浪费时间根据保存在cookie中的sessid恢复会话。

基本上,你可以这样做:

代码语言:javascript
运行
复制
$saved_search = serialize($search_opts);
setcookie('SavedSearch',$_SESSION["LastAction"],time() + (86400 * 365));

为了扭转这一过程,

代码语言:javascript
运行
复制
$saved_search = $_COOKIE['SavedSearch'];
$search_opts = unserialize($saved_search);

您需要从您自己的代码中找出在哪里拦截$search_opts,以及如何在以后使用它们来运行搜索,因为我看不到使该部分滴答作响的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16568103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档