O que há de errado nesta validação de login
Olá.
Criei uma validação de login onde chega se a senha digitada é igual à criptografada no banco de dados.
Mas ultimamente notei que não está retornando a mensagem de erro da senha não digitada.
Também tentei encontrar uma forma de não usar alertas para validações, mas dentro do teste if($err=="") não existe um mode de adicionar outros teste usando a variável, então não consegui eliminar o alerta dos testes =/
Código utilizado:
Código :
//session_start();
if (isset($_POST['acessar'])) {
// clean and check form inputs including the secure image code
//$name = trim(strip_tags($_POST['name']));
//$pwd = trim(strip_tags($_POST['pwd']));
// Recupera o login
$name = isset($_POST["name"]) ? addslashes(trim($_POST["name"])) : FALSE;
// Recupera a senha, a criptografando em MD5
$pwd = isset($_POST["pwd"]) ? md5(trim($_POST["pwd"])) : FALSE;
$secure = strtoupper(trim(strip_tags($_POST['secure'])));
$match = $_SESSION['captcha']; // the code on the image
// input error checking
if ($name=="") {
$err.= "Informe seu nome!<br/>";
}
if ($pwd=="") {
$err.= "Informe sua senha!<br/>";
}
if (!$secure) {
$err.= "Informe o código de segurança!<br/>";
}
if (($secure!=$match) && ($secure!="")) {
$err.= "Código de segurança inválido!<br/>";
}
if ($err=="") {
// success - input passed all tests
// criando sessao e entrando
/**
* Executa a consulta no banco de dados.
* Caso o número de linhas retornadas seja 1 o login é válido,
* caso 0, inválido.
*/
$SQL = "SELECT name001, pass001 FROM admin001 WHERE name001 = '" . $name . "'";
$result_id = @mysql_query($SQL) or die("<script>location.href='?loadpg=site_login'; alert('Erro no banco de dados!');</script>");
$total = @mysql_num_rows($result_id);
// Caso o usuário tenha digitado um login válido o número de linhas será 1..
if($total) {
// Obtém os dados do usuário, para poder verificar a senha e passar os demais dados para a sessão
$dados = @mysql_fetch_array($result_id);
// Agora verifica a senha
if(!strcmp($pwd, $dados["senha"])) {
// TUDO OK! Agora, passa os dados para a sessão e redireciona o usuário
$_SESSION["user_logado"] = stripslashes($dados["name"]);
header("Location: admin.php");
exit;
} else {
// se for diferente da do banco de dados
echo "<script>location.href='?loadpg=site_login'; alert('Senha inválida!');</script>";
exit;
}
}
else { // se o login for inválido com o do banco de dados
echo "<script>location.href='?loadpg=site_login'; alert('O login fornecido por você é inexistente!');</script>";
exit;
}
exit();
}
}
?>
Agora o formulário:
Código :
<form name="captcha" action="?loadpg=site_login" method="post">
<table border="0">
<tr>
<td>Nome:</td>
<td style="padding-right:15px;"><input type="text" name="name" value="<?= $_POST['name'];?>" maxlength="10" autocomplete="off"></td>
</tr>
<tr>
<td>Senha:</td>
<td><input type="password" name="pwd" maxlength="10" autocomplete="off"></td>
</tr>
<tr>
<td>Código:</td>
<td><input type="text" name="secure" size="10" maxlength="5" autocomplete="off"></td>
</tr>
<tr>
<td></td>
<td><img src="captcha/captcha_image" alt="security image" border="0"/></td>
</tr>
<tr>
<td></td>
<td style="padding-right:15px; padding-bottom:10px;">
<input type="submit" name="acessar" value="Acessar">
</td>
</tr>
</table>
</form>
</td>
<td><?php
if ($err!="") {
echo "<div style=\"padding-left:15px; padding-right:15px;\"><strong>Erros encontrados</strong><br/>";
echo "<font color='#cc3300'>". nl2br($err). "</font><br/></div>";
}
?></td>
Aguardo ajuda e/ou explicações.
Grato.