PHP包含取决于帐户

时间:2011-06-05 21:52:46

标签: php sql

我正在处理我的代码问题。我正在尝试根据用户的状态(如果他们付费以及他们是否有无效的电子邮件)来加载包含。从数据库中提取NULL值但是它只发送到entermail.php

这是我的代码,有人看到什么错了吗?

 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'; 
    }

6 个答案:

答案 0 :(得分:2)

你实际上并没有在数据库中存储字符串“NULL”吗? Null与字符串“NULL”不同 - 也许你想要类似的东西:

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

或更短:

return !empty($validemail);

答案 1 :(得分:1)

validemail函数中尝试此操作:

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

答案 2 :(得分:0)

您的功能未使用任何参数。请使用参数化查询或转义。

答案 3 :(得分:0)

您的函数引用$ userId变量,该变量既不作为未声明为global的参数传入。建议您将其声明为参数并将其传递给.e.g

function is_premium($userId) {

}

答案 4 :(得分:0)

您的代码可能容易受到SQL注入攻击。

答案 5 :(得分: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为10的用户,将其称为valid_email(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语句就是你的代码将为包含生成的内容,但你可能需要以下内容。)

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