我有一个自定义的CMS我已经构建,在我的开发盒(Ubuntu/PHP5 +/MySQL5 +)上完美运行.
我只是将它移动到我的客户端的生产框中,现在所有表单提交都显示为空的$ _POST数组.
我找到了一个技巧来验证数据实际上正在使用file_get_contents('php://input');
并且数据在那里显示正常 - $_POST
/ $_REQUEST
数组总是为空.
我还通过firebug(application/x-www-form-urlencoded; charset=utf-8
)验证了内容类型标题是正确的.
无论表单是通过AJAX提交还是通过常规表单提交,都会发生此问题.
任何帮助是极大的赞赏!
til*_*tem 169
我知道这个问题是关于通过表单发布的POST,但是在使用JSON内容类型进行POST时寻找类似问题的答案.找到答案并希望分享它,因为它花了我很多时间.
当使用JSON内容类型时,$ _POST数组将不会填充(我认为只有多部分表单)
以下是纠正问题的方法:
$rest_json = file_get_contents("php://input");
$_POST = json_decode($rest_json, true);
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人!
小智 83
这是另一个可能的原因 - 我的表单是在没有WWW的情况下提交到domain.com.我已经设置了一个自动重定向来添加"WWW".$ _POST数组在此过程中被清空.所以我要做的就是提交给www.domain.com
小智 21
我遇到了类似的问题.原来是一个简单的修复.以我的形式
<form action ="directory"method ="post">
其中directory是...目录的名称.我的POST阵列完全是空的.当我在浏览器中查看网址时,结果显示为正斜杠.
在我的操作结束时添加正斜杠就可以了 -
<form action ="directory /"method ="post">
我的$ _POST数组又满了!
MrM*_*age 12
确保在php.ini中:
track_vars
(它仅适用于非常旧的PHP版本)设置为 On
variables_order
包含这封信 P
post_max_size
设置为合理的值(例如8 MB)suhosin.post.max_vars
并且suhosin.request.max_vars
足够大.我想我的第二个建议将解决你的问题.
小智 6
如果您要发布到目录中的 index.php 文件,例如 /api/index.php 请确保在您的表单中指定文件的完整目录,例如
这个
<form method="post" action="/api/index.php">
</form>
Run Code Online (Sandbox Code Playgroud)
或者
<form method="post" action="/api/">
</form>
Run Code Online (Sandbox Code Playgroud)
作品。
但这失败了
<form method="post" action="/api">
</form>
Run Code Online (Sandbox Code Playgroud)
小智 5
我可以使用 enctype="application/x-www-form-urlencoded" 来解决这个问题,因为默认值是“text/plain”。当您签入 $DATA 时,分隔符是“text/plain”的空格和“urlencoded”的特殊字符。
亲切的问候弗兰克
小智 5
我遇到了一个类似但略有不同的问题,花了2天时间来理解这个问题.
在我的情况下,POST数组也是空的.
然后用file_get_contents('php:// input')检查; 这也是空的.
后来我发现浏览器没有要求确认重新提交表单数据如果我刷新POST提交后加载的页面.这是直接刷新页面.但是,当我将表单URL更改为另一个时,它正确地传递了POST,并在尝试刷新页面时要求重新提交数据.
然后我检查了实际URL的错误.URL没有错,但它指向URL中没有index.php的文件夹,我在index.php检查POST.
在这里我怀疑从/到/index.php的重定向导致POST数据丢失并测试URL并将index.php附加到URL.
工作了.
在这里发布,所以有人会发现它很有帮助.
具有enable_post_data_reading
设置禁用会导致此问题。根据文档:
enable_post_data_reading
禁用此选项会导致不填充 $_POST 和 $_FILES。读取 postdata 的唯一方法是通过 php://input 流包装器。这对于代理请求或以内存高效的方式处理 POST 数据非常有用。
<form action="test.php" method="post">
^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
好吧,这很愚蠢,我会在公共场合让自己难堪,但我用 PHP 编写了一些测试脚本,当我的$_POST
数组为空时,StackOverflow 是我第一个查看的地方,但我没有找到我需要的答案。
我只写过
<form action="test.php">
Run Code Online (Sandbox Code Playgroud)
并忘记指定方法POST
!
我确信有人会窃笑,但如果这能帮助其他做同样事情的人,那么我不介意!我们都会时不时地这样做!
归档时间: |
|
查看次数: |
143261 次 |
最近记录: |