我通常会自动上传脚本并在远程主机上对其进行测试,但是几天前,我分别安装了魔术三重奏Apache,PHP和MySQL,以更快地测试小问题。今天发现$ _POST数组完全为空。这是我正在测试的一种基本形式,并且可以在远程主机上正常运行,因此我检查了php.ini文件。我发现enable_post_data_reading设置为"关闭"并注释(尽管文档说默认情况下它已启用)。我以为是问题,但没有。我重新启动了Apache,甚至重新启动了笔记本,但$ _POST数组仍然为空,输出Notice: Undefined index: name in C:\Users\Marco\Proj\untitled\insert.php on line 3。
有人有什么建议吗?
(我只传递字符串,所以问题甚至不是post_max_size选项)
谢谢!
虽然没用,但我还是发布了代码
form.html
Show
insert.php
include"filterFunctions.php";
$data = array("name" => $_POST["name"],
"code" => $_POST["code"],
"price" => $_POST["price"],
"checkbox" => $_POST["show"]);
print_r($_POST);
[编辑]根据Swatantra K的建议,我检查了POST是否使用echo file_get_contents('php://input');可以正常工作,这是它显示的内容:
------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="name" Marco
------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="code" 35DW
------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="price" 99,9
------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="show" checked
------WebKitFormBoundarysqxwAAdf3E55NZUK--
Notice: Undefined index: name in C:\Users\Marco\Proj\untitled\insert.php on line 4
Notice: Undefined index: code in C:\Users\Marco\Proj\untitled\insert.php on line 5
Notice: Undefined index: price in C:\Users\Marco\Proj\untitled\insert.php on line 6
Notice: Undefined index: show in C:\Users\Marco\Proj\untitled\insert.php on line 7
Array ( )
我想这意味着它有效并且插入的值存在,但我仍然无法弄清楚问题所在和解决方案。同样是因为var_dump($_POST);仍显示array(0) { }。
有什么线索吗?
filterFunctions.php文件有什么作用?
$_POST是数组吗?我不知道这一点。
您的postmax_size值是多少?
您的表单中有两次name,但它仍会显示。在包含行之前尝试var_dump($_POST)和var_dump($_REQUEST)。
@JiriHrazdil它将过滤和清理字符串,但我仍然没有编写它(我什至没有调用该函数),因为由于这个"愚蠢"的问题而停止了,我不知道它来自哪里
@MuhammadAsif是10M,我将其设置为128M
php.ini中带注释的指令无效。但是您不必从配置文件和文档中找出指令。可以使用ini_get()或(更简单)phpinfo()检索运行时值。您也不需要猜测$_POST包含什么,可以使用var_dump()检查任何PHP变量。
@lvaroGonzlez当然,我实际上使用了var_dump(),对于所有$ _POST,它都是false
@aynber您说得对,这只是一个复制粘贴错误;)我尝试了var_dump($_POST),但显示了一个空数组(0)。 var_dump($_REQUEST)相同
关闭form标记的末尾缺少>。不知道这是否是原因。另外,您是否签入开发工具以确保该请求作为POST请求发送?如果执行echo $_SERVER[REQUEST_METHOD],会得到什么?应该是POST。
@KodosJohnson另一个复制粘贴错误,将对其进行编辑。你什么意思?如果我在中指定了method="post",它应该以POST的形式发送数据,并且使用$_POST我总是能够得到它(现在在本地主机上!)。可能我不明白你的意思
var_dump($_POST),false或array(0)显示什么? enable_post_data_reading怎么样?您可以编辑问题并在此处显示信息吗?
@lvaroGonzlez我设置了enable_post_data_reading = On,但它没有解决任何问题,这就是为什么我在Stack上问过这个;而var_dump($_POST)显示array(0) { }。我使用echo file_get_contents(php:input);编辑了问题,可能您可以帮助我
尝试设定
php_value post_max_size = 256M
或检查POST是否有效
echo file_get_contents('php://input');
我将post_max_size设置为256,但没有任何变化,而echo file_get_contents(php:input);不产生任何输出。这意味着它不起作用?
HTTP POST数据通常填充在$ _POST中,php:// input通常包含PUT数据。
好吧,有个好消息!我再次尝试使用echo file_get_contents(php:input);,并且它输出:------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="name" Marco ------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="code" 35DW ------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="price" 99,9 ------WebKitFormBoundarysqxwAAdf3E55NZUK Content-Disposition: form-data; name="show" checked ------WebKitFormBoundarysqxwAAdf3E55NZUK--包含所有插入数据,但紧接在它之后输出:Undefined index: XXX
@brigo不知何故我错过了线程。你设法得到了吗?
@SwatantraK幸运的是您回答了!不幸的是,我没有解决问题,因为我不是从哪里来的,我想您是一个能够理解它的人。我还尝试再次下载php7,甚至用php5代替它,但问题始终存在。您是否有任何线索为什么使用file_get_contents(php:input);似乎已经传递了POST数据,但是却没有使用$_POST?
您有两个名称为name =" name"的输入字段,因此您在php脚本中同时引用了这两个字段,因此请从中删除其中一个字段,并为表单定义type属性并分配值multipart。 希望这可以工作。
您说得对,但加倍的名称只是一个复制粘贴错误,我编辑了问题。"多值分配"是什么意思?分配空白value=""?
我的意思是在表单元素中使用enctype =" multipart / form-data"属性。
不幸的是,它没有解决问题,但是我现在将在我使用POST方法时使用它,谢谢;)