我使用post方法创建了一个表单,如下所示:
<form name="indexFormn" id="indexForm" method="POST" action="page.php">
<div class="AdminformDiv">
<div class="errorbox">
<?php
if (!is_array($this->actionErrors)) {
echo $this->actionErrors;
}
?>
</div>
<div>
<table border="0" cellpadding="0" cellspacing="0" style="width:700px">
<tbody>
<tr>
<td style="width:128px">Amount</td>
<td colspan="2">$ <?php echo $this->price;?> USD<td style="width:270px"> </td>
</tr>
<tr>
.....
但问题是,当我在php代码中执行"var_dump($_SERVER['REQUEST_METHOD'])"时,我总是得到"get"而不是"POST",我真的不知道为什么?
我刚刚在使用Codeigniter的MVC框架时遇到了这个问题。以下是我的发现:
我表单中的Action属性不包括域前面的"www",但我实际的URL需要"www"。
即,我的表单有action="https://mydomain/something"
,但如果我转到那个URL,我注意到我的web主机在开头添加了www:https://www.mydomain/something
。(我使用DreamHost,这是我选择的设置)
我希望这也是你的问题——试图弄清楚真的很令人沮丧,但一旦我的操作和实际URL在"www"上达成一致,我的请求方法就从GET变成了POST。
基本上大多数HTTP请求都是GET请求。并且$_SERVER['REQUEST_METHOD']评估默认的GET方法。
您可以使用if($_POST)来检查它是否是POST。(这是一个包含POST数据的数组。所有页面都设置了$_GET,所以if($_GET)无法判断它是否是GET)
当您提交表单时,您肯定会在"page.php"上获得POST方法。尝试获取此页面上的方法,但找到了。
根据@Brian Stork的回答,这是因为发生了某种重定向。重定向可能是由于以下原因:
- HTTPS/HTTP重定向。例如,如果需要,
certbot
会激活此功能。您可以在.conf
文件中更改此项,然后在systemctl restart apache2
中更改 - 拖尾斜线重定向
www
子域重定向- 其他可能的重定向
所以请检查所有这些。如果你正在做一个类似Slack机器人的机器人,向你的应用程序发送请求,请检查他们发送的确切url,以避免重定向。