2011-06-05 77 views
0

林與我的代碼我正在處理的問題。我試圖根據用戶的狀態(如果他們付費並且他們有無效的電子郵件來獲取包含的內容),NULL值從數據庫中拉出來,但它只發送到entermail.phpPHP包括取決於帳戶

這裏是我的代碼有沒有人看到什麼錯?

function is_premium() { 
     $premium_query = mysql_query("SELECT 'authLevel' FROM 'users' WHERE 'fbID' ='".$userId."'"); 
     $premium = mysql_query($premium_query); 
     if ($premium=='1') { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    function valid_email() { 
     $validemail_query = mysql_query("SELECT 'parentEmailOne' FROM 'users' WHERE 'fbID' ='".$userId."'"); 
     $validemail = mysql_query($validemail_query); 
     if ($validemail != 'NULL') { 
      return true; 
     } else { 
      return false; 
      } 
    } 

     if (!empty($session) && is_premium() && valid_email()) { 
     include 'indexPremium'; 

     } else if (!empty($session) && valid_email()) { 
     include 'entermail.php';  

    } else if (!empty($session)) { 
     include 'indexLoggedIn.php'; 

    }else{ 
     include 'indexNotLogged.php'; 
    } 
+0

對不起忘了一些代碼: – 2011-06-05 21:54:30

+3

你不需要做'if(condition){return true; } else {return false; }'。只要做:'return(condition);' – 2011-06-05 21:57:19

+1

使用'is_null()'。 – Wrikken 2011-06-05 21:57:43

回答

2

你沒有實際存儲字符串「NULL」數據庫你是否?空不是字符串「NULL」 - 也許你想要的東西是這樣的:

if (empty($validemail)) { 
     return false; 
    } else { 
     return true; 
    } 

或更短:

return !empty($validemail); 
+0

我是亞歷克斯我現在要改變這一點 – 2011-06-05 21:59:40

0

你的函數不使用任何參數。並請使用參數化查詢或逃逸。

1

試試這個在validemail功能:

if (!is_null($validemail)) { 
      return true; 
     } else { 
      return false; 
      } 
0

你的函數引用既不是通過在不聲明爲全局參數的$ userId的變量。建議您將其聲明爲參數並將其傳入,例如:.e.g

function is_premium($userId) { 

} 
0

您的代碼可能容易受到SQL注入的攻擊。

0

我注意到有幾件小事情,它們可以加起來成爲非工作代碼。讓我複製你的功能之一,並從那裏工作:

function valid_email() { 
    $validemail_query = mysql_query("SELECT 'parentEmailOne' FROM 'users' WHERE 'fbID' ='".$userId."'");  
    $validemail = mysql_query($validemail_query); 

    if ($validemail != 'NULL') { 
    return true; 
    } else { 
    return false; 
    } 
} 

你要做的第一件事是做一個查詢,但你無法從數據庫中選擇場,而是一個值(請不就是'平均值和``是一個字段)。這將是一個更好的查詢:

"SELECT `parentEmailOne` FROM `users` WHERE `fbID` = '" . $userID . "'" 

此外,您使用的是查詢兩次,這是不以獲取結果的正確途徑。請使用mysql_fetch_array的答案取到一個數組:

$validemail = mysql_fetch_array($validemail_query); 

然後返回將是:

return !empty($validemail['parentEmailOne']); 

此外,請有$userID爲你的函數的輸入(像其他人已經提到的),因爲現在它始終是NULL(空)。 (我的意思是這樣:function valid_email($userID),你再與ID這樣稱呼它valid_email(10)用戶10

小更新:你可能要檢查你的if-else語句,在那裏你重複了很多函數調用和檢查。如果你不喜歡這樣,你只執行每個功能的人但得到相同的結果。

if(!empty($session)) 
{ 
    if(valid_email()) 
    { 
     if(is_premium()) 
      include 'indexPremium'; 
     else 
      include 'entermail.php'; 
    } 
    else 
     include 'indexLoggedIn.php'; 
} else 
    include 'indexNotLogged.php'; 

這也使我相信,有可能是在你的支票一個錯誤,因爲你想要當沒有有效的電子郵件時,人們去entermail.php(如果我沒有犯錯誤,上面的if-else語句就是你的代碼生成的包含內容,但是你mi ght想要以下。)

if(!empty($session)) 
{ 
    if(valid_email()) 
    { 
     if(is_premium()) 
      include 'indexPremium'; 
     else 
      include 'indexLoggedIn.php'; 
    } 
    else 
     include 'entermail.php'; 
} else 
    include 'indexNotLogged.php';