2013-05-22 194 views
0

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

在该表中,我有:

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)."'"; 

回答

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 
} 
0

您既可以检查在结果部门的价值,采取适当的行动,或将其完全过滤掉。这将做到这一点:

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

但是请记住,这意味着你不能做一个不存在的用户,不正确的密码,或者谁是不是经理,用户之间的任何区别。

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

1
  1. 不要EV呃保存纯数据库密码!你应该使用散列或加密。
  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

+0

+1用于指出PDO,密码存储和参数转义(绑定)。 –

0

,你可以这样做:

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

当然,你将有最后一对大括号内更换三个点,不管你想做的事时,它不是登录的经理。