2017-02-16 4 views
1

Я продолжаю писать запросы, которые, кажется, никогда не работают так, как я их хочу. В этом скрипте, если пользователь, который пытается войти в систему, имеет user_level 'Admin', он должен быть прямым до adminhome.php. У пользователя elseif есть user_level 'Employee' он должен быть направлен в employeehome.php. Я создал этих двух пользователей Amanda с user_level Admin и Hugo с user_level 'Employee', чтобы проверить скрипт, но независимо от того, с кем я вхожу, он запускает $error.PHP-скрипт mysQli с оператором AND не работает должным образом

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

Почему вы используете два запроса выбора в одной таблице с тем же предложением where для двух разных столбцов? Если вы не знаете, вы можете вытащить несколько столбцов из одного запроса 'SELECT password, user_level' ... – cteski

+0

@cteski: ладно спасибо. Оно работает. –

+0

@cteski: вы хотите получить кредит или ... Я оставляю свой собственный ответ? –

ответ

0

Вы используете два очень похожих выбирает, когда один необходимо только. Вы можете выбрать несколько столбцов в запросе, разделив их запятой 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 
}