我有代码,应该使用访问级别,但是从数据库我的代码没有请求访问级别,我没有进入我的" admin.php"
你能帮忙吗?
登录页面在这里: Login-Page
凭证:测试/测试
我想让用户登录我的页面,这是我的招聘人员的访问权限。所以我可以创建用户,他们可以看到我的简历和其他人。因此,有必要设置用户级别,如" 1"对于admin.php" 2"对于admin2.php等等。
这里是check.php,它是index.php
的一个表单<?php
session_start();
require_once("inc/config.inc.php");
require_once("inc/functions.inc.php");
$error_msg = "";
if(isset($_POST['uname']) && isset($_POST['pwd'])) {
$email = $_POST['uname'];
$passwort = $_POST['pwd'];
$statement = $pdo->prepare("SELECT * FROM users WHERE email = :uname");
$result = $statement->execute(array('uname' => $email));
$user = $statement->fetch();
//Überprüfung des Passworts
if ($user !== false && password_verify($passwort, $user['pwd'])) {
$_SESSION['userid'] = $user['id'];
$access_level = $user['access_level'];
$_SESSION['access_level'] = $access_level;
//Möchte der Nutzer angemeldet beleiben?
if(isset($_POST['angemeldet_bleiben'])) {
$identifier = random_string();
$securitytoken = random_string();
$insert = $pdo->prepare("INSERT INTO securitytokens (user_id, access_level, identifier, securitytoken) VALUES (:user_id, :access_level, :identifier, :securitytoken)");
$insert->execute(array('user_id' => $user['id'], 'access_level' => $access_level, 'identifier' => $identifier, 'securitytoken' => sha1($securitytoken)));
setcookie("identifier",$identifier,time()+(3600*24*365)); //Valid for 1 year
setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //Valid for 1 year
}
if ($access_level==0){
header("Location:user.php");
}
else if($access_level==1){
header("Location:admin.php");
}
}
else{
header("Location:index.php?err=1");
}
} else {
$error_msg = "E-Mail oder Passwort war ungültig<br><br>";
}
$email_value = "";
if(isset($_POST['email']))
$email_value = htmlentities($_POST['email']);
?>
问题在于行
<?php
$statement = $pdo->prepare("SELECT * FROM users WHERE email = :uname");
没有名为&#34;电子邮件&#34; - 因此无法获得真实的请求。
我把它改为:
<?php
$statement = $pdo->prepare("SELECT * FROM users WHERE uname = :uname");
之后,我的页面给出了输出:
您好这是管理员页面。
感谢各位的帮助! :)
答案 0 :(得分:0)
可能是你的错误就在这里。
$access_level = ['access_level'];
。
$access_level = $user['access_level'];
。
我无法了解你的情况。 其他错误可能就在这里。
if(isset($_POST['angemeldet_bleiben'])) {
$identifier = random_string();
$securitytoken = random_string(); //remaining code....
}
else if ($access_level==0){
header("Location:user.php");
}
else if($access_level==1){
header("Location:admin.php");
}
你不认为它应该是这样的。
if ($access_level==0){ //removed else.
header("Location:user.php");
}
else if($access_level==1){
header("Location:admin.php");
}
因为如果第一个if
条件有效,那么它会跳过所有其他else if
语句。
答案 1 :(得分:0)
您检查过print_r($user)
了吗?什么回来了?数据库中的列“access_level”是什么数据类型?
也许您必须检查$access_level=='0'
,如果它是类型字符串。