Возврат JSON на основе отправленной переменной через POST - PullRequest
0 голосов
/ 17 марта 2020

У меня есть следующий код, который создает URL с параметром электронной почты. После этого я получаю JSON значения идентификатора и имени пользователя, доступные на странице json. php, и присваиваю их своему логину $ _SESSIONS.

. 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. Я пытался во многих отношениях, но пока мне это не удалось.

Если кто-то может мне помочь, я очень ценю это.

1 Ответ

0 голосов
/ 17 марта 2020

file_get_contents () не подходит для POST-запросов и использует GET-запросы по умолчанию, поэтому все ваши данные попадают в $ _GET вместо $ _POST. (в частности, возможно , если позволите сказать, обманом file_get_contents () выполнить запрос 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));

do:

$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...