我想从json主体(即这是而不是表单数据)的JS客户端收到POST请求,并将.gigs(javascript)数组保存到文件,然后检查.password字段。这是我的代码(基于Receive JSON POST with PHP)php:从POST接收json并保存到文件
$json_params = file_get_contents("php://input");
if (strlen($json_params) > 0 && isValidJSON($json_params)){
/* json_decode(..., true) returns an 'array', not an 'object'
* Working combination: json_decode($json_params) WITH $inp->password
*/
$inp = json_decode($json_params);
} else {
echo "could not decode POST body";
return;
}
$password = $inp->password;
// echo $password;
if ($password == "****") {
$gigs = $inp['gigs'];
// WAS $res = file_put_contents('gigs.json', json_encode($gigs), TEXT_FILE);
$res = file_put_contents('gigs.json', json_encode($gigs));
if ($res > 0) {
echo "Success";
return;
} else {
if (!$res) {
http_response_code(500);
echo "file_put_contents error:".$res;
return;
} else {
http_response_code(500);
echo "Error: saved zero data!";
return;
}
}
}
else {
// http_response_code(403); // (2)
echo "Password invalid";
return;
}
我发现的是,
如果我注释掉if声明并取消echo $password;然后正确的密码是有
如果我取消第2行,我想要做的,然后我回来一个500和错误日志引用Illegal string offset 'password'上面行(1)。没有这个,我得到一个"Success"(全部为相同的密码)。
我不明白发生了什么,也不知道如何安全地获取200,403和500错误消息。
2017-04-17
Simon H
+0
为什么你在阅读'php:// input'的时候说'POST request'?也''inp =“我从来没有设置”;' - >这就是'null'通常是什么。 –
+0
这可能是我滥用的词。我正在从客户端发送ajax POST。我根本不懂PHP,所以我可能会做一些非常错误的事情。 –
+0
那么,你做的大部分事情都是错误的 –