【问题标题】:Getting int from database, if int = a spesific value, do something. if not do something else从数据库中获取 int,如果 int = 一个特定的值,做一些事情。如果不做其他事情
【发布时间】:2017-01-22 00:29:14
【问题描述】:

最近,我一直在研究我的登录系统。在我尝试给予我的帐户工作人员特权之前,它一直进展顺利。因此,我在成员表中创建了一个名为“Rank”的新列,并将其设置为 int(11)。我将我的用户排名设置为 7。现在,当我登录到会员页面时,我希望我的帐户和排名为 7 的所有其他人都拥有特殊的特权。 7岁以下的用户,没有任何特殊的特权。所以,这里有一些我尝试过的代码。

<?php require('includes/config.php'); 





$stmt = $db->prepare('SELECT Rank from members where memberID=?');
$stmt->bindParam(1, $memberID, PDO::PARAM_INT);
$stmt->execute();





$result = $stmt->fetch(PDO::FETCH_ASSOC);
if($result['Rank'] == 7)
{
echo "You are a staff member.";
}


if($result['Rank'] < 7)
{
echo "You are not a staff member.";
}



//if not logged in redirect to login page
if(!$user->is_logged_in()){ header('Location: login.php'); } 




//define page title
$title = 'Members Page';

//include header template
require('layout/header.php'); 
?>

<div class="container">

    <div class="row">

        <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">

                <h2>Member only page - Welcome <?php echo $_SESSION['username']; ?></h2>
                <p><a href='logout.php'>Logout</a></p>
                <hr>

        </div>
    </div>


</div>

<?php 
//include header template
require('layout/footer.php'); 

?>

我没有收到任何错误,但我收到的消息是“您不是工作人员”而不是您是工作人员。即使我以具有排名 7 的用户登录.. 我在这里错过了什么?我还需要包含和更改什么?

【问题讨论】:

  • 首先,转储$result 包含的内容。
  • 什么意思?我应该删除 $result 还是 if 语句中的内容?
  • 刚刚从 if 语句中删除了 $result ,仍然不起作用 man :(
  • $result['Rank'] 更改为$result[0]['Rank']
  • 当人们说'dump $result'或类似的东西时,他们的意思是使用$print_r($result)var_dump($result)来检查变量的值

标签: php mysql database localhost local


【解决方案1】:

我收到“你是一名工作人员”。执行代码时打印。

我最好的选择是您与数据库的连接不起作用,或者您的查询有误,可能是错字。

要验证这一点,您应该 var_dump() 您的 $result 来查看您从数据库中获得了什么,如下所示:

...
$result = $stmt->fetch(PDO::FETCH_ASSOC);

var_dump($result);
...

在我的情况下,打印以下内容:

array(1) { ["Rank"]=> string(1) "7" } 

所以我可以从$result 中得到"Rank"

确保你得到类似的东西。

在下面编辑答案: 由于您得到的$resultfalse,因此请尝试获取一些信息为什么您的查询失败,如下所示:

试试这个:

try {
    $stmt = $db->prepare($query);
    $stmt->execute($values);
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if($result === false) {
        var_dump($stmt->errorInfo());
        echo "<br>";
    }
} catch (PDOException $e) {
    var_dump($e->getMessage());
    echo "<br>";
}

【讨论】:

  • bool(false) 您不是工作人员。是我运行 var_dump($result) 时得到的;什么意思?
  • 这意味着您没有从数据库中获得任何结果。我正在编辑我的答案以帮助您解决此问题。
  • 非常感谢,所以当我尝试愚蠢并收到 bool(false) 消息时,我的代码看起来像这样 $stmt = $db->prepare('SELECT Rank from members where memberID=? ');但是当我拿了 memberID=?并将其设置为 memberID=39,这是我的帐户 ID,它有效,并且说我是员工。但是,我用 39 岁以上的 id 登录的任何其他帐户也会收到员工消息,即使他们不是 7 级。我怎样才能找出登录的用户 memberID 是什么,所以只有那些有 7 级的人才能得到消息?当我运行您编辑的代码时,我收到了这条消息:
  • array(1) { ["Rank"]=> string(1) "7" } You are a staff.string(71) "SQLSTATE[42000]: 语法错误或访问冲突: 1065 查询为空”
  • 但是如果我的帐户没有排名 7,我会收到你不是员工的消息。所以至少有些东西在起作用。但是当我将我的更改为 7 时,每个人都至少在我收到员工消息后注册,即使他们不是员工......这里有什么问题?
猜你喜欢
  • 2018-12-09
  • 2016-05-01
  • 1970-01-01
  • 2013-05-04
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多