2017-02-16 12 views
1

私が望むように動作しないクエリが書かれています。このスクリプトでは、ログインしようとするユーザーにuser_level 'Admin'がある場合、彼はadminhome.phpに直接連絡する必要があります。elseifユーザーはuser_level 'Employee'です。employeehome.phpに連絡する必要があります。私はこの2人のユーザーAmandaをuser_level Adminで作成し、Hugoをuser_level 'Employee'としてスクリプトをテストしましたが、ログインしている人であれば$errorを起動します。AND演算子が期待どおりに機能しないPHP mysqliスクリプト

login.php

<?php 
if($_SERVER["REQUEST_METHOD"] == "POST") { 

    $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    $mypassword = $_POST['password'];   


    $hashedPasswordQry = "SELECT password FROM users WHERE username = '$myusername'"; 

    $userLevel = mysqli_query($db, "SELECT user_level FROM users WHERE username='".$myusername."'"); 

    $result = mysqli_query($db,$hashedPasswordQry); 
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 

    $count = mysqli_num_rows($result); 

    // If result matched $myusername and $mypassword, table row must be 1 row 
    if($count == 1 && (password_verify($mypassword, $row['password'])) && $userLevel == 'Admin') { 

     $_SESSION['login_user'] = $myusername; 


     header("location: user/adminhome.php"); 

    }elseif($count == 1 && (password_verify($mypassword, $row['password'])) && $userLevel == 'Employee'){ 

      $_SESSION['login_user'] = $myusername; 


     header("location: user/employeehome.php"); 
    } 
else{ 
    $error = '<h5 style="text-align: center;" class="alert alert-danger" >Your username or password is invalid</h5>'; 

} 
} 
?> 
+0

2つの異なる列に対して同じwhere句を使用して同じテーブルに対して2つの選択クエリを使用するのはなぜですか?あなたが気づいていない場合は、単一のクエリ 'SELECT password、user_level'から複数のカラムを取り出すことができます。 – cteski

+0

@cteski:alright thanks mate。できます。 –

+0

@cteski:あなたは信用を求めていますか...私は自分の答えを残していますか? –

答えて

0

1が必要なだけであるときは、2つの非常に類似した選択を使用しています。クエリー内の複数の列をカンマで区切って選択することができますSELECT this_column, that_column FROM ...そして、両方のクエリーを実行している間は、パスワード照会の結果にのみアクセスし、$userLevelの結果にはアクセスしません。より正確なバージョンは、次のようになります。

$query = "SELECT password, user_level FROM users WHERE username = '$myusername'"; 

$result = mysqli_query($db, $query); 
$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

$count = mysqli_num_rows($result); 

if($count == 1 && (password_verify($mypassword, $row['password'])) && $row['user_level'] == 'Admin') 
{ 
    // do stuff 
} elseif ($count == 1 && (password_verify($mypassword, $row['password'])) && $row['user_level'] == 'Employee') 
{ 
    // do stuff 
} 
関連する問題