PHP中的用户名和密码问题

时间:2016-07-25 17:36:43

标签: php html

我正在尝试使用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>

3 个答案:

答案 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,它就像一个魅力。