2011-06-05 37 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';