为什么我必须使用POST而不是GET?

时间:2013-09-28 05:38:42

标签: php html post get

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

为什么?

3 个答案:

答案 0 :(得分:4)

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

使用POST表单时,不存在歧义:表单中的数据与URL分开发送,因此不需要覆盖查询字符串。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果您的表单如下

<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而不是追加。这个问题是因为含糊不清。要在这种情况下获得解决方案,请在表单中创建一个隐藏字段,您还要使用查询字符串发送这些字段。