通过使用电子邮件识别行来从列中获取int

时间:2017-08-21 19:26:13

标签: php mysql database

我想获得并回应用户权限级别。

我有一个用户电子邮件通过的功能,然后该功能需要获取用户权限级别并将其返回,因此可以在另一个页面上回显。

我想这个函数会查看传递的电子邮件的数据库,然后找到用户权限并返回。

在'User.class.php'

public static function permGetter($email)
{
    try
    {
        $db = Database::getInstance();

        $stmt = $db->prepare('SELECT permission FROM users WHERE email = :email LIMIT 1');
        $stmt->execute([':permission'=>$permission]);

        $user = $stmt->fetchObject('User');
        if($user !== false)
        {
            return $permission;
        }
    }

    catch (PDOException $exception)
    {
        error_log($exception->getMessage());
        return false;
    }
}

在'permRequest.php'

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once("../includes/init.php");

//Get passed from an external program
$email = $_GET['email'];
$pass = $_GET['pass'];

if($email && $pass !== null)
{
    // Checks if the user's entered credential matches with those in database
    if(Auth::getInstance()->login($email, $pass))
        {
        //Uses the passed email to get permission level in 'User.class.php'
        if(User::permGetter($email))
        {
                    echo 'Permission ' + (int) $permission;
        }
    }

    else
    {
        //I use level 5 as a debug so i can see when it fails
        echo 'Permission 5';
    }
}

?>

数据库

example of the database layout

以下是我的数据库的示例。

编辑1

好的搞乱,我想我更接近解决方案了。 首先,@劳伦斯·切罗纳,谢谢你在执行中指出了我的错误。

好的,我已经改变了

中的代码

User.class.php

public static function permGetter($email, $permission)
{
    try
    {
        $db = Database::getInstance();

        $stmt = $db->prepare('SELECT permission FROM users WHERE email = :email');
        $stmt->execute([':email'=>$email]);
        $row = $stmt->fetch(PDO::FETCH_NUM);
        $permission = $row['permission'];
    }

    catch (PDOException $exception)
    {
        error_log($exception->getMessage());
        return false;
    }
}

我对

做了一些小改动

permRequest.php

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once("../includes/init.php");

//Get passed from an external program
$email = $_GET['email'];
$pass = $_GET['pass'];
$permission = '';

if($email && $pass !== null)
{
    // Checks if the user's entered credential matches with those in database
    if(Auth::getInstance()->login($email, $pass))
    {
    //Uses the passed email to get permission level in 'User.class.php'
        if(User::permGetter($email, $permission))
        {
            echo 'Permission ', $permission;
        }
    }
}

?>

但现在我收到了错误。错误是Notice: Undefined index: permission in /classes/User.class.php on line 56

所以,我读了它,它似乎应该先清空,所以我在permRequest.php清空它,这也是我传递它的原因,但是我清空后仍然会出现这个错误?

但是,如果我改变

$row = $stmt->fetch(PDO::FETCH_NUM);

$row = $stmt->fetch(PDO::FETCH_ASSOC);
/*         OR         */
$row = $stmt->fetch(PDO::FETCH_BOTH);

我没有收到任何错误,但它只是说我的电子邮件或密码不正确,这不是我的双重和三重检查。

所以我对我应该使用的PDO::FETCH_感到困惑。我已经阅读了这篇文章(Click here),我会说ASSOCBOTHNUM都符合目的。

那么为什么在另外两个人没有登录的情况下发出错误呢?

编辑2

找到解决方案,我已将其写为答案。但是接下来的两天都不能接受。

1 个答案:

答案 0 :(得分:0)

我将所有内容移出User.class.php并将其移至permRequest.php。这出于某种原因解决了我的问题。所以我的代码现在看起来像这样

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);

require_once("../includes/init.php");

$email = $_GET['email'];
$pass = $_GET['pass'];

if($email && $pass !== null)
{
    if(Auth::getInstance()->login($email, $pass))
    {

        try
        {
            $db = Database::getInstance();

            $stmt = $db->prepare("SELECT * FROM users WHERE email = :email");
            $stmt->execute([':email' => $email]);
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
            $sub = $row['permission'];

            echo 'Permission ', $sub;

        }
        catch (PDOException $exception)
        {
            error_log($exception->getMessage());
            return false;
        }
    }
}

我不会将User.class.php用于此功能。

所以当我$sub

时返回User.class.php时,我的猜测是出错了