2015-05-23 122 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)返回false參數的函數的函數,我得到我的自定義錯誤消息說我沒有權限。是的,在我的數據庫中,該排名的「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']; 

(保持介意sql injection

確保DB返回你的PHP中測試它之前預計的結果

+0

我不知道你正在分配$ sql,非常困惑 – Cludas18

+0

請閱讀SQL答案中的鏈接'JOIN's,它可以爲你節省很多'php'代碼,而且效率更高 –

+0

我已經看過MySQL更多的連接語句,並花了幾個小時嘗試幾種不同的解決方案,我仍然無法讓它工作。 – Cludas18