我想获得并回应用户权限级别。
我有一个用户电子邮件通过的功能,然后该功能需要获取用户权限级别并将其返回,因此可以在另一个页面上回显。
我想这个函数会查看传递的电子邮件的数据库,然后找到用户权限并返回。
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;
}
}
<?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';
}
}
?>
以下是我的数据库的示例。
好的搞乱,我想我更接近解决方案了。 首先,@劳伦斯·切罗纳,谢谢你在执行中指出了我的错误。
好的,我已经改变了
中的代码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;
}
}
我对
做了一些小改动<?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),我会说ASSOC
,BOTH
和NUM
都符合目的。
那么为什么在另外两个人没有登录的情况下发出错误呢?
找到解决方案,我已将其写为答案。但是接下来的两天都不能接受。
答案 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
时,我的猜测是出错了