【发布时间】:2021-12-04 00:07:38
【问题描述】:
我已经被这个问题困住了两个星期。 我有一个颤振的应用程序,我正在尝试使用用户名和密码进行简单登录,我正在检查数据库中的用户名和密码是否匹配。 我使用 php 作为后端,但似乎 php 根本看不到 post 请求正文。 我在邮递员那里试过,即使用户名和密码正确,它总是给我“无效的用户名或密码,请重试”。 我认为它返回一个空响应,但我不知道为什么。
状态码= 200。
php代码:
<?$con = include "conn.php";
$json = file_get_contents('php://input');
$obj = json_decode($json);
$username = $obj['username'];
$password = $obj['password'];
$loginQuery = "select * from user where username = '$username' andpassword = '$password' ";
$check = mysqli_fetch_array(mysqli_query($con,$loginQuery));
if(isset($check)){
$onLoginSuccess = 'Login Matched';
$SuccessMSG = json_encode($onLoginSuccess);
echo $SuccessMSG ;
}
else{
$InvalidMSG = 'Invalid Username or Password Please Try Again' ;
$InvalidMSGJSon = json_encode($InvalidMSG);
echo $InvalidMSGJSon ;
}
mysqli_close($con);
?>
另外,当我打印 $obj 或 $username 以查看它有什么时,它什么也没提供。
感谢您到此为止,并为冗长的文字感到抱歉。 如果有人救我,我将非常感激。
【问题讨论】:
-
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
切勿以明文形式或使用 MD5/SHA1 存储密码! 仅存储使用 PHP 的
password_hash()创建的密码哈希,然后您可以使用password_verify()进行验证。看看这篇文章:How to use password_hash 并了解更多关于bcrypt & password hashing in PHP -
一一检查你的变量,永远不要假设它们包含你期望的数据。永远不要使用
echo进行调试,始终使用var_dump或类似的工具来查看其中的内容。打开 PHP 和 MySQL 错误报告。虽然我同意注入和密码问题,但您应该能够获取生成的 SQL 并在 SQL 工具中对其进行测试以查看结果。 -
谢谢。我是 php 新手,但我会考虑到这一点。
标签: php json flutter http post