我正在尝试使用PHP创建登录表单但无法登录。我的密码/用户名不正确。我已经三次检查数据库中的凭据,它们是正确的。请帮忙
这是代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<?php
require('db.php');
session_start();
// If form submitted, insert values into the database.
if (isset($_POST['username'])){
$username = $_POST['username'];
$password = $_POST['password'];
$username = stripslashes($username);
$username = mysqli_real_escape_string($connection,$username);
$password = stripslashes($password);
$password = mysqli_real_escape_string($connection,$password);
//Checking is user existing in the database or not
$query = "SELECT * FROM `backuser` WHERE username='".$username."' and password='".md5($password)."'";
$result = $connection->query($query) or die(mysqli_error());
$rows = mysqli_num_rows($result);
if($rows==0){
$_SESSION['username'] = $username;
header("Location: index.php"); // Redirect user to index.php
}else{
echo " <div class='form'><h3>Username/password is incorrect.</h3><br/>Click here to <a href='login.php'>Login</a></div>";
}
}else{
?>
<div class="form">
<h1>Log In</h1>
<form action="" method="post" name="login">
<input type="text" name="username" placeholder="Username" required />
<input type="password" name="password" placeholder="Password" required />
<input name="submit" type="submit" value="Login" />
</form>
</div>
<?php } ?>
</body>
</html>
答案 0 :(得分:4)
您的逻辑中有错误。将if($rows==0)
更改为if($rows!=0)
。如果用户在DB中,则应至少返回1条记录,mysqli_num_rows()
应返回一个数字>= 1
。
答案 1 :(得分:1)
Sarasvati's answer似乎可以解决您的问题,但我还想建议:
使用PHP Password hashing内置函数(PHP 5.5+和5.3)进行散列密码。 MD5不是密码安全的,不建议密码存储或检查。
如果您是PHP新手,那么非常非常非常值得您花时间探索使用Prepared Statements代码。这与code
分开user input
,因此大大降低了SQL injection and Database Compromise的风险。
当你有header
重定向时,你应该立即在此标题之后加上exit
语句,因为其余的PHP代码仍然是在跟随标题之前运行。
$_SESSION['username'] = $username;
header("Location: index.php"); // Redirect user to index.php
exit;
不要在密码字段上使用stripslashes()
等文本编辑功能,如果有人的密码有斜杠,它将被剥离,他们将无法登录。密码应为任意密码字符,不仅仅是az或0-9等。
对于MySQLi_
[程序]错误报告,您需要提供连接详细信息:
die(mysqli_error($connection));
否则报告不会给你任何东西。
PHP <{1}}应该之前将任何内容输出到浏览器,因此这需要位于PHP页面的最顶层。 (感谢Nitin,我最初错过了)。
答案 2 :(得分:0)
问题是我没有在我的数据库中分配足够的存储空间(字符长度)来存储哈希值。我将长度值调整为30,它就像一个魅力。