无法从数据库中为我的登录页面获取数据:( [重复]
Posted
技术标签:
【中文标题】无法从数据库中为我的登录页面获取数据:( [重复]【英文标题】:Can't get data from database for my login page :( [duplicate] 【发布时间】:2020-01-27 11:53:00 【问题描述】:我正在尝试从数据库中为我的登录页面获取数据,但似乎无法这样做。它一直告诉我我的用户名或密码错误。
我是这个领域的初学者,我的代码来自 youtube。
form1.html
<!DOCTYPE html>
<html>
<head>
<title>Login Site</title>
</head>
<body>
<form method="POST" action="connect2.php">
Username : <input type="text" name="username"><br><br>
Password : <input type="password" name="password"><br>
<input type="submit" value="Login" name="submit">
</form>
</body>
</html>
connect2.php
<?php
$con = mysqli_connect("localhost", "root", "") or die("Failed to connect to MySQL.");
mysqli_select_db($con, "abc") or die("Database does not exist.");
//require ('sql_connect.php');
if (isset($_POST['submit']))
$username=mysqli_escape_string($_POST['username']);
$password=mysqli_escape_string($_POST['password']);
if (!$_POST['username'] | !$_POST['password'])
echo ("<SCRIPT LANGUAGE='javascript'>
window.alert('You did not complete all of the required fields')
window.location.href='form1.html'
</SCRIPT>");
exit();
$sql= mysqli_query("SELECT *
FROM `account`
WHERE username = $username
AND password = $password ");
if(mysqli_num_rows($sql) > 0)
echo ("<SCRIPT LANGUAGE='JavaScript'>
window.alert('Login Succesfully!.')
window.location.href='form1.html'
</SCRIPT>");
exit();
else
echo ("<SCRIPT LANGUAGE='JavaScript'>
window.alert('Wrong username or password. Please re-enter.')
window.location.href='form1.html'
</SCRIPT>");
exit();
else
?>
我认为 PHP 编码有问题,因为我不断收到“错误的用户名和密码”消息。
更新:我的数据库截图https://imgur.com/a/wPWdHDc
【问题讨论】:
使用logical OR operator(||)
insted of |
您的脚本对SQL Injection Attack 攻击开放。即使是if you are escaping inputs, its not safe!,您也应该考虑在MYSQLI_
或PDO
API 中使用prepared parameterized statements,而不是连接值
良好的代码缩进会帮助我们阅读代码,更重要的是它会帮助您调试代码 Take a quick look at a coding standard 为您自己谋福利。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
纯文本密码是一个非常糟糕的主意:PHP 提供了password_hash()
和password_verify()
,为了您的用户安全,请使用它们。
【参考方案1】:
作为快速修复,在用户名和密码变量周围加上引号:
SELECT * FROM `account` WHERE username = '$username' AND password = '$password'
一些改进此代码的提示:
使用准备好的语句来避免 SQL 注入 不要以纯文本形式存储密码,将其散列(使用盐)另外,你的第一个条件有错误,你使用|
,这是一个按位运算符,而不是||
,这是一个逻辑或运算符
【讨论】:
另外,应该使用 PHPheader
来重定向而不是 javascript
我还是这个领域的初学者,我还没有学过用盐散列密码。
我试过在变量周围加上引号,还是不行……
Joffrey 最好建议使用 password_hash()
和 password_verify()
并让它在内部创建一个非常好的盐,而不是简单地建议用盐散列。【参考方案2】:
我认为
"SELECT * FROM account WHERE username = $username AND password = $password "
应该是
"SELECT * FROM account WHERE username = \"$username\" AND password =\"$password\""
【讨论】:
以上是关于无法从数据库中为我的登录页面获取数据:( [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法在 .htaccess 中为我的 php 网站编写重写规则