2014-12-19 38 views
1

在我的MySQL數據庫表users,有一個領域grpID,與G00, G01, G02, G03在MYSQL滯留的mysqli取

一個的價值是什麼,我試圖做的是檢查用戶的GRPID決定他/她是否有一個有權訪問某些頁面。

因此,這裏是我的嘗試:

$isadmin = false; 
function evalLoggedUser($conx,$id,$u,$p){ 
    $sql = "SELECT grpID FROM users WHERE userID='$id' AND userName='$u' AND userPW='$p' LIMIT 1"; 
    $query = mysqli_query($conx, $sql); 
    $numrows = mysqli_num_rows($query); 
    if($numrows > 0){ 
     $userLvl = mysqli_fetch_row($query); 
     if ($userLvl[0]=="G00") { 
      echo "isadmin set to true CONFIRM"; 
      $isadmin=true; 
     } 
     return true; 
    } 

我有check_status.php

命名上面的代碼,並在我的index.php文件我有這樣的代碼:

include_once("htconfig/check_status.php"); 
if($isadmin) { 
echo "final confirmation"; 
} 

現在沒事了,當我測試這個用戶與grpID G00,我確實得到第一個回聲,isadmin set to true CONFIRM。這證明isadmin設置爲true,但是我沒有在if子句中獲得第二個回顯... 我正在爲此奮鬥幾個小時......請幫忙!

在功能
+0

不是你的問題的一部分,但你應該使用準備好的語句並綁定你的參數('$ id','$ u')。 – prodigitalson

+0

**警告**:使用'mysqli'時,您應該使用參數化查詢和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)添加用戶數據到您的查詢。 **不要**使用字符串插值來實現此目的,因爲您將創建嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 – tadman

+0

而不是使用if語句來檢查是否有任何行,爲什麼不對結果使用fetch方法? – Slime

回答

1

變量範圍:

$isadmin = false; // global scope 
function evalLoggedUser(...) { 
    ... 
    $isadmin = true; // function LOCAL scope. 
} 

你在一個完全不同的變量設置true。你需要這個:

function evalLoggedUser(...) { 
    global $isadmin; // make the local $isadmin point at the global version 
    $isadmin = true; // set the global variable's value. 
} 
+0

非常感謝Marc! –

1

您需要添加:

$isadmin = false; 
function evalLoggedUser($conx,$id,$u,$p){ 
    global $isadmin; 
+0

非常感謝Lashane!它解決了我的問題:D –