当我使用<form action="code.php?id=1" method="post"></form>
时,表单 id 在 URL 中传递。但是,当我通过将 'POST' 替换为 'GET' 来编写相同的代码时,id 不会传递给 URL。
为什么?
当您提交 GET 表单时,表单中的值将附加到action
URL,作为?
. 在此类表单的属性中指定现有查询字符串action
会产生歧义。浏览器不会合并这两个查询字符串,它们只是丢弃旧的查询字符串并基于表单构建新的查询字符串。
使用 POST 表单,没有歧义:表单中的数据与 URL 分开发送,因此不需要覆盖查询字符串。
但是,最好不要混合这两种参数,因此解决方案总是将额外参数包含为隐藏字段,然后它将适用于 GET 和 POST 表单:
<input type="hidden" name="id" value="1">
更好的方法是通过id
隐藏字段。
<form action="code.php" method="post">
<input type="hidden" value="1" name="id" />
</form>
如果您的表格如下
<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 添加而不是附加。这个问题是因为模棱两可。要在这种情况下获得解决方案,请在您的表单中创建一个隐藏字段,您还想使用查询字符串发送这些字段。