表单GET工作,表单POST没有

时间:2011-04-02 08:42:36

标签: php forms .htaccess post get

我有一个简单的表单,在method="GET"时按预期行事,但在method="POST"时却没有。

FORM:

<form action="/login" method="POST">
<input type="text" name="user" maxlength="30" value="">
<input type="password" name="pass" maxlength="30" value="">
<input type="hidden" name="sublogin" value="1">
<input type="submit" value="Login" /> 
</form>

如果我将变量回显到屏幕(var_dump( $_POST )var_dump( $_GET )),当method =&#34; POST&#34;时,我得到一个空数组。当方法=&#34; GET&#34;我得到一个具有相应名称/值对的数组(user,pass,sublogin ...)

要了解的事情:

  • .htaccess处理文件名(action)的.php,如果文件实际上不存在,它还会将所有内容重定向到index.php。
  • 网站上的其他表单与POST结合使用
  • 表单在我的本地计算机上正常运行
  • 使用POST时,Firebug显示302暂时移动
每个请求添加

.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .$ index.php

感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

如果“/ login”不存在,并且htaccess重定向(不重写url),则所有POST数据都将丢失。 GET数据被保留,因为它们是URL的一部分。

答案 1 :(得分:1)

这个问题甚至不符合我的想法。

一个类设置在处理错误后销毁$ _POST数组,但无论如何都在破坏我的$ _POST数组。仅在具有PHP 5.3的计算机上发生(警告导致该类行为异常),服务器运行5.2。

谢谢你,Briedis试图提供帮助。对不起,我带你去追逐!

当然,解决方案是编写一种更好的方法来处理该类中的警告,而不允许$ _POST数组被销毁。

答案 2 :(得分:0)

这是一个边缘案例答案,可能有益于未来的用户研究此主题。

在我的情况下,解决方案是修复我在本地php.ini文件中创建的错误配置。为了在开发工作期间运行Imagick图像处理脚本,我已经将设置更改为更自由。

为了尝试将max_post_size从默认值8M增加,我将设置更改为40.问题是没有明确说明单位&#34; 40&#34;提到。未指定时,php.ini使用BYTES作为单位。我添加了&#34; M&#34;单位后缀为&#34; 40&#34;并且$ _POST操作开始按预期工作。

为了将来参考,单位后缀可以是&#34; K&#34;,&#34; M&#34;或&#34; G&#34;,当然没有引号,或者,对于字节,缺席。您可以在PHP手册中阅读这些单元:

https://secure.php.net/manual/en/faq.using.php#faq.using.shorthandbytes