HTML 表单发布 $_REQUEST 数据消失


HTML form POST $_REQUEST data disappearing

我已经检查了几次这段代码。

以下是发送 POST 数据的表单:

<form action="/loginwizard" method="post">
<input type="hidden" name="action" value="login">
Email:
<br>
<input type="text" name="email" id="email" size=100>
<br>
Password:
<br>
<input type="password" name="pword" id="pword" size=100>
<br>
<input type="submit" value="Login">
</form>

我的 php 脚本使用:

print_r($_REQUEST);

其结果是:

Array()

这是使用:

PHP:版本 5.6.8,

系统: Windows NT XXX-PC 6.1 build 7601 (Windows 7 Home Premium Edition Service Pack 1( i586

Apache

: Apache/2.4.12 (Win32( OpenSSL/1.0.1l PHP/5.6.8

如果它算作任何内容,always_populate_raw_post_data设置为 0

最奇怪的事情是,如果我将 action="/loginwizard" 更改为 action="/loginwizard/index.php" 表单效果很好。我怀疑这是由于 Xampp 安装中的某些内容?

这是因为 DirectorySlash 指令,默认情况下设置为 On

它导致 Apache 使用尾部斜杠向 URL 发出外部重定向 - 并且该重定向后跟浏览器使用 GET 请求,因此您的 POST 数据丢失。

关闭该指令可能会产生安全隐患,请参阅手册中的警告 - 但这不是必需的,只需首先将表单操作指向带有尾部斜杠的目录:

<form action="/loginwizard/" method="post">
                          ^

然后请求将被传递到该目录的索引文件/脚本(通过 DirectoryIndex 指令(,在这种情况下是index.php,但没有外部重定向,因此您的 POST 数据将存在 - 以 $_REQUEST$_POST 表示。如果您只希望此脚本在通过 POST 请求接收数据时处理数据,那么我建议使用后者,更具体地说。否则,GET 和 COOKIE 数据可能会干扰,具体取决于 PHP 的 request_order/variables_order配置设置值。

根据您的评论。 /loginwizard是您的文件夹名称。Apache(可能使用默认的XAMPP安装(将对文件夹的调用(例如浏览器上的http://localhost/loginwizard(识别为对其DirectoryIndex脚本的调用。在您的情况下,索引.php文件。所以,它等于http://localhost/loginwizar/index.php

在 PHP 中,这是不同的情况。在请求脚本文件时,您应该真正查看脚本文件(以及它的正确路径(。例如,在您的情况下,表单提交。

我同意这里的@Chyan22

/登录向导可以是1( 文件夹名称(纯 PHP(2( 控制器名称(在 MVC 模型中(问题中没有明确提及。

在这两种情况下,表单操作都应指向实际目标。

因此,如果1( 请包含文件名的完整路径2( 如果尚未存在名为控制器的控制器,则登录向导创建它。然后加载相应的视图。