2014-12-19 40 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 –