0

嗨,我是 PHP 和 Mysql 的新手。我需要有关登录当前正在编写的脚本的帮助。我的脚本工作正常。但我想添加一个额外的登录要求。

在表中我有:

user_id | username | password | first_name | department
-------------------------------------------------------

我目前仅使用用户名和密码对用户进行身份验证,但我想添加“部门”的另一个要求。部门列中有两个条目,“用户”或“经理”。我只想允许访问经理如何添加它?

我正在使用的 mysql 查询是:

$query = "SELECT * FROM users WHERE username='".mysql_real_escape_string($uname)."' AND password='".mysql_real_escape_string($passencrypt)."'";
4

5 回答 5

1
  1. 永远不要在数据库中保存纯密码!您应该使用哈希或加密。
  2. 不要使用 mysql_* 函数,因为它们已被弃用,将来将被删除。请改用 mysqli 或 PDO。
  3. 还要记住绑定参数只是将 mysql 更改为 mysqli 不会使您的脚本安全。

如您所述,添加角色可以通过两种方式解决。

第一个简单但不好扩展,第二个更好但需要更多努力。

以 tinyint 的形式添加department到 DB,其中 1 = 用户,2 = 经理

PDO解决方案

 $sth = $dbh->prepare('SELECT * FROM users WHERE username=? AND password=md5(?) AND department=?);
 $sth->bindParam(1, $user, PDO::PARAM_STR);
 $sth->bindParam(2, $pass, PDO::PARAM_STR);
 $sth->bindParam(3, $department, PDO::PARAM_INT);
 $sth->execute();

阅读更多关于 PDO http://www.php.net/manual/en/pdo.construct.php

第二种解决方案是使用角色和资源。这是如何使用它的很好的解释:http: //framework.zend.com/manual/1.12/en/zend.acl.introduction.html

于 2013-05-22T12:42:37.937 回答
0

您只需要在您的WHERE

$query = "SELECT * FROM users WHERE username='".mysql_real_escape_string($uname)."' AND password='".mysql_real_escape_string($passencrypt)."' AND delartment = 'manager'";

这样,只有拥有部门的成员manager才能与您的查询匹配

然后我想记住您mysql_不推荐使用功能,因此我建议您切换到mysqliPDO

于 2013-05-22T12:39:09.643 回答
0
$query = "SELECT * FROM users WHERE username='".mysql_real_escape_string($uname)."' AND password='".mysql_real_escape_string($passencrypt)."'";

没关系,那么只需在 php 中检查即可

$row = mysql_fetch_array($result);

if($row['department']=="manager"){
   //complete login
}else{
   //logout
}
于 2013-05-22T12:36:13.643 回答
0

您可以在结果集中检查 DEPARTMENT 的值并采取适当的措施,或者将其完全从查询中过滤掉。这将做到这一点:

$query = "SELECT * FROM users WHERE department='manager' AND username='".mysql_real_escape_string($uname)."' AND password='".mysql_real_escape_string($passencrypt)."'";

但请记住,这意味着您不会在不存在的用户、不正确的密码或不是管理员的用户之间进行任何区分。

于 2013-05-22T12:36:53.910 回答
0

你可以这样做:

if (isset($_POST['manager']))
{
$query = "SELECT * FROM users WHERE username = '$uname' AND password = '$passencrypt'";
}
elseif (isset($_POST['user'])
{...}

当然,当不是经理登录时,您将不得不用您想做的任何事情替换最后一对大括号中的三个点。

于 2013-05-22T12:49:10.707 回答