0

我正在构建一个 CRUD 应用程序,需要实现两种形式的搜索:

基本搜索功能接受一个关键字并在数据库表的每一列中搜索该特定关键字。搜索关键字作为 URL 参数以 www.website.com/category?q=keyword 的形式发送。这里没什么特别的...

在高级搜索表单中,用户最多可以指定 5 个关键字,对于每个关键字,他们可以从数据库表中选择需要搜索该关键字的列。简而言之:高级搜索表单最多需要 5 个关键字列对。此表单通过 POST 提交(因为我想避免达到最大 URL 字符数的限制)。

结果需要分页,每页显示10条记录。我在网上搜索了分页类,但是它们都获取数据库表中的记录总量,然后返回需要为该页面显示的选择。因为我在这里处理大量数据,所以我不能这样做。

这导致我创建自己的分页类,它接受请求的页码(如果应用,来自搜索表单的 $_GET 和 $_POST 参数)。根据它计算结果的总数,计算总页数,决定是否有“上一页”和“下一页”......它还返回一个 SQL 语句(带有 LIMIT 和 OFFSET 值)以执行特定的模型(使用我自己的 MVC 架构(又名无框架))。这使我只能获取请求页面的结果。

问题:当用户浏览页面时(也就是单击“上一个”或“下一个”按钮),$_POST 数据丢失。但是,需要这些值才能获得另一个页面的结果。

这个特殊的问题让我想到了论坛上的搜索表单。我提交了关于其中一个的查询,并注意到 URL 附加了一个搜索 ID:example.com/forum/search.php?searchid=5672532

这意味着表单数据以某种方式保存在某个地方......我在想最好的选择可能是什么,从最合理到最不合理: - 每个搜索输入保存例如 30 分钟的数据库表 - 会话 - 文件(隐藏字段显然不是一个选项,因为它们需要按下表单提交按钮才能与请求一起发送)

我想在这里发表您对此的看法,你们中的一些人一定已经遇到过这个问题......

4

1 回答 1

0

将搜索参数保存在 JSON 或在数据库中编码的 URL 中一段时间​​(有一个expiry列)似乎是最好的解决方案。

请注意,以这种方式,您需要使用不同的LIMIT子句一遍又一遍地查询数据库。

于 2012-08-06T18:18:40.317 回答