Php使用mysql

时间:2016-11-15 08:13:27

标签: php mysql login

我有3页: success.html login.php checklogin.php 。我还创建了一个名为userInfo的mysql数据库表。表“userInfo由3位用户组成: David,Jane,Richard 。当我使用userInfo中的用户 David 输入用户名和密码时,它会直接指向success.html及其会说“登录成功”。但是当我输入Mary作为我的用户名并且输入我的密码时,它没有显示消息“无效的用户名和密码”。正确的输出应该在我的浏览器上显示消息,因为用户Mary userInfo中不存在。但我不知道如何解决问题。

Mysql数据库“userInfo”:

show database

Success.html:

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

<body>
Login Success!!
</body>
</html>

Login.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>

Checklogin.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&amp; pw = mary”

我的输出:

click output&lt; ---当用户名和密码不是从userInfo mysql数据库创建时,不显示无效消息

1 个答案:

答案 0 :(得分:0)

好吧,在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应该有来自指定资源的请求,然后当身份验证失败时它将传递回登录页面,它应该是这样的&#34; ../ login.php?uname = Mary&amp; pw =玛丽&#34;

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

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

并在login.php

中查看这些参数
if(isset($_GET['uname']) && isset($_GET['pw']))
{
    echo "Invalid Username and Password";
}

但请记住$_GET发送密码,甚至是错误的密码永远都不是一个好主意。