使用 mysql 登录 “无效的用户名和密码”


Php login "Invalid username and password" using mysql

我有3个页面:成功.html登录.php检查登录.php。我还创建了一个名为userInfo的mysql数据库表。表"用户信息由 3 个用户组成:大卫、简、理查德。当我使用用户David从userInfo输入用户名和密码时,它会直接进入成功.html它会说"登录成功"。但是当我输入Mary作为我的用户名和Mary作为我的密码时,它没有显示消息"无效的用户名和密码"。正确的输出应该在我的浏览器上显示该消息,因为用户 Mary 不存在于用户信息中。但我不知道如何解决这个问题。

Mysql 数据库 "用户信息" :

显示数据库

成功.html :

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Login Success Page - 156020K</title>
</head>
<body>
Login Success!!
</body>
</html>

登录.php :

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
</head>
<body>
<?php
    $url="http://localhost/156020K/Lab5?link=login.php";
    if(isset($_GET['link']))
    {
        echo "Invalid Username and Password";
    }
?>

<form action="checklogin.php" method="post">
    Username: &nbsp;
    <input type="text" name="uname">
    <br/>
    <br/>
    Password: &nbsp;
    <input type="password" name="pw">
    <br />
    <br />
    <input type="submit" value="Login">
</form>

</body>
</html>

检查登录.php :

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Check login</title>
</head>
<body>
<?php

  if(isset($_POST["uname"])) 
  {
      $u=$_POST['uname'];
      $p=$_POST['pw'];
      $conn=mysqli_connect("localhost", "root", "" , "db156020K");
      $sql = "SELECT * FROM userInfo WHERE name='" .$u. "' AND pass='" .$p. "' ";
      $search_result=mysqli_query($conn, $sql);
      $userfound=mysqli_num_rows($search_result);

      if($userfound >= 1)
      {
          header("Location: success.html");
      }
      else
      {
          header("Location: login.php");
      }

  }
  mysqli_close($conn);
 ?>

</body>
</html>

并且 url 应该有来自指定资源的请求,然后在身份验证失败时它会传递回登录页面,它应该是这样的"../login.php?uname=Mary&pw=mary">

我的输出:

单击输出 <--- 当用户名和密码未从用户信息 mysql 数据库创建时不显示无效消息

好吧,在你的login.php文件中,你使用:

if(isset($_GET['link']))
{
    echo "Invalid Username and Password";
}

要回显错误消息,但在checklogin.php文件中,使用 :

header("Location: login.php");

以在登录失败时重定向。

这里没有$_GET参数,因此您的错误消息永远不会显示。尝试这样的事情进行重定向:

header("Location: login.php?link=whatever");

编辑:刚刚看到这个:

并且 url 应该有来自指定资源的请求,然后在身份验证失败时它会传递回登录页面,它应该是这样的"../login.php?uname=Mary&pw=mary">

为此,您必须使用此重定向:

header("Location: login.php?uname=" . $u . "&pw=" . $p);

并在您的login.php中检查这些参数:

if(isset($_GET['uname']) && isset($_GET['pw']))
{
    echo "Invalid Username and Password";
}

但请记住,通过$_GET发送密码(即使是错误的密码(从来都不是一个好主意。