Eu tenho um formulário com apenas um nome de usuário que irá permitir o acesso a duas páginas, dependendo um nível de autoridade usuários em um banco de dados MS SQL.
Se o seu nível de autoridade é 10, então eles vão fazer login na página de 'normal', no entanto nada mais e eles serão registrados em uma página de administração com mais funcionalidades. Isso tudo funciona bem, no entanto, é deixar tudo digitado no nome de usuário para efetuar login.
Eu estou lutando para evitar que o registo de qualquer nome de usuário que não está no banco de dados. Isto é o que eu tenho até agora ...
$conn = odbc_connect(database connection stuff here);
$login = $_POST['login'];
$sqlquery = "SELECT u.authorityLevel, u.employeeNo, e.knownAs FROM common.dbo.users as u JOIN
common.dbo.employees AS e on e.employeeNo = u.employeeNo WHERE u.employeeNo = '".$login."'";
$result = odbc_exec($conn, $sqlquery);
$user = odbc_fetch_array($result);
$userExists = odbc_num_rows($sqlquery);
if((isset($_SESSION['login']['logged_in']) && $_SESSION['login']
['logged_in'])==true){
if(isset($_POST)){
if ((int)$user['authorityLevel'] > 10) {
header("location: indexAdmin.php");
$row = $user;
$_SESSION['sessionUserName'] = $row['knownAs'];
} elseif ((int)$user['authorityLevel'] = 10) {
header("location: confirmedJobs.php");
$row = $user;
$_SESSION['sessionUserName'] = $row['knownAs'];
} else ((int)$user['authorityLevel'] < 10){
header("location: loginPage.php");
}
}
}
Você só está declarando esta variável:
$userExists = odbc_num_rows($sqlquery);
mas não usá-lo.
Esta é a sintaxe para verificar se existe um registro:
if($userExists >0) {...}
Edit: (I esquecido algo).
Esta linha é usando a variável errada para ele:
$userExists = odbc_num_rows($sqlquery);
Em conjunção com:
$result = odbc_exec($conn, $sqlquery);
Por isso, deve ler-se:
$userExists = odbc_num_rows($result);
odbc_num_rows()
é usada contra a consulta executada, não a consulta cru.
Você também estão abertos a uma injeção SQL, use uma declaração preparada: