Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Willybrow

Página de login não funciona direito

Recommended Posts

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';

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
                                              
                                              
                               }
 ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por mm_edilson
      Colegas, boa tarde. Estou criando um sisteminha de login, e estou na parte de recuperação de senha. Escrevi o código para o usuário digitar o e-mail cadastrado e solicitar a redefinição. Então, ele recebe um link único no e-mail dele e, por meio desse link, abre a página de criar nova senha. 
      Tudo funciona. O cadastro, o login, e a alteração de senha. Exceto por um problema. Quando faço uma recuperação de senha, e retorno para a página de login, ele dá a nova senha como inválida. Aí, se eu fechar o navegador e abrir de novo, e digitar a nova senha, ele entra normalmente. E não funciona ctrl+F5. Tem que fechar e abrir.
      Não faço ideia do que pode estar causando isso. 
      Vou postar meu código:

      Página de Login:
       
      <?php include_once 'connect.php'; ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Login</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> </head> <body> <section class="content"> <div class="contato"> <h2>Login</h2> Por favor, entre com o e-mail e a senha cadastrados.<br><br> <form name="cad_usu" class="form" method=post> <input class="field" type="email" name="email" placeholder="E-mail" required> <input class="field" type="password" name="senha" placeholder="Senha" required> <input class="field2" type="submit" name="SendLogin" value="Entrar no Sistema"> <input class="field2" type="reset" value="Limpar Formulário"> <center><a href="recuperar_senha.php"><font size="2">Esqueci a senha</font></a></center> </form> </div> </section> <?php if(!isset($_POST['SendLogin'])){exit;} $dados = filter_input_array(INPUT_POST,FILTER_DEFAULT); $query_usuario = "SELECT * FROM usuario WHERE email =:email LIMIT 1"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->bindParam(':email', $dados['email']); $result_usuario->execute(); $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); if($row_usuario && (password_verify($dados['senha'], $row_usuario['senha']))) { $_SESSION['id'] = $row_usuario['id']; $_SESSION['nome'] = $row_usuario['nome']; $_SESSION['situacoe_id'] = $row_usuario['situacoe_id']; $_SESSION['niveis_acesso_id'] = $row_usuario['niveis_acesso_id']; header("Location: painel.php");} else { echo "<div class=content><p style='color: red'> Erro: Usuário e/ou senha inválidos!</p>";} ?> </body> </html>  
      Página que faz a alteração da Senha:
       
      <?php include_once 'connect.php'; ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Recuperação de Senha</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> <script> function confereSenha(){ const senha = document.querySelector('input[name=senha]'); const confirma_senha = document.querySelector('input[name=confirma_senha'); if (confirma_senha.value === senha.value) { confirma_senha.setCustomValidity(''); } else { confirma_senha.setCustomValidity('As senhas digitadas não conferem! Elas precisam ser iguais.'); } } </script> </head> <body> <section class="content"> <div class="contato"> <center><h2>Recuperação de Senha</h2></center> <br><br> <?php $user = $_GET['utilizador']; $hash = $_GET['confirmacao']; $query_recupera = "SELECT * FROM recuperacao"; $result_recupera = $conn->prepare($query_recupera); $result_recupera->execute(); $row_recupera = $result_recupera->fetch(PDO::FETCH_ASSOC); $user_cadastrado = $row_recupera['email_usu']; $hash_cadastrado = $row_recupera['confirmacao']; $query_usuario = "SELECT * FROM usuario WHERE email = '$user'"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->execute(); $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); $id_user = $row_usuario['id']; $modified = date('Y-m-d H:i:s'); echo $id_user; if(!empty($_POST)){ if($user == $user_cadastrado && $hash == $hash_cadastrado){ $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT); $sql = "UPDATE usuario SET senha =:senha, modified =:modified WHERE id =:id"; $statement = $conn->prepare($sql); $statement->bindParam(':senha', password_hash($dados['senha'], PASSWORD_DEFAULT)); $statement->bindParam(':modified', $modified); $statement->bindParam(':id', $id_user); if($statement->execute()){ echo "<p style='color: green;'>Senha alterada com sucesso!</p>"; echo "<p><a href='login.php'>Voltar ao Login></a></p>"; } else { echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>"; } } else { echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>"; } } else { echo ""; } ?> <form name="cad_usu" class="form" method="POST" action=""> <input class="field" type="password" name="senha" placeholder="Senha" required onchange='confereSenha();'> <input class="field" type="password" name="confirma_senha" placeholder="Confirmar Senha" required onchange='confereSenha();'> <input class="field2" type="submit" name="AlteraSenha" value="Alterar Senha"> <input class="field2" type="reset" value="Limpar Formulário"> </form> </div> </section> </div> </body> </html>  
      E por fim, a página que solicita a alteração da senha: 
      <?php include_once 'connect.php'; ?> <html> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Login</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> </head> <body> <section class="content"> <div class="contato"> <h2>Recuperação de Senha</h2> Por favor, digite o e-mail cadastrado.<br><br> <form name="cad_usu" class="form" method=post> <input class="field" type="email" name="email_usu" placeholder="E-mail" required> <input class="field2" type="submit" name="Recuperar" value="Recuperar Senha"> <center><a href="login.php"><font size="2">Voltar ao Login</font></a></center> </form> </div> </section> <?php if(!isset($_POST['Recuperar'])){exit;} $dados = filter_input_array(INPUT_POST,FILTER_DEFAULT); $query_usuario = "SELECT email FROM usuario WHERE email =:email LIMIT 1"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->bindParam(':email', $dados['email_usu']); $result_usuario->execute(); $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); if($row_usuario) { //se o e-mail for localizado, acontece isso: //gera a chave de confirmação $utilizador = $dados['email_usu']; $chave = sha1(uniqid( mt_rand(), true)); //salva a chave no banco de dados $query_salva_usu = "INSERT INTO recuperacao (email_usu, confirmacao) VALUES (:email_usu, :confirmacao)"; $salva_usu = $conn->prepare($query_salva_usu); $salva_usu->bindParam(':email_usu', $dados['email_usu'], PDO::PARAM_STR); $salva_usu->bindParam(':confirmacao', $chave, PDO::PARAM_STR); $salva_usu->execute(); if($salva_usu->rowCount()){ $link = "http://www.sgi.dev.br/recuperar.php?utilizador=$utilizador&confirmacao=$chave"; if(mail($utilizador, 'Recuperação de Senha', 'Olá, '.$utilizador.'. Recebemos uma solicitação de recuperação de senha do site SGI - Sistema de Gestão de Igrejas. Se foi você, por favor, clique no link a seguir e crie uma nova senha: '.$link.' Se você não se lembra de ter solicitado essa alteração, por favor, desconsidere este e-mail. ')) echo "<center><p style='color: green;'>Um link de confirmação foi enviado para '.$utilizador.'. <br>Por favor, abra-o e confirme sua solicitação. Se não o encontrar na caixa de entrada, gentileza verificar a caixa de spam.</center></p>"; }else{ echo "<p style='color: #ff0000;'>Erro. Não foi possível recuperar a senha. Entre em contato com o administrador do sistema!</p>"; } } else { //se o e-mail não for localizado, acontece isso: echo "<div class=content><p style='color: red'> Erro: email não encontrado!</p>"; } ?> </body> </html>  
    • Por Luiz Henrique
      Olá,
       
      Preciso fazer uma inserção no DB de registros referente a pagamentos, quando for no crédito será realizado o insert com sua respectiva data de compensação e valor da parcela exemplo:
       3 parcelas de 100.00 e cada registro em seu devido mês:
      INSERT INTO tabela (valor, data) VALUES (100, 2022-08-17),(100, 2022-09-17),(100, 2022-10-17) É mais eficiente fazer da forma acima ou colocar 3 INSERT?
      Ou existe forma melhor de fazer isso?
       
      Obrigado.,
       
    • Por eduardodsilvaq
      Erro retornado no console do navegador: 400 bad request
      Rastreei o erro ate essa parte no arquivo admin-ajax.php mudando o valor de resposta de 0 para 1:
      if ( is_user_logged_in() ) { // If no action is registered, return a Bad Request response. if ( ! has_action( "wp_ajax_{$action}" ) ) { wp_die( '0', 400 ); } Tentei de tudo, mas infelizmente nao entendi oq realmente significa esse login e como ele funciona.
      Vi algumas pessoas tendo problema com o host, no meu caso estou usando hostinger. (Nao creio que isso e relevante mas ta ai.)
       
      Código utilizado:
       
      Javascript
      function formValidation() { event.preventDefault(); var name = document.forms["contactForm"]["name"].value; var email = document.forms["contactForm"]["email"].value; var subject = document.forms["contactForm"]["subject"].value; var message = document.forms["contactForm"]["message"].value; document.getElementById('status').innerHTML = ''; var errorMessage="<span class='error'>All fields are required.</span>"; var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; if (name.trim() == "" ||email.trim() == "" || subject.trim() == "" || message.trim() == "") { document.getElementById('status').innerHTML = errorMessage; return false; } if (!regEx.test(email)) { var errorMessage="<span class='error'>Invalid email.</span>"; document.getElementById('status').innerHTML = errorMessage; return false; } processContactSubmit(); return true; } function processContactSubmit() { var request = new XMLHttpRequest(); request.open("POST", "/wp-admin/admin-ajax.php?action=process_contact_form"); request.onreadystatechange = function() { if(this.readyState === 4 && this.status === 200) { document.getElementById("status").innerHTML = this.responseText; } }; var myForm = document.getElementById("contactForm"); var formData = new FormData(contactForm); request.send(formData); } functions.php
      add_action('wp_ajax_nopriv_process_contact_form', 'process_contact_form'); add_action('wp_ajax_process_contact_form', 'process_contact_form'); //Retirar essa parte para error no console, no contrario ira aparecer no navegador o numero 0. function process_contact_form() { $to = "Recipient Email Address"; $subject = $_POST["subject"]; $headers = "Testing"; $message = $_POST["message"]; $attachments = ""; $sent = wp_mail($to, $subject, $message, $headers, $attachments); if (! $sent) { echo "<span class='error'>Problem in sending mail.</span>"; } else { echo "<span class='success'>Hi, thank you for the message.</span>"; } wp_die(); } Html
      <form name="contactForm" id="contactForm" method="post" onsubmit="return formValidation()" action=""> <p class="comment-form-comment"><textarea id="message" name="message" required="" placeholder="" aria-required="true"></textarea></p> <p class="comment-form-author"><label for="author">Nome: </label> <input id="name" name="name" required="" size="30" type="text" value=" " /></p> <p class="comment-form-author about"><label for="author">Assunto: </label> <input id="subject" name="subject" required="" size="40" type="text" value=" " /></p> <p class="comment-form-email"><label for="email">Email: </label> <input id="email" name="email" required="" size="30" type="text" value="" /></p> <p class="form-submit"><input id="submit" class="submit" name="email_contato" type="submit" value="Enviar" /></p> </form>&nbsp; <h3><div id="status"></div></h3>  
    • Por mm_edilson
      Boa tarde, amigos. Estou criando um sistema de login com PHP e PDO, mas não consigo achar um erro. Ao abrir a página de cadastro, retorna "esta página não está funcionando". Já vasculhei o código de cima a baixo várias vezes, e não consigo encontrar o erro. Se puderem ajudar, fico muito grato.
       
      Minha página de cadastro:
      <?php require_once 'classes/usuarios.php'; $u = new Usuario; ?> <htm lang="pt-br"> <head> <meta charset="utf-8"> <title>SGI - CADASTRO DE USUÁRIO</title> <link rel="stylesheet" href="css/stilo.css"> <body> <div id="corpo-form"> <h1>SGI - LOGIN</h1> <form method="POST"> <input type="text" name="nome" placeholder="Nome Completo" maxlengtht="75"> <input type="email" name="email" placeholder="Usuário" maxlength="50"> <input type="password" name="senha" placeholder="Senha" maxlength="12"> <input type="password" name="confsenha" placeholder="Confirmar Senha" maxlength="12"> <input type="submit" value="INSERIR"> </form> </div> <?php if(isset($_POST['nome'])) { $nome = addslashes($_POST['nome']); $email = addslashes($_POST['email']); $senha = addslashes($_POST['senha']); $confsenha = addslashes($_POST['confsenha']); if(!empty($nome) && !empty($email) && !empty($senha) && !empty($confsenha)) { $u->conectar("****","localhost","***","***"); if($u->msgErro == "") { if($senha == $confsenha){ if($u->cadastrar($nome,$email,$senha)) { echo "Cadastro realizado com sucesso!"; } else { echo "Email já cadastrado no sistema!"; } } else { echo "Senhas digitadas não correspondem."; } } else { echo "Erro:" .$u->msgErro; } } else { echo "Por favor, preencha todos os campos."; } } ?> </body> </head> </html>  
      E aqui a classe usuários
       
      <?php Class Usuario { private $pdo; public $msgErro = ""; public function conectar($nome, $host, $usuario, $senha) { global $pdo; try { $pdo = new PDO("mysql:dbname=".$nome.";host=.$host,$usuario,$senha); } catch (PDOException $e) { $msgErro = $e->getMessage(); } public function cadastrar($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified) { global $pdo; $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e"); $sqk->bindValue(":e",$email); $sql->execute(); if($sql->rowCount() > 0) { return false; } else { $sql = $pdo->prepare("INSERT TO usuarios ($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified) VALUES(:n, :e, :p, :s, :n, :c, :m)"); $sqk->bindValue(":n",$nome); $sqk->bindValue(":e",$email); $sqk->bindValue(":p",md5($senha)); $sqk->bindValue(":s",$situacoe_id); $sqk->bindValue(":n",$niveis_acesso_id); $sqk->bindValue(":c",$created); $sqk->bindValue(":m",$modified); $sql->execute(); return true; } } public function logar($email, $senha) { global $pdo; $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e AND senha = :p"); $sql->bindValue(":e",$email); $sql->bindValue(":p"md5($senha)); $sql->execute(); if($sql->rowCont() > 0) { $dado = $sql->fetch(); session_start(); $_SESSION['id'] = $dado['id']; return true; } else { return false; } } } ?>  
      Se alguém puder ajudar, e conseguir identificar onde está o erro, fico muito, muito agradecido. Abraços
       
       
       
×

Informação importante

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