javascript - 登录 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';
}
}
}
?>
在问之前,我已经阅读了一些类似的问题,但没有找到解决方案。预先感谢您的帮助。
解决方案
在 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 ?>
推荐阅读
- python - Can’t inverse encoded categorical variables
- raspberry-pi - nodered on Raspberry PI is not starting any longer
- r - 如何在R中制作相互面对的垂直条形图
- c++ - How can I tell Visual Studio to use the project directory instead of the current file directory when including files?
- kotlin - 如何使用 gradle kotlin dsl 为简单的控制台应用程序生成“fatjar”
- gridview - How to display checkbox instead of bool variable in yii2 gridview?
- javascript - Send back not empty xmlhttprequest
- python - 不正确的矩阵逆结果
- reactjs - 创建反应组件时何时使用箭头函数与类与对象文字?
- java - Amazon Merchant Fulfillment 创建货件标签