【问题标题】:Validate user's rights验证用户权限
【发布时间】:2014-03-20 01:56:56
【问题描述】:

我正在为我在学校的项目团队编写一个小时注册系统。一切都很好,但我似乎无法验证用户的工作权限。

验证在用户表中的 acctype 字段中完成。如果为 0(访客),您只能查看工时列表,如果为 1(专家),您可以添加自己的工时,如果为 2(项目经理),您可以查看用户提交的工时。

起初我只使用 $account 查询,但我没有选择全部,而是选择了 acctype。

有人知道我做错了什么吗?

$cookie = $_COOKIE['user'];
$account = mysqli_query($conn, "SELECT * FROM user WHERE user = '" . $cookie . "'");
$acctype = mysqli_fetch_assoc($account->acctype);

if(isset($cookie) && $acctype >= 1) {

} else {

}

乔纳森

【问题讨论】:

  • 不要将用户名存储在 cookie 中。您应该将用户信息存储在服务器会话中:php.net/manual/en/book.session.php
  • 可怕地看到来自 cookie 用户的检查数据:P

标签: php sql access-rights


【解决方案1】:

我认为这里有一些问题:

  • 在检查它是否已设置之前,您正在读取 cookie。这是一个错误。您应该查看是否有 cookie,然后将其读入。您也不需要为其分配单独的变量。

注意:正如我在评论中所说,用户数据应该在会话中,而不是 cookie。

  • 我不知道您的 DB 架构是什么样的,但您的查询是 SELECT * FROM user,这意味着如果您有 ID、用户名、访问级别和其他一些东西,您将获得所有这些都放入 var $acctype,这显然不是整数。

我认为解决方法是执行查询,获取结果,然后比较返回的行,只检查 acctype 部分:

if ($row['acctype'] >= 1){

}

文档:http://us1.php.net/mysqli_fetch_assoc

【讨论】:

  • 如果对您有帮助,请务必采纳。谢谢!
  • 感谢您的帮助,它将在以后的问题中帮助我很多:-) 坏消息是修复它花费了太长时间,所以项目内的项目被取消了我们将继续使用老式文档! :-( (嗯,我会花一些空闲时间并下次使用它:))
猜你喜欢
  • 2011-06-26
  • 2012-12-02
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多