Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia. Preciso da ajuda de vocês.
Estou tentando fazer uma página de login, simples, com acesso ao banco em PDO. Quando atualizo a página, já aparece a mensagem de senha inválida antes mesmo de eu digitar.
Segue o código:
<?php
include_once 'conexao.php';
include_once 'header.php';
if(isset($_POST['btn_logar'])){
try{
$nome = $_POST['nome'];
$senha = $_POST['senha'];
$sql = $PDO->prepare('SELECT * FROM tab_user WHERE nome_user=:nome AND senha_user=:senha');
$sql->bindparam(":nome",$nome,PDO::PARAM_STR);
$sql->bindparam(":senha",$senha,PDO::PARAM_STR);
$sql->execute();
}catch(PDOException $erro){
echo $erro->getMessage();
}
if($sql->rowCount()>0){
header('Location:select.php');
}else{
?>
<div class="container">
<div class="alert alert-info">
<strong>ERRO!</strong>Senha incorreta
</div>
</div>
<?php
}
}
?>
<form method="post">
<label for="nome">Nome</label>
<input type="text" name="nome"/>
<br />
<label for="senha">Senha</label>
<input type="password" name="senha"/>
<br />
<input type="submit" name="btn_logar" value="ENVIAR" />
</form>
<div id="mensagem"></div>
<?php
include_once 'footer.php';
?>1º Acrescente esse input em seu formulário:
<input type="hidden" value="logar" name="acao" />
2º Alterar a condição $sql->rowCount() > 0 para:
$sql->rowCount()==1
3º Assim que acessa a página aparece “Senha inválida” ?
Pois se você atualizar apertando o botão F5, irá submeter o formulário novamente, e se nessa submissão a senha foi inserida anteriormente errada, é provável que essa mensagem aparecerá.
Então sempre que você submeter, redirecione o “ACTION” do form para uma página contendo somente php, sem nenhuma saída escrita para fazer o login, EX.:
**página => formulario.php**
<form method="post" action="logar.php">
<label for="nome">Nome</label>
<input type="text" name="nome"/>
<br />
<label for="senha">Senha</label>
<input type="password" name="senha"/>
<br />
<input type="hidden" value="logar" name="acao" />
<input type="submit" name="btn_logar" value="ENVIAR" />
</form>
<div id="mensagem"></div>
**página => Logar.php**
session_start();
if($_POST['acao'] == "logar"){
try{
$nome = $_POST['nome'];
$senha = $_POST['senha'];
$sql = $PDO->prepare('SELECT * FROM tab_user WHERE nome_user=:nome AND senha_user=:senha');
$sql->bindparam(":nome",$nome,PDO::PARAM_STR);
$sql->bindparam(":senha",$senha,PDO::PARAM_STR);
$sql->execute();
}catch(PDOException $erro){
echo $erro->getMessage();
}
if($sql->rowCount()==1){
$_SESSION['user'] = array(
"id" => 1,
"ip" => $_SERVER['REMOTER_ADDR']
);
header('Location:select.php?msg=1');
}else{
header('Location:select.php?msg=2');
}
}
**página => select.php**
<?php
if(!empty($_GET['msg'])){
if($_GET['msg']==1):
echo"LOGADO COM SUCESSO";
endif;
if($_GET['msg']==2):
echo"Senha ou login inválido";
endif;
}
?>
Isso só acontece quando você atualiza a pagina e reenvia o formulário não?
No primeiro acesso digitando a url e executando isso não acontece certo?