基于通过POST发送的变量返回JSON

问题描述 投票:0回答:1

我具有以下代码,该代码使用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。我已经尝试了很多方法,但是到目前为止我还没有成功。

如果有人可以帮助我,我会非常感激。

php json curl post
1个回答
0
投票

file_get_contents()不适合POST请求,并且默认情况下使用GET请求,因此为什么所有数据都位于$ _GET而不是$ _POST中。 (特别是,我敢说欺骗[_possible来执行POST请求,但这是一个愚蠢的主意,您不应该这样做。)]]当您需要POST请求时,请使用curl。

[我在开会的时候,想提一下$str = file_get_contents($url ."?email=".$email);需要urlencoding,应该是$str = file_get_contents($url ."?email=".urlencode($email));

但是当您想发出POST请求时,请使用curl,所以不要:

$str = file_get_contents($url ."?email=".urlencode($email));

做:

$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);

现在它将降落在$ _POST ['email']中,而不是$ _GET ['email']

另一件事,您在这里容易受到SQL注入的攻击

$mysql_qry = "SELECT id, username FROM usertable WHERE email = '$email'";

要解决此问题,您应该将$ conn移植到PDO,此处有一个不错的指南:https://web.archive.org/web/20190330214051/http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
© www.soinside.com 2019 - 2024. All rights reserved.