gpt4 book ai didi

php - 表单参数 : in query string and in input - any different?

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:17 26 4
gpt4 key购买 nike

如果将 POST 形式的参数放在查询字符串中,是否有区别:

<form action="mysite.com/index.php?myparam=myvalue">
...more inputs here
</form>

并将其作为隐藏输入?

<form action="mysite.com/index.php">
<input type="hidden" value="myvalue">
...more inputs here
</form>

我正在使用 Joomla,但实际上它完全不相关。我看到他们的教程中有一些“到处都是”,但这真的重要吗?如果我使用其中任何一个,会有什么影响?

注意:我忘记将 action=post 放在表格中,这完全改变了问题。然而,随着有趣的答案的出现,它们不仅仅回答了我的问题,我决定让它们保持原样。

最佳答案

是的,在技术上和概念上是有区别的。这种差异对您的影响方式取决于处理请求的应用程序服务器(好吧,当然还有您的偏好)。

技术差异:

在大多数应用程序服务器中,参数的来源(URL 或 FORM)决定了它们的最终位置。在 PHP 中,url 参数分别进入 $_GET$_POST 超全局变量中的表单字段。如果您不关心技术差异,可以使用 $_REQUEST superglobal 来方便您。

概念差异:

区分两种请求参数是最符合逻辑的:

  • 呈现页面所必需的,即如果您再次发送请求,它们不会更改数据库中的任何内容。
  • 这样会更改数据库,即具有破坏性(它们是浏览器询问您是否可以在点击刷新时再次发布页面的原因)。

前者称为幂等,应该通过GET方式传递。一个很好的例子是搜索字符串或记录 ID。无论您的点击刷新频率如何,数据库都不会受到影响。

另一种参数是应该存储在数据库中的数据。从实际更改数据库内容的意义上说,这将是破坏性的。这些参数应通过 POST 传输。

顺便说一句,这也是决定您的表单应该是 method="GET" 还是 method="POST" 的好方法:每当表单输入是在数据库上幂等,使用 GET 形式。例如,用户搜索 表单应该是 GET,用户首选项 表单应该是 POST。


现在您可以争辩说,在您的情况下,记录 ID 是幂等的,但表单中的其他信息不是。在这种情况下,我发现最习惯使用

<form action="mysite.com/index.php?id=1234" method="POST">
<!-- ...more inputs here -->
</form>

因为 GET mysite.com/index.php?id=1234 会请求那个记录。

虽然没有必要那样做 - 当然您可以将 ID 作为隐藏输入发布。

不过,您应该注意两件事:

  • 在这种情况下,HTTP 服务器日志不会显示用户发布到哪条记录的证据(如果您关心的话)。
  • 这种分离只适用于 POST 表单。 GET 表单忽略 action 属性中的参数,您必须将它们全部指定为隐藏输入字段。

关于php - 表单参数 : in query string and in input - any different?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868282/

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