【问题标题】:HTML form sending get AND post. Redirecting with 302HTML 表单发送获取和发布。使用 302 重定向
【发布时间】:2016-11-03 20:00:43
【问题描述】:

当用户点击提交时,它同时向脚本发送一个 post 和 get 请求。 Post返回302 Found,Get返回200,但是表单提交后print_r显示一个空数组。我不知道为什么会这样。

这是在使用 PHP 5.4 和 Apache 2.4 的 AWS Linux 实例上运行的。

代码如下:

<?php
print_r($_REQUEST);
?>
<!doctype html>
<html>
<meta charset="UTF-8" />
<title>Login</title>
<head>

</head>
<body>

<p>Please login:</p>

<form action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post">
<table>
    <tr>
        <td>
            username
        </td>
        <td>
            <input type="text" name="username" id="username" style="width:400px;"> (case sensitive)
        </td>
    </tr>
    <tr>
        <td>
            password
        </td>
        <td>
            <input type="password" name="password" id="password" style="width:400px;">
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <input type="submit" value="submit">
        </td>

    </tr>
</table>
</form>


</body>
</html>

当我点击提交时,这是我在 FF 开发工具中看到的:

【问题讨论】:

  • 一个 HTML 表单不能“同时使用两种方法”提交。很确定它是您的表单/浏览器发送的 POST 请求,服务器发送的 302 响应,然后是浏览器的 GET 请求。现在为什么会出现 302,从目前显示的代码中还不清楚。对于初学者,我会检查表单的 action 属性实际包含的内容。
  • “它正在向脚本发送帖子和获取请求”不,这绝对不会发生。重新检查你的假设。
  • 您可以考虑将action 留空。它将提交到当前 URL。
  • @CBroe:理论上你可以混合 post 和 get,如果你在 post 动作中添加一个查询字符串,不是吗?
  • @Gerfried 仍然会使其成为一个 POST 请求,它恰好转到一个包含查询字符串的 URL。当您在 PHP 中处理数据时,它会相应地填充 $_POST 和 $_GET - 但是请求标头第一行中的方法仍然是 POST。

标签: php html apache post get


【解决方案1】:

您没有发送 POST 和 GET - 仅发送 POST。 然后,您的服务器以重定向 (302) 响应,这使您的浏览器通过 GET 加载给定的 URL。此时您的数据丢失(由于重定向)并且数组为空。问题是为什么您的服务器指示重定向。 最可能的原因是您的 htaccess 文件。可以发一下吗?

【讨论】:

  • 我进行了搜索,但没有任何 .htaccess 文件。是否可能在配置文件中?
  • 你试过不同的浏览器吗?我读到这可能是由丢失/错误的数据长度属性引起的。
猜你喜欢
  • 2015-12-25
  • 2012-08-19
  • 1970-01-01
  • 2015-12-05
  • 2021-02-13
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多