【问题标题】:Search and pagination, how to get search term after form has been submitted搜索和分页,表单提交后如何获取搜索词
【发布时间】:2014-08-18 10:13:57
【问题描述】:

我正在创建一个带有分页的搜索功能。

我有一个表单,我得到它的 POST 值。然后我用它来搜索数据库并返回一组结果。

结果被分解成页面,用户可以点击视图中的页面链接。

我的问题是,如何在多个页面上持续搜索?

第一页是否应该获取 POST 值,而在后续页面上,我是否应该将搜索词放入 url,例如。

www.example.com/search/various-keywords/p2

然后获取术语并再次查询数据库,将结果拆分到任何页面,p2、p3、p4 等。

有没有更简洁的方法来做到这一点?

另外,在 url 中包含用户输入是否不安全?我应该以某种方式对其进行编码吗?

如果用户在浏览多个页面后单击返回,我会收到“确认表单重新提交”错误。我怎样才能防止这种情况发生?

【问题讨论】:

    标签: php html


    【解决方案1】:

    做到这一点的最佳方法是将搜索词设为 GET 变量,这样您就可以随时检索它并将其添加到您想要的任何 url。

    只要您避开搜索查询,您就应该可以确保用户安全,这也将消除重新提交表单错误。

    【讨论】:

    • 谢谢,所以我只需要更改表单方法即可获得?
    • @panthro 是的,然后您当然需要将该 GET 变量解析为您的分页网址!
    • @panthro 您需要更改表单方法 go GET,然后您应该在 $_GET['NAME OF THE INPUT'] 中有变量。如果不是这样,那就有其他问题了。
    • 谢谢,您的帮助最大。最后一件事,安全性:我应该如何“逃避搜索查询”?
    • 这取决于您连接到数据库的方式以及触发查询的方式。您能否发布一个示例,以便我查看最好的方法是什么?
    【解决方案2】:

    搜索应该使用 GET 方法,它是 RESTful 方式。将搜索词添加到 URL(确保已转义):

    http://www.example.com/search?q=example+search+term&page=1
    

    如果你有<form>,它会负责转义:

    <form action="search" method="GET">
        <input type="text" name="q" />
        <input type="submit" value="Search" />
    </form>
    

    比如你输入test &amp; test,就会变成search?q=test+%26+test

    【讨论】:

    • @panthro 更新了我的答案。
    • 谢谢,但我需要在搜索数据库时转义数据 - 对吗?
    • @panthro 没错。你可以在这里阅读:stackoverflow.com/questions/60174/…
    【解决方案3】:

    您可以通过 URI 传递搜索短语,例如 www.example.com/search?q=My+Search+Terms&amp;page=1,或者如果您认为合适,您可以使用 CookiesSessions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多