HTML表单POST $ _REQUEST数据消失

时间:2016-02-13 01:14:36

标签: php html forms

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

以下是发送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家庭高级版Service Pack 1)i586

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

如果它有任何意义,则always_populate_raw_post_data设置为0

3 个答案:

答案 0 :(得分:1)

  

关于这个的ODDEST事情是,如果我将action =“/ loginwizard”更改为action =“/ loginwizard / index.php”该表单效果很好。我怀疑这是由于Xampp安装中的某些原因造成的?

这是因为DirectorySlash指令,默认设置为Map

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

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

Student Id Card

然后请求将被传递到该目录的索引文件/脚本(通过On指令),在这种情况下是<form action="/loginwizard/" method="post"> ^ ,但没有外部重定向,因此您的POST数据将出现在DirectoryIndexindex.php中。如果您只希望此脚本使用数据(如果通过POST请求接收),那么我建议使用后者,更具体一点。否则,GET和COOKIE数据可能会发生干扰,具体取决于PHP的$_REQUEST / $_POST配置设置值。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我同意@ Chyan22这里

/ loginwizard可以是 1)文件夹名称(在纯PHP中) 2)控制器名称(在MVC模型中) 这个问题没有明确提及。

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

因此,如果是的话 1)请包含文件名的完整路径 2)如果尚未存在控制器命名,则loginwizard创建它。然后加载相应的视图。