2015-05-23 4 views
2

Я работаю над чем-то еще для себя, это для другого веб-сайта, который у меня есть. Она включает в себя много групп с правами доступа и такими, и теперь у меня есть функция, которая выглядит как этогоМоя функция PHP не работает

function hasPermission($user, $permission){ 
    global $connection; 

    $sql = "SELECT * FROM admins WHERE `ID` = '". $user ."'"; 

    $rs = $connection->query($sql); 

    if ($rs){ 
     $user = $rs->fetch_array(MYSQL_ASSOC); 
     $userRank = $user['Rank']; 

     $sql = "SELECT * FROM `ranks' WHERE `RankName` = '". $userRank ."'"; 
     $rs = $connection->query($sql); 

     if ($rs){ 
      $rank = $rs->fetch_array(MYSQL_ASSOC); 

      if ($rank[$permission] == 1){ 
       return true; 
      } 
      else{ 
       return false; 
      } 
     } 
    } 
    else{ 
     echo($connection->error); 
    } 
} 

Затем, когда я вызываю функцию с параметрами, установленных как этот if (hasPermission($_SESSION['ID'], 'IsFullAccess') == true) он возвращает ложь, и я получаю мой Пользовательское сообщение об ошибке говорит, что у меня нет разрешения. И да, в моей базе данных столбец «IsFullAccess» установлен в 1 для этого ранга.

Что я здесь делаю неправильно?

+1

Является ли 'user id' сохраненным как строка? вы уверены, что 'IsFullAccess' хранится в БД? –

+0

Он хранится как целое число, однако я попытался удалить кавычки, и я получаю тот же результат. И да, я уверен, что «IsFullAccess» в базе данных – Cludas18

+0

Я заметил, что я назначал переменную $ user новому значению, которое, поскольку оно было параметром функции, могло вызвать проблему. Поэтому я изменил это, и я все еще получаю ту же проблему. Если у кого-нибудь есть идеи, сообщите мне – Cludas18

ответ

0

Попробуйте использовать hasPermission($_SESSION['ID'], 'IsFullAccess') == 1) вместо hasPermission($_SESSION['ID'], 'IsFullAccess') == true). (true следует преобразовать в 1)

+0

Все еще не работает, к сожалению. – Cludas18

+0

Попробуйте использовать '===' вместо '=='. – hamed

+0

Я не уверен, как это изменит ситуацию. Если что-либо == будет иметь более высокий шанс работать, потому что === означает, что вы хотите проверить, является ли он одним и тем же типом данных. Хотя я и собираюсь использовать == incase, я забыл установить правильный тип в БД, – Cludas18

1

После прочтения кода, кажется, что вы не знакомы с SQL, JOIN:

ваш запрос выглядит следующим образом:

$sql= "SELECT r.$permission as p FROM admins a JOIN ranks r ON a.rank=r.RankName WHERE a.ID=$user"; 
$rs = $connection->query($sql); 
if (!$rs) 
    return false; 
$hasPermission = $rs->fetch_array(MYSQL_ASSOC); 
return $hasPermission['p']; 

(держать в mind sql injection)

Убедитесь, что db возвращает ожидаемый результат перед его тестированием в php

+0

Я понятия не имею, что вы назначаете $ sql, очень растерянный – Cludas18

+0

Пожалуйста, прочитайте ссылки в ответе на SQL 'JOIN's, это сэкономит вам много кода' php', и это будет более эффективно. –

+0

Я уже несколько раз смотрел на MySQL, добавляя несколько операторов, и потратил несколько часов на несколько разных решений, и я все еще неспособный заставить его работать. – Cludas18

Смежные вопросы