2017-04-12 106 views
0

我需要一些帮助,试图找出为什么我的PHP登录重定向功能不正常。我首先尝试了一个简单的登录,它工作正常。但是在我添加一条if语句以根据用户级别重定向之后,它就会崩溃。php登录重定向不工作

下面的代码:

*编辑:我需要更多的帮助与代码实际上重定向到用户的角色级别的相应页面。目前,无法登录(无登录错误),但不会将用户发送到其相应的页面(即:admin到管理页面,用户到用户页面,协调员到协调器页面)。

<?php 
session_start(); 
include 'connect.php'; 


$email = $_POST["login_email"]; 
$pwd= $_POST["login_pwd"]; 
$role = $_POST["role"]; 

$sql = "SELECT * FROM users WHERE email='$email' AND password= '$pwd' AND role='$role' "; 


if($row != mysqli_fetch_assoc($result)){ 
    echo "Your user name or password is incorrect!"; 
    header("Location:login.html"); 
}else{ 
    $_SESSION['id'] = $row['id']; 
    if ($_SESSION['role'] == 'admin') { 
    header("Location: admin.php"); 
} else if ($_SESSION['role'] == 'editor') { 
    header("Location: editor.php"); 
} else if ($_SESSION['role'] == 'user') { 
    header("Location: user.php"); 
} 
    echo "Successful login!"; 
} 
+3

无法在标题前执行回显。有标头包含像'admin.php?MSG = Password_Incorrect''并且有admin.php回显它 – Forbs

+0

**警告:**当使用'mysqli'时,您应该使用[参数化查询](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)和[bind_param](http://php.net/manual/en/mysqli-stmt.bind-param.php)将用户数据添加到您的查询中。不要使用字符串插值或串联来实现这个,因为你已经创建了一个严重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**将'$ _POST','$ _GET'或**任何**用户数据直接放入查询中,因为如果有人试图利用您的错误,这可能会非常有害。 – FrankerZ

回答

0

位置标头旨在告诉浏览器它应该将页面重定向到另一个源。当你回应内容时,你基本上说你已经完成发送标题,并开始内容。在发送位置的情况下,根本不应该发送任何内容,因为该页面在读取标题时会简单地重定向(根本不显示任何内容)。

有关更多信息,请参阅this post这个问题。

+0

谢谢!将记住这一点,并做出正确的改变! – len

0

在你提供它的代码显示您设置的$role变量$role = $_POST["role"];但重定向当您使用$_SESSION['role'] == 'admin'来确定用户的角色,但你从来没有在代码中设置$_SESSION['role']

请尝试下面的代码,看看它是否工作;

//other code above 
else{ 
    $_SESSION['id'] = $row['id']; 
    if ($role == 'admin') { 
    header("Location: admin.php"); 
} else if ($role == 'editor') { 
    header("Location: editor.php"); 
} else if ($role == 'user') { 
    header("Location: user.php"); 
} 
//other code below 

让我知道它是否有帮助,或者如果您发现问题。

+0

这是一些非常疯狂的恐怖。如果用户禁用JavaScript,该怎么办?为什么甚至会将JavaScript带入图片? – FrankerZ

+0

我只是提出了一种在重定向之前显示错误消息的方法。 –

+0

此代码显示消息“成功登录”,但不会将用户重定向到其相应页面,即:管理页面,用户页面,协调员页面 – len