gpt4 book ai didi

PHP、MySQL : How to retain and retrieve correct data when dealing with pagination

转载 作者:行者123 更新时间:2023-11-29 09:18:56 24 4
gpt4 key购买 nike

我有一个表单(由 25 个以上的字段组成),这些字段的值范围从很小的值到连接的字符串。这就像一个搜索工具。现在,当用户填写表单并提交信息时,他可以看到与表单中的条件匹配的所有相关数据。我一次向用户显示 15 条记录。我已经实现了分页,使用户也可以看到其他记录。

主要问题:

直到用户提交信息并返回第一组数据为止这部分都很好。当用户尝试通过分页转到第二页(或他选择的任何页面)时,就会出现问题。用户可以导航到其他页面,但不会触发正确执行从数据库中提取结果所需的查询。请注意,最初是在表单中执行 POST 操作,而分页执行 GET 操作。因此,我丢失了用户输入的表单值,我想保留这些值并使用这些值查询数据库。

我试图避免通过 GET 发送表单字段值,因为我担心数据可能超过 URL 中的最大允许值(并且因为它不如 POST 操作安全)。如果我尝试使用 POST 操作(例如更新查询),可以在结果页面上执行其他操作,这些操作可能会导致表单值丢失。 session 实际上不会起作用,因为用户可以选择在具有不同输入的不同选项卡中运行相同的表单来比较结果,这可能会导致旧查询的数据被新查询的数据替换。我没有想到 cookie,因为用户可能已经选择阻止它。几乎所有的选择似乎都用尽了。

那么我该怎么做才能保留表单值,运行正确的查询并返回相关值,而不管同一表单在不同浏览器选项卡/窗口中由同一用户处理的次数,而不使用 session (考虑到通过 GET 传递数据的限制,并且可能在 POST 操作中丢失数据)并且还能够在页面上执行其他事件?

提前谢谢您。

最佳答案

首先,GET 的安全性并不比 POST “差”。两者都根本不值得信任(修改 url 字符串更有吸引力,但绝不更难)...

您有几个选择:

其中之一是保留搜索结果的全局“存储”。您可以使用带有id, data的数据库表,其中数据是变量的序列化数组。然后,当有人提交搜索时,检查数据是否在表中。如果是这样,请使用该 ID。如果没有,则序列化数据并插入它(并获取 id)。然后重定向到如下页面:results.php?id=4。这样,他们可以共享链接,但仍保持相当安全,不会被篡改(他们无法更改搜索参数)。这里的缺点是 table 可能会变得很大。

另一种方法是对数据进行 Base64 编码,并将其作为获取参数传递 (base64_encode(serialize($data));)。如果您担心篡改或网址长度,我会尽量避免这样做。

另一个解决方案是拦截 JS 中的下一个链接点击,并使用它从隐藏变量向服务器发出 POST。

编辑:删除了 session 解决方案。意识到这无法解决您的问题。

关于PHP、MySQL : How to retain and retrieve correct data when dealing with pagination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com