Ir para conteúdo
Anthony Stephen

(Sistema de Login) - Falha ao tentar exibir mensagem de erro

Recommended Posts

Olá pessoal, é o meu primeiro contato com o PHP, e estou tentando desenvolver uma página de cadastro/login.

A página em si já está funcionando, e realizando a consulta no banco de dados, mas eu gostaria de exibir uma mensagem de erro quando for constatado que a conta não existe no BD.

 

Até agora tenho duas páginas principais, são elas: login.php e login-connect.php.

Gostaria de exibir a seguinte div na página login.php, se o login for inválido:

<div class="alert alert-danger alert-dismissible fade show" role="alert">
	Ops! password and/or invalid user.
	<button type="button" class="close" data-dismiss="alert" aria-label="Close">
	<span aria-hidden="true">&times;</span>
	</button>
</div>

Ficaria assim:

 

wn5wGKe.png

 

login-connect.php

Da maneira que está, ele só exibe em outra página em branco:

<?php 
(... códigos inicializadores ...)
 
//Realiza consulta dentro do BD
$result = mysqli_query($con, "SELECT * FROM `usuario` WHERE `email` = '$login' AND `password`= '$senha'");
//Verifica se as informações estão dentro do BD
if(mysqli_num_rows ($result) > 0 ){
    $_SESSION['login'] = $login;
    $_SESSION['password'] = $senha;
    header('location:main.php');
}
else{
    unset ($_SESSION['login']);
    unset ($_SESSION['password']);
    echo '<b>Atenção</b> Login ou senha inválidos, tente novamente.';
    }

?>

 

Obs: Sei que da maneira que o código está, é impossível de fazer a div aparecer, porque não declarei isso em lugar nenhum. Mas aí está o problema, como fazer?

Desde já, muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode optar em usar javascript.

function mostrarErro(mensagem) {
    var div = document.getElementById('msg-erro'); // Captura o id msg-erro

    div.style.display = 'block'; // Mostra a msg-erro
    div.innerHTML = mensagem; // Coloca o texto na msg-erro

    setTimeout(function () { // 5 segundos depois a msg-erro volta ao estado original
        div.style.display = 'none';
        div.innerHTML = '';
    }, 5000);
}

 

No arquivo que recebe os dados do post cria-se então a div#msg-erro. Ou em qualquer lugar do index ou outro arquivo que esteja incluso quando o form for validado.

Esse elemento deve ter a formatação/propriedades de css da forma que bem desejar, somente a propriedade display tem que existir e é obrigatório que seu valor seja none.

<div id="msg-erro" style="display:none"></div>

 

Essa parte condiz que os dados não exitem

    unset ($_SESSION['login']);
    unset ($_SESSION['password']);
    echo '<b>Atenção</b> Login ou senha inválidos, tente novamente.';

Só não entendi porque matar cessões. Está validando form usando session?

Enfim substitua esse trecho pela chamada da função de erro.

<script>mostrarErro('Sua mensagem de erro aqui');</script>

Lembrando que a chamada da função só deve ser realizada pós definição do elemento id que ela vai buscar. Ou seja nas linhas abaixo do ID que quer capturar. Porém a função pode ficar em qualquer lugar desde que inclusa no HTML.

 

Conselho.... Use PDO ao invés de mysqli

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por RSN
      Boa Noite, 
      Gostaria de saber se existe a possibilidade de gravar além do id do option value outra variavel, para enviar via post.
      <div class="form-group"> <label class="col-md-4 control-label" for="txtgrupo">Tipo de Pagamento : </label> <div class="col-md-4"> <select id="" class="selectpicker" data-live-search="true" name="tipo_pagamento" > <?php $query = mysql_query("SELECT * FROM tipo_pagamento ORDER BY id ASC"); while($result = mysql_fetch_array($query)) { echo '<option value="'.$result["id"].'">'.$result["nome_tipo"].'</option>'; } ?> </select> </div> </div>  
    • Por JeanTDZ
      Eu tenho um form com algumas informações etc. O form envia pro banco de dados e tudo mais, funcional.
       
      Alguém teria algum exemplo que após o submit, o form é transformado em pdf/doc e direcionado para uma pasta/ftp já criada.?
    • Por Rafael Ferreira_163968
      Boa noite amigos, armazeno em um mysql senhas geradas pelo seguinte codigo:
       
      $name = "name"; $email = "email"; $password = "pass"; $string = mcrypt_create_iv (24, MCRYPT_DEV_URANDOM); $salt = strtoupper(bin2hex ($string)); $hash = hash_pbkdf2 ("sha1", $password, $string, 1000, 24, true); $hash = strtoupper(bin2hex ($hash)); //finalmente execute a seguinte consulta: $qrCreate = "INSERT INTO tc_users (name, email, hashedpassword, salt) VALUES ('$name', '$email', '$hash', '$salt')"; $stCreate = mysql_query($qrCreate) or die ('Erro ao cadastrar em '.$tabela.' '.mysql_error()); esse codigo insere um hash e salt unico nos campos, por mais que insira a mesma senha em outro usuario o hash e salt serao diferentes.
       ai vem a duvida, como eu faço para comparar a senha texto digitada pelo usuario com os dados inseridos no BD, por exemplo,
      se eu fizer a seguinte comparacao:
      $readTeste = read('tc_users',"WHERE id = '2'"); foreach ($readTeste as $teste); $pass = $teste['hashedpassword']; if (password_verify('pass', $pass)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } so me retorna invalido. function read esta funcionando, se eu printar o resultado da hashedpassword ele retorna os dados do banco ok. minha duvida e como comparar a senha texto com o banco, se é com o hash ou com o salt ou com os dois junto e como. desde ja obrigado
    • Por jparenque
      Pessoal, estou precisando de um código em php que faça o seguinte:

      1- acesse uma url capture e grave o código fonte
      2- acesse novamente a mesma url, capture o código fonte e compare com o código da primeira captura
      3- se o código for igual ao da primeira captura ele acessa novamente e compara novamente
      4- se o código for diferente do da primeira captura ele tem que abrir o navegador Chrome e ir para essa url através do navegador.
      5- o fim do código deverá ser apenas quando ele acessar a url encontrar um conteúdo diferente do da primeira captura.

      Vou rodar o php na máquina local. O objetivo é monitorar uma página url específica com relação à uma alteração que ocorrerá. E quando ocorrer precisarei atuar nessa página imediatamente.

      Obrigado a todos!
    • Por reisleandro
      Alguém ai conhece um servidor php portável que possa rodar direto de um pendrive e que não apresente a mensagem de bloqueio do firewall (Imagem abaxio). O servidor embutido do php faz exatamente isso mas apenas como sigle thread. Queria uma solução um pouco mais robusta que pudesse rodar em qualquer maquina sem apresentar essa mensagem. Plataforma alvo Windows.
       

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.