我有以下代码,可使用email参数构建网址。 之后,我会在json.php页面上收到ID和用户名的JSON值,并将它们分配给我的$ _SESSIONS。
login.php
require "conn.php";
$url=('http://example.com/json.php');
$str = file_get_contents($url ."?email=".$email);
$json = json_decode($str, true);
$_SESSION['id']=$json[0]['id'];
$_SESSION['username']=$json[0]['username'];
header('Location: main.php');
json.php
require "conn.php";
$email = $_GET['email'];
$mysql_qry = "SELECT id, username FROM usertable WHERE email = '$email'";
$result = ($conn->query($mysql_qry));
$rows = array();
while($r = mysqli_fetch_assoc($result)) {
$rows[] = $r;
}
print json_encode($rows);
我的系统以这种方式运行良好,但是我想使用POST方法而不是GET。我已经尝试了很多方法,但是到目前为止我还没有成功。
如果有人可以帮助我,我会非常感激。
答案 0 :(得分:0)
file_get_contents()不适合POST请求,并且默认情况下使用GET请求,因此为什么所有数据都位于$ _GET而不是$ _POST中。 (值得注意的是,我敢说欺骗_file_get_contents()来执行POST请求是可能,但这是一个愚蠢的主意,您不应该这样做。)
当您需要POST请求时,请使用curl。
在我讲话时,想提一下class Bla:
def __init__(self):
self._method_lock = asyncio.Lock()
async def only_run_once(self):
async with self._method_lock:
await do_other_stuff()
[...]
需要进行urlencoding,它应该是$str = file_get_contents($url ."?email=".$email);
但是,当您要执行POST请求时,请使用curl,因此不要使用:
$str = file_get_contents($url ."?email=".urlencode($email));
做:
$str = file_get_contents($url ."?email=".urlencode($email));
现在它将降落在$ _POST ['email']而不是$ _GET ['email']
另一件事,您在这里容易受到SQL注入
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => [
"email" => $email
]
]);
$str = curl_exec($ch);
curl_close($ch);
要解决此问题,您应该将$ conn移植到PDO,此处有一个不错的指南:https://web.archive.org/web/20190330214051/http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers