首页 > 解决方案 > 登录 PHP:使用 MYSQL 在单页中进行用户级别登录

问题描述

抱歉,如果我要问的是非常基本的问题,但我已经坚持了两个星期。

我有一个登录页面,用户可以在其中登录我的网站。不同用户的角色将被提示到不同的页面。现在,登录很好,但是当我的用户输入错误的密码或用户名时,没有触发警告,并且当用户应该被重定向回 index.php 并触发警告时,用户停留在空白的 login.php 页面上。

下面是我的代码

登录表单(index.php)

<div class="login-box-body">
  <form method="post" action="login.php">
    <div class="form-group has-feedback">
      <input type="username" name="username" class="form-control" placeholder="Username">
      <span class="glyphicon glyphicon-user form-control-feedback"></span>
    </div>
    <div class="form-group has-feedback">
      <input type="password" name="password" class="form-control" placeholder="Password">
      <span class="glyphicon glyphicon-lock form-control-feedback"></span>
    </div>
    <div class="row">
      <div class="col-xs-8">
      </div>
      <!-- /.col -->
      <div class="col-xs-4">
        <button class="btn btn-primary btn-block btn-flat" type="submit" name="login" value="true">Sign In</button>
      </div>
      <!-- /.col -->

    </div>
  </form>
</div>

这里是我的后端脚本(login.php)

<?php
session_start();
$conn=mysqli_connect('localhost','root','','snapshot');
//Getting Input value
if(isset($_POST['login'])){
  $username=mysqli_real_escape_string($conn,$_POST['username']);
  $password=mysqli_real_escape_string($conn,$_POST['password']);
  if(empty($username)&&empty($password)){
  $error= 'Fields are Mandatory';
  }else{
 //Checking Login Detail
 $result=mysqli_query($conn,"SELECT*FROM user WHERE username='$username' AND password='$password'");
 $row=mysqli_fetch_assoc($result);
 $count=mysqli_num_rows($result);
 if($count==1){
      $_SESSION['user']=array(
	'id' =>$row['id'],
	'username'=>$row['username'],
	'uname'=>$row['uname'],
	'password'=>$row['password'],
	'role'=>$row['role']
   );
   $role=$_SESSION['user']['role'];
   //Redirecting User Based on Role
    switch($role){
  case 'user':
  header('location:user/dashboard.php');
  break;
  case 'management':
  header('location:management/index.php');
  break;
  case 'admin':
  header('location:admin/index.php');
  break;
 }
 }else{
 $error='Your PassWord or UserName is not Found';
 }
}
}
?>

在问之前,我已经阅读了一些类似的问题,但没有找到解决方案。预先感谢您的帮助。

标签: javascriptphphtml

解决方案


在 login.php 的末尾,您将 $error 的值设置为Your PassWord 或 UserName is not Found - 但是没有进一步发生。

仅当在数据库中找到用户时,重定向用户的开关才会起作用,在旁注中,您应该加密用户密码并比较哈希值。

要解决您的问题,请尝试执行以下操作:

} else {
 $error='Your PassWord or UserName is not Found';
 header('location:login.php?error=' . $error);
}

然后在您的登录表单中,您可以简单地检查错误消息并显示它:

<?php if(isset($_GET['error'])): ?>
<div><?= $_GET['error'] ?></div>
<?php endif ?>

推荐阅读