1

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

我在同一页面上有 2 个表格。

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

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

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

这很好用。

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

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

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

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

换句话说,我会做这样的事情:

$tsql = "SELECT  Name, FeatType,
         MinX, MinY, MaxX, MaxY
         FROM mytable
ORDER BY ListOrder, Name DESC";

Session("LastAction") = $tsql

然后将"Remember This Action"按钮发布到我的 php 页面,该页面只需执行以下操作:

Cookies("LastAction") = Session("LastAction")
Cookies("LastAction").Expires = Date() + 365 ' expires in one year

最后,我可以在我们的页面上提供一个“重复上次操作”按钮,它所做的只是

$tsql = Request.Cookies("LastAction")
$stmt = sqlsrv_query( $conn, $tsql);

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

$tsql = "SELECT  Name, FeatType,
         MinX, MinY, MaxX, MaxY
         FROM mytable
ORDER BY ListOrder, Name DESC";

会话(“LastAction”)= $tsql

我不断收到“无效”错误

  Session("LastAction") = $tsql

显然,我在 php 方面非常非常薄弱,但努力提高速度。

非常感谢您的帮助

我在这里做了一些小步骤。

我能够得到这个语法正确:

$_SESSION["LastAction"] = $tsql;

我也可以设置正确的

setcookie('LastAction',$_SESSION["LastAction"],time() + (86400 * 365)); // 86400 = 1 year

现在,这一行在 php 中的等价物是什么?

 $tsql = Request.Cookies("LastAction")

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

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

然后使用:

$tsql = Request.Cookies("LastAction")

将另一个页面中的值抓取到此页面中。

4

1 回答 1

0

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

setcookie('LastAction',$_SESSION["LastAction"] /*We're saving the value, not the session. */,time() + (86400 * 365)); // 86400 = 1 year

无论如何,我建议不要将搜索标志作为序列化数组保存到 cookie 中,然后使用该数据进行常规搜索当你需要重用它时。

基本上,你可以这样做:

$saved_search = serialize($search_opts);
setcookie('SavedSearch',$_SESSION["LastAction"],time() + (86400 * 365));

为了扭转这个过程,

$saved_search = $_COOKIE['SavedSearch'];
$search_opts = unserialize($saved_search);

您将需要从您自己的代码中找出在哪里捕获 $search_opts 以及如何在以后使用它们来运行搜索,因为我没有看到使该部分打勾的代码。

于 2013-05-17T13:44:12.760 回答