从数据库中询问access_level

时间:2017-09-05 09:09:22

标签: php sql pdo

我有代码,应该使用访问级别,但是从数据库我的代码没有请求访问级别,我没有进入我的" 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");

之后,我的页面给出了输出:

您好这是管理员页面。

感谢各位的帮助! :)

2 个答案:

答案 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',如果它是类型字符串。