【问题标题】:Maintaining search form input维护搜索表单输入
【发布时间】:2012-08-06 17:59:54
【问题描述】:

我正在构建一个 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分钟 - 会议 - 文件 (隐藏字段显然不是一个选项,因为它们需要按下表单提交按钮才能与请求一起发送)

我想在这里发表你的意见,你们中的一些人一定已经遇到过这个问题......

【问题讨论】:

  • 您可以使用 jQuery 发送 AJAX $.post() 请求,然后刷新屏幕上 <div> 元素内的数据。

标签: php post state search-form


【解决方案1】:

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

请注意,这样一来,您需要使用不同的LIMIT 子句反复查询数据库。

【讨论】:

  • 最好还是一遍又一遍地查询数据库(每次查询 20 个结果的子集)然后获取大约 400 000 条记录,然后从中选择 20 条...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多