2014-02-22 72 views
0

我想用一個函數從數據庫中返回一個簡單的值,雖然這通常很容易,但我有一些困難。我嘗試了幾種不同的混合物,但都沒有成功,所以我決定轉向這個社區尋求幫助。MYSQL + PHP可變的選擇值

這個概念是一個數據庫結構與被分配了權限的pagetypes排名。

這個例子當前列:秩/ modreports/plreports

數據示例:管理員/ 1/1

function CheckPermission($module){ 
    $GetPerms = mysql_query("SELECT * FROM `permissions` WHERE `rank` = '".$MyDetails['group']."' LIMIT 1"); 
    $MyPerm = mysql_fetch_array($GetPerms); 
     if($MyPerm[$module] != 1){ 
      echo 'DEBUG: '.$MyPerm[$module]; 
      //redirect("index.php?resp=perms"); 
      die(); 
     } 
} 

使用例:

CheckPermissions(modreports); 

上面的用法應該返回DEBUG:1在此階段或完全沒有顯示(最好是第二個),而不是顯示DEBUG:。 $ MyPerm ['modreports']將返回正確的值,所以我認爲它是變量,我只在$ _POST ['']在過去使用的變量。

感謝您的幫助,我希望我已經提供了足夠的信息來獲得一些幫助。


爲了響應幫助,這是已更正的代碼;

function CheckPermission($module,$group){ 
    $GetPerms = mysql_query("SELECT * FROM `permissions` WHERE `rank` = '".$group."' LIMIT 1"); 
    $MyPerm = mysql_fetch_array($GetPerms); 
     if($MyPerm[$module] != 1){ 
      redirect("index.php?resp=perms"); 
      die(); 
     } 
} 
+1

你需要在你的mysql查詢操作中添加一些基本的錯誤句柄到這段代碼。這會立即說明你的問題。我也強烈建議你寫查詢到一個變量和'var_dump'該變量。你的問題再次變得明顯。最後,如果您在各個級別都開啓了錯誤報告功能,那麼您會在此處收到通知,指出您也會遇到問題。總而言之,最大的問題是您需要真正關注如何處理代碼調試,處理邊緣/錯誤情況以及在開發時始終關注錯誤消息。 –

+0

@MikeBrant謝謝,在其他情況下,我通常會這樣做,這就是爲什麼最後一次發生這個問題我自我解決。我這次代表完全忽略了。 – Tarquin

回答

1

你的功能是不知道的$ MyDetails或$ MyPerm。它只知道你傳入的變量(就像你用$ module完成的那樣),或者你聲明爲全局變量(不推薦)。你在過去提到使用$ _POST,這是一個「超全球化」。這些都是特殊情況,可供所有功能使用,無需進一步定義。

推薦閱讀:http://www.php.net/manual/en/language.variables.scope.php

+0

這很有道理。我過去遇到過這個問題,通常我自己會糾正它。簡單地將該組傳遞給該函數是第一次。 MyPerms和它內部的變量都是完美無缺的。 =)謝謝。 – Tarquin

0

我認爲,有一種錯誤的 「不是」 你的病情:

而不是

if($MyPerm[$module] != 1){ 

應該

if($MyPerm[$module] == 1){ 
+0

我重寫了我可憐的單詞選擇,完全是我的錯。問題是它返回空白,而不是實際的數據庫值。 – Tarquin

0

鑑於這種表作爲示例數據:(!$ MyPerm [$模塊] = 1)

rank | modreports | plreports 
------------------------------ 
admin|  1  |  1 

的將導致自 'modreports' 假具有值1.因此'echo'DEBUG:'。$ MyPerm [$ module];'行將永遠不會被執行。