使用php的用户登录脚本

时间:2013-05-22 12:30:44

标签: php mysql authentication

您好我是PHP和Mysql的新手。我需要帮助我正在编写的登录脚本。我的脚本运行正常。但我想添加一个额外的登录要求。

在表格中我有:

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

我目前正在使用用户名和密码对用户进行身份验证,但我想添加" department"的其他要求。部门栏中有两个条目" user"或"经理"。我想只允许访问经理如何添加?

我使用的mysql查询是:

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

5 个答案:

答案 0 :(得分:1)

  1. 不要在db中保存纯密码!您应该使用哈希值或加密。
  2. 不要使用mysql_ *函数,因为它们已被删除,将来会被删除。请改用mysqli或PDO。
  3. 还记得绑定参数只是将mysql更改为mysqli不会使脚本安全。
  4. 如您所述添加角色可以通过两种方式解决。

    首先是简单但不好扩展,第二种更好但需要更多努力。

    department作为tinyint添加到DB,其中1 = user,2 = manager

    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

答案 1 :(得分: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
}

答案 2 :(得分:0)

您可以在结果集中检查DEPARTMENT的值并采取适当的操作,或者将其从查询中完全过滤掉。这样就可以了:

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

但请记住,这意味着您不会区分不存在的用户,不正确的密码或不是经理的用户。

答案 3 :(得分: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

答案 4 :(得分:0)

你可以这样做:

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

当然,当你不是经理登录时,你必须用你想做的任何事情来替换最后一对括号中的三个点。