Php 具有不同用户角色的登录系统
我做了一个登录/注册系统,效果很好。我想添加用户角色,例如,当管理员登录时,他将被重定向到索引页面;当用户登录时,他将被重定向到配置文件页面。 这就是我所做的: functions.phpPhp 具有不同用户角色的登录系统,php,mysql,oop,pdo,login,Php,Mysql,Oop,Pdo,Login,我做了一个登录/注册系统,效果很好。我想添加用户角色,例如,当管理员登录时,他将被重定向到索引页面;当用户登录时,他将被重定向到配置文件页面。 这就是我所做的: functions.php public function loginUser($username,$password){ $query=$this->db->prepare("SELECT id, username FROM users WHERE username=? AND email=?");
public function loginUser($username,$password){
$query=$this->db->prepare("SELECT id, username FROM users WHERE username=? AND email=?");
$query->execute(array($username,$password));
$userdata=$query->fetch();
$num=$query->rowCount();
if($num==1){
session_start();
$_SESSION['login']= true;
$_SESSION['uid']= $userdata['id'];
$_SESSION['uname']= $userdata['username'];
$_SESSION['login_msg']= "Login succesful";
return true;
}else{
return false;
}
}
public function userRole($uid){
$query=$this->db->prepare("SELECT role FROM users WHERE id=?");
$query->execute(array($uid));
$res=$query->fetch();
echo $res['role'];
}
login.php
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$username=$_POST['username'];
$password=$_POST['password'];
if(empty($username) or empty($password)){
echo "Error... Field must not be empty";
}else{
$login = $user->loginUser($username,$password);
if($login){
header('Location: transition.php');
}else{
echo "E-mail or password not match";
}
}
}
?>
<form action="" method="post" name="reg">
<table>
<tr><td> <input type="text" name="username" placeholder="Nombre de usuario"></td></tr>
<tr><td> <input type="password" name="password" placeholder="Password"></td></tr>
<tr><td> <input type="submit" name="login" value="Login" onclick="return(submitreg());"></td></tr>
</table>
</form>
transition.php
<?php
session_start();
require_once "functions.php";
$db = new DatabaseConnection();
$user = new LoginRegister($db->pdo);
$uid=$_SESSION['uid'];
$username=$_SESSION['uname'];
if(!$user->getSession()){
header('Location: login.php');
exit();
}
$type = $user->userRole($uid);
echo $type;
if($type == 0){
header('Location: index.php');
}else{header('Location: profile.php');
}
?>
我添加了userRole函数来获取用户的角色,transition.php是为了知道函数是否工作正常,如果我删除if语句并打印角色,它将打印正确的角色。
当我在没有这个函数和php文件的情况下登录时,它可以正常工作,但是当我添加这个函数和php文件时,无论角色如何,我总是被重定向到index.php
在我的数据库中,用户角色只是一个数字(0代表管理员,1代表用户)。我在管理角色方面遇到了类似的问题。我创建了一个名为active的列。如果active是
0
用户的帐户已停用
如果处于活动状态为1
用户帐户当前处于活动状态
如果处于活动状态为2
用户是管理员
您可以执行一个简单的
if语句
来检查active的值。您将在登录后检查此值…不要echo
,返回$res['role']
。你的数据库似乎也有一个混乱的设置,如果<代码>电子邮件< /COD>实际上是密码列,我会考虑重命名。在header^@He_slp13之前输出我不处理任何特定代码。然而,我回答了我是如何解决这个类似问题的。这个解决方案对你有用吗?如果没有,我能改进什么?嘿@chris85,这是我的问题,现在我写了return而不是echo,一切都很好。谢谢