我已经使用此代码登录网站,但我的代码始终返回Onjuiste gegevens
(不正确的数据)。我不知道为什么。
在我的数据库中,我创建了一个帐户,其中包含用户名:sander和密码:sander。当我在表格中输入时,我仍然可以获得" Onjuiste gegevens"。有人可以帮我解决这个问题吗?
<?php
$conn = mysqli_connect("localhost", "root", "", "login");
if (isset($_POST['inloggen'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND '$password'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) == 1) {
echo "Juiste gegevens!";
} else {
echo "Onjuiste gegevens!";
}
echo "<br />";
}
?>
<form method="post" action="">
<label>Username</label>
<input type="text" name="username"/><br />
<label>Password</label>
<input type="password" name="password"/><br />
<input type="submit" name="inloggen" value="Inloggen"/>
</form>
答案 0 :(得分:4)
您的query
存在问题,您错过了password
,应该是:
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
此外,您应该阻止MySQL Injection
:
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
在了解mysqli_real_escape_string()
的详情。
同时阅读MySQLi Prepared Statements
:http://www.w3schools.com/php/func_mysqli_real_escape_string.asp,这是阻止MySQL Injection
的好方法。
提示:出于安全考虑,请记住存储密码哈希值。不要将它们存储为纯文本。
答案 1 :(得分:0)
您的查询逻辑错误,您忘记了password
:
SELECT * FROM users WHERE username = '$username' AND password='$password'
答案 2 :(得分:0)
您的查询无效。您忘记了数据库中的密码列。
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
除了查询错误之外,查询还是可以进行sql注入。
答案 3 :(得分:0)
试试这个
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
通过对帖子变量使用 mysqli_real_escape_string()来提高安全性。
mysqli_real_escape_string() - 转义字符串中的特殊字符以在SQL语句中使用