2017-07-26 38 views
-2

ログインページがあります。メインブランチおよびその他の管理者B、C、およびブランチB、C、およびDの管理者Aです。管理者Aはすべてのブランチにログインでき、管理者B、CおよびDは自分のブランチにのみログインできます。しかし、今私ができることは、すべての管理者だけが自分のブランチにログインできることです。どうすれば管理者AもブランチB、C、Dにログインできますか?2つの異なる条件のログインフォーム

これは私のコードです。

if($_POST['username'] && $_POST['password'] && $_POST['txtbranch']) { 
$username = $_POST['username']; 
$password = $_POST['password']; 
$txtbranch = $_POST['txtbranch']; 

$hash_pass = $password; 

$query = mysqli_query("select * from sysfile where username='".$username."' and password='".$hash_pass."' and branchid='".$txtbranch."' limit 1"); 

$count_user = mysqli_num_rows($query); 
if($count_user==1) 
{ 
    $row = mysqli_fetch_array($query); 
    $_SESSION['userid'] = $row['userid']; 
    $_SESSION['username'] = $row['username']; 
    $_SESSION['pin'] = $row['pin']; 
    $_SESSION['branchid'] = $_POST['txtbranch']; 
    header("location:dashboard.php?success=1"); 
}else{       
     $error = 'Incorrect Username, Password and Branch.';  
    } 
} 
+0

'管理A'はユーザー名ですか?あなたはSQLインジェクションに開放されており、パスワードをハッシュ化しておく必要があります。 – chris85

+1

実際にハッシュしますか?変数名を変更してもハッシングはありません。 – chris85

+0

あなたにはうれしいかもしれません。準備されたステートメントを使用して、パスワードをハッシュして前進させる方法を学んでください:http://php.net/manual/en/mysqli.prepare.php、http://php.net/manual/en/pdo.prepared-statements .phpとhttp://php.net/manual/en/function.password-hash.php、http://php.net/manual/en/function.password-verify.php –

答えて

1
  • その後、後にすべての管理者および= 1管理者Aのような設定の種類、そしてB、C、D = 2
  • 今設定した条件を追加するデータベース
  • にログインテーブル内のタイプフィールドを追加ログインページ

if ($type == 1) { 
    //Admin A login 
} else { 
    // Another Admin Login 
} 
0

私が行くと追加したいですユーザーの権利のためのテーブルが

┌──────┬──────┐ 
│userid│branch│ 
├──────┼──────┤ 
│ 1 │ A │ 
│ 1 │ B │ 
│ 1 │ C │ 
│ 1 │ D │ 
│ 2 │ B │ 
│ 2 │ C │ 
│ 2 │ D │ 
└──────┴──────┘ 

その後、あなたは以下の

SELECT * 
    FROM users, userrights 
    WHERE users.userid=userrights.userid 
     AND [email protected] 
     AND [email protected]_pass 
    LIMIT 1 

のようなSQL文を発することができる。このSQLクエリは、すべての列を選択する(より良い明示的に列を選択します! SELECT userid, username, pin, branchid FROM ...)を結合テーブルusersuserrights(わかりやすくするためにテーブル名を変更)から削除します。後者は、テーブルに対するユーザーの権利を保持します。フィルタリングされ、オリジナルのクエリとして制限されています。SQLパラメータを使用して注入を防止しています。そのクエリで

また、他の人が理解しやすいことができるように役割をBRANCH_IDを交換し、あなたの

$count_user = mysqli_num_rows($query); 
if($count_user==1) 
{ 
[...] 
0

を維持することができます。 データベースの名前付けにフラグを挿入する必要があります。 役割がある場合は1 - (-main支店)あなたの場合には役割がある場合は、その2 - あなたの場合と(B、C、D - その他のブランチ)

のは、データベースsturctureが

ようになるとしましょう
id | username | password | role | 
--------------------------------- 
1 | A  | 123  | 1 
--------------------------------- 
2 | B  | 1111  | 2 
--------------------------------- 
3 | C  | 2323  | 2 
--------------------------------- 
4 | D  | 1782  | 2 

私はデータベースに保存するプレーンテキストのパスワードをお勧めしません。これは単なる例です。 あなたのコードでは、これらのようになります。

if($_POST['username'] && $_POST['password'] && $_POST['txtbranch']) 
{ 
$username = $_POST['username']; 
$password = $_POST['password']; 
$txtbranch = $_POST['txtbranch']; 

$hash_pass = $password; 

$query = mysqli_query("select * from sysfile where username='".$username."' and password='".$hash_pass."' and branchid='".$txtbranch."' limit 1"); 

$count_user = mysqli_num_rows($query); 
if($count_user==1) 
{ 
    $row = mysqli_fetch_array($query); 
    $role = $row['role']; 
    if($role == 1) 
    { 
     //that is A then set the session and redirect to A dashboard 
    } 
    else if($role ==2) 
    { 
     //that is B,C and D then set the session and redirect to there respective dashbaord 
    } 
    else 
    { 
     //whatever action you want 
    } 
} 
else 
{       
     $error = 'Incorrect Username, Password and Branch.';  
} 
} 
+0

私はこれを最初に試します。 – user1120

0

私はすでに私の問題を解決し、これが私の最終的なコードです。

if($_POST['SUBMIT']=='Sign In') 
{ 
if($_POST['username'] && $_POST['password'] && $_POST['txtbranch']) 
{ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $txtbranch = $_POST['txtbranch']; 

    $query_callbranch=mysqli_query("SELECT * FROM sysfile WHERE USERNAME='$username' ")or die(mysqli_error()); 
    while($rowcallbranch=mysqli_fetch_array($query_callbranch)) 
    { 
     $pin = $rowcallbranch['pin']; 

     if($pin == '9' && $username == 'admin') 
     { 
      $query = mysqli_query("select * from sysfile where username='".$username."' and password='".$password."' limit 1"); 

      $count_user = mysqli_num_rows($query); 
      if($count_user==1) 
      { 
       $row = mysqli_fetch_array($query); 

       $_SESSION['userid'] = $row['userid']; 
       $_SESSION['username'] = $row['username']; 
       $_SESSION['pin'] = $row['pin']; 
       $_SESSION['branchid'] = $_POST['txtbranch']; 
       header("location:dashboard.php?success=1"); 
      }else{ 
       $error = 'Incorrect Username dan Password.';  
      } 
     } 

     if($pin == '0') 
     { 
      $query = mysqli_query("select * from sysfile where username='".$username."' and password='".$hash_pass."' and branchid='".$txtbranch."' limit 1"); 

      $count_user = mysqli_num_rows($query); 
      if($count_user==1) 
      { 
       $row = mysqli_fetch_array($query); 

       $_SESSION['userid'] = $row['userid']; 
       $_SESSION['username'] = $row['username']; 
       $_SESSION['pin'] = $row['pin']; 
       $_SESSION['branchid'] = $_POST['txtbranch']; 
       header("location:dashboard.php?success=1"); 
      }else{ 
        $error = 'Incorrect Username, Password and Branch.';  
      } 
     }    
    } 
} 

}

関連する問題