2013-05-22 137 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']) 
{...} 

當然,你將有最後一對大括號內更換三個點,不管你想做的事時,它不是登錄的經理。