php - 根据通过 POST 发送的变量返回 JSON
问题描述
我有以下代码使用 email 参数构建一个 url。之后,我收到 json.php 页面上可用的 id 和 username 的 JSON 值,并将它们分配给我的 $_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。我尝试了很多方法,但到目前为止我还没有成功。
如果有人可以帮助我,我将非常感激。
解决方案
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));
做:
$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
推荐阅读
- javascript - 如何使 JavaScript 函数在页面的所有元素上运行
- html - Hyperledger Composer:使用 HTML 表单中的数据添加参与者
- reactjs - react native 中的全局变量更新
- html - CSS 问题 - 导航栏渐变和按钮颜色问题
- keyboard-events - 如何添加箭头键绑定以做出反应\redux
- django - 通过 django 跟踪打开的电子邮件
- utf-8 - 为什么相同的命令在 python 2 中打印表情符号但在 python 3 中失败?
- android - 可以将一个视图用于两种视图类型吗?
- reactjs - 如何使用 React beautiful dnd 将一列的列表项拖放到另一列的另一个列表项?
- javascript - 在 javascript 中将 SQL 数据库转换为 RDF