【问题标题】:Why do I have to use POST instead of GET?为什么我必须使用 POST 而不是 GET?
【发布时间】:2013-09-28 05:38:42
【问题描述】:

当我使用<form action="code.php?id=1" method="post"></form> 时,表单 id 在 URL 中传递。但是,当我通过将 'POST' 替换为 'GET' 来编写相同的代码时,id 不会传递给 URL。

为什么?

【问题讨论】:

    标签: php html post get


    【解决方案1】:

    当您提交 GET 表单时,表单中的值将附加到 action URL,作为 ? 之后的“查询字符串”。在此类表单的action 属性中指定现有查询字符串会产生歧义。浏览器不会合并两个查询字符串,它们只是丢弃旧的查询字符串并根据表单构建新的查询字符串。

    使用 POST 表单,没有歧义:表单中的数据与 URL 分开发送,因此无需覆盖查询字符串。

    但是,最好不要混合使用这两种参数,因此解决方案是始终将额外参数作为隐藏字段包含在内,然后它可以同时用于 GET 和 POST 表单:

    <input type="hidden" name="id" value="1">
    

    【讨论】:

    • 备注一下,get消息也是有长度限制的,长消息最好用post发给你
    • @jonasvermeulen 是的,我决定不讨论何时使用其中一种的原因,因为有很多话要说,而且很多帖子已经说过了。
    【解决方案2】:

    更好的方法是在隐藏字段中传递id

    <form action="code.php" method="post">
        <input type="hidden" value="1" name="id" />
    </form>
    

    【讨论】:

      【解决方案3】:

      如果你的表格如下

      <form action="code.php?id=1" method="post">
      <input typ"text" name="username" />
      <input type="submit" />
      </form>
      

      code.php 中的示例脚本

      <?php
      print_r($_GET);
      print_r($_POST);
      print_r($_REQUEST);
      ?>
      

      您将在 post 数组中获取表单数据,在 get 数组中获取 url 参数,在请求中,您将在一个数组中获取 get 和 post 数据。但是,如果您从 post 更改为 get 方法,您的表单数据将使用 url 添加而不是附加。这个问题是因为模棱两可。要在这种情况下获得解决方案,请在您的表单中创建一个隐藏字段,您还想使用查询字符串发送这些字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        相关资源
        最近更新 更多