Problema no login

Home Fóruns PHP/MYSQL Problema no login

Visualizando 14 respostas da discussão
  • Autor
    Posts
    • #76408
      Eurico Oliveira
      Participante

      Bom dia pessoal, tudo bem?

      Estou com problema no meu login, pois ele nao esta fazendo a busca no banco corretamente. Podem me ajudar?

      ` <?
      $u = $_POST[‘usuario’] ?? null;
      $s = $_POST[‘senha’] ?? null;

      if(is_null($u) || is_null($s)){
      require “user-login-form.php”;
      } else {
      $q = “SELECT usuario, nome, senha, tipo FROM usuarios WHERE usuario = ‘$u’ LIMIT 1”;
      $busca = $banco->query($q);
      if(!$busca){
      echo msg_erro(‘Falha ao acessar o banco!’);
      } else {
      if($busca->num_row > 0) {
      $reg = $busca->fetch_object();
      if(testarHash($s, $reg->senha)){
      echo msg_sucesso(‘Logado com sucesso!’);
      $_SESSION[‘user’] = $reg->usuario;
      $_SESSION[‘nome’] = $reg->nome;
      $_SESSION[‘tipo’] = $reg->tipo;

      } else {
      echo msg_erro(‘Senha Invalida!’);
      }
      } else {
      echo msg_erro(‘Usuario nao existe!’);
      }

      }
      }
      echo voltar();
      ?>

    • #76425
      Tutora Mayla
      Mestre

      Eurico, seu código ao executar retorna algum erro? Seja os definidos no próprio código ou algum erro na execução?

      • #76438
        Eurico Oliveira
        Participante

        Nada, isso que e o pior. Ele simplesmente vai diretor para o “usuario nao existe”.

    • #76464

      Olá Eurico

      Ao meu ver na linha onde consta o seguinte código:

      if($busca->num_row > 0) {

      deveria ser

      if($busca->num_rows > 0) {

      ou seja, ao invés de row, usar rows

      Aqui usei assim e funciona.

      Espero ajudar.

      abraço

    • #76476
      Eurico Oliveira
      Participante

      Bom dia!

      Agora resolveu, porem esta parando na “senha invalida”. Sera que eu errei algo no login.php? Mandei o codigo do login e do user-logion na respectiva ordem!

      function cripto($senha) {
          $c = '';
          for($pos = 0; $pos < strlen($senha); $pos++) {
              $letra = ord($senha[$pos]) + 1;
              $c .= chr($letra);
          }
          return $c;
      }
      
      function gerarHash($senha){
          $txt = cripto($senha);
          $hash = password_hash($txt, PASSWORD_DEFAULT);
          return $hash;
      }
      
      function testarHash($senha, $hash){
          $ok = password_verify(cripto($senha), $hash);
          return $ok;
          
      }
      <?
                      $u = $_POST['usuario'] ?? null;
                      $s = $_POST['senha'] ?? null;
      
                      if(is_null($u) || is_null($s)){
                          require "user-login-form.php";
                      } else {
                          $q = "SELECT usuario, nome, senha, tipo FROM usuarios WHERE usuario = '$u' LIMIT 1";
                          $busca = $banco->query($q);
                          if(!$busca){
                              echo msg_erro('Falha ao acessar o banco!');
                          } else {
                              if($busca->num_rows > 0) {
                                  $reg = $busca->fetch_object();
                                  if(testarHash($s, $reg->senha)){
                                      echo msg_sucesso('Logado com sucesso!');
                                      $_SESSION['user'] = $reg->usuario;
                                      $_SESSION['nome'] = $reg->nome;
                                      $_SESSION['tipo'] = $reg->tipo;
          
                                  } else {
                                      echo msg_erro('Senha Invalida!');
                                  }
                              } else {
                                  echo msg_erro('Usuario nao existe!');
                              }
                              
                          }
                      }
                      echo voltar();
                  ?>
    • #76770

      Boa tarde, estou com o mesmo problema do Rodrigo.
      Quando eu dou print_r($reg), ele me retorna exatamente o que está no banco, mas quando faço o restante do código, digito usuario e senha corretamente(admin/admin), ele me retorna “senha incorreta”. Aglguém pode me ajudar?

      • #76771

        Testei agora desativando a funçao de criptogragar e funcionou. acredito que o erro está nela, mas nâo sei aonde. segue o código…

        <?php

        // GERAR CRIPTO DA SENHA. VAI LER A SENHA DIGITADA E FAZER COM QUE ELA VIRE UM CARACTER ACIMA DO DIGITADO
        function cripto($senha){
        $c = ”;
        for($pos = 0; $pos < strlen($senha); $pos++){
        $letra = ord($senha[$pos]) + 1;
        $c .= chr($letra);
        }
        return $c;
        }

    • #76943
      Tutora Mayla
      Mestre

      Eurico e Ana, é possível que a hash salva no banco de dados tenha sido gerada sem a aplicação da função de criptografar, isto é, a hash salva no banco é referente à palavra “admin” e, ao aplicarmos a função de criptografia estaremos testando a hash de “benjo”. Isto irá falhar pois as hashes destas duas palavras não são compatíveis. Para continuar utilizando a função de criptografar, façam o procedimento de gerar uma nova hash e salvá-la no banco de dados, mas uma solução também válida é parar de utilizar a função de criptografar, conforme a Ana fez.

      Espero ter ajudado, quaisquer outras dúvidas estamos à disposição.

    • #85658

      Boa noite, estou com o mesmo problema dos amigos, consegui contornar retirando o a função criptografar,
      mas tem outra solução na qual não precise retirar essa função ? Gostei muito dela.

      Desde já obrigado.

      • #85891
        Tutora Vera
        Mestre

        Douglas, O banco que tem para download na aula não está usando a função de criptografar. Então para resolver ou criar os dados novos é só usar a função de criptografar ou retirar a função que vai funcionar.

    • #110268
      Welerson
      Participante

      O problema tem 2 possíveis soluções, a primeira é: Crie um arquivo a parte somente para gerar hash, ai você gera uma hash da palavra “benjo” e o resultado você coloca no lugar da senha do usuário admindentro do banco, pois a senha admin, está baseada na “admin” após ser criptografada e virar “benjo”. Gerando a hash da palavra “benjo” você estará nada mais nada menos que gerando a palavra “admin” para iserir no campo senha. Após isso vai funcionar normalmente o login admin – admin. A segunda opção, seria remover as funções, mas além de não seguro perde o fundamento de aprendizagem sem contar que vai ter que modificar um pouco a estrutura da verificação de login.

    • #110351
      Tutora Vera
      Mestre

      Welerson, agradecemos por sua colaboração com o fórum. Quanto a segunda opção como você mesmo falou, realmente perde o fundamento da aprendizagem e não é o mais recomendável, porém fica mesmo ao critério de cada usuário.

    • #127543
      Rodrigo Guimarães
      Participante

      Boa tarde,

      Na tela de login do meu programa está dando o seguinte erro:

      Fatal error: Uncaught TypeError: Unsupported operand types: string + int in C:\xampp2\htdocs\PHP.SQL\includes\login.php:14 Stack trace: #0 C:\xampp2\htdocs\PHP.SQL\includes\login.php(21): cripto(‘admin’) #1 C:\xampp2\htdocs\PHP.SQL\user-login.php(35): testarHash(‘admin’, ‘$2y$10$UpMQCcir…’) #2 {main} thrown in C:\xampp2\htdocs\PHP.SQL\includes\login.php on line 14

      Segue abaixo o código utilizado no arquivo user-login.php:

              <?php
                  $u = $_POST ['usuario'] ?? null;
                  $s = $_POST ['senha'] ?? null;
              if  (is_null ($u) || is_null ($s)) {
                  require "user-login-form.php";
                  }
                      else {
                      $q = "SELECT usuario, nome, senha, tipo FROM usuarios WHERE usuario = '$u' LIMIT 1";
                      $busca = $banco->query($q);
                      if (!$busca) {
                      echo msg_erro ('Falha ao acessar o banco!');
                  } 
                      else  
                      $reg = $busca ->fetch_object ();       
                      if (testarHash($s, $reg->senha)) {
                      echo msg_erro ('Falha ao acessar o banco de dados');
                  }                          
                      else {
                      $reg = $busca->fetch_object();
                      if (testarHash($s, $reg->senha)) {
                      echo msg_sucesso ('Logado com sucesso');
                   }
                      else {
                      echo msg_erro ('Senha invalida');
                   }
                 }
              }

      Código utilizado no arquivo login.php:
      `<?php

      //GERAR HASH DE SENHA EM PHP//
      function gerarHash ($senha) {
      $texto = cripto ($senha);
      $hash = password_hash ($senha, PASSWORD_DEFAULT);
      return $hash;
      }

      function cripto ($senha) {
      $c = ”;
      for ($posição = 0; $posição<strlen ($senha); $posição++) {
      $letra = $senha[$posição] + 1;
      $c .= chr ($letra);
      }
      return $c;
      }

      function testarHash ($senha, $hash) {
      $ok = password_verify(cripto($senha), $hash);
      return $ok;
      }

      session_start();

      if (!isset($_SESSION[‘user’])) {
      $_SESSION [‘user’] =””;
      $_SESSION [‘nome’] =””;
      $_SESSION [‘tipo’] =””;
      }

      function logout () {
      unset($_SESSION[‘user’]);
      unset($_SESSION[‘nome’]);
      unset($_SESSION[‘user’]);

      }

    • #127604
      Tutora Jessica
      Moderador

      Ola Rodrigo, em qual modulo e aula você esta?

    • #127680
      Rodrigo Guimarães
      Participante

      PHP com MySQL – Módulo 02: Segurança e níveis de acesso

      Fazendo o login funcionar

    • #127687
      Tutora Jessica
      Moderador

      Ola Rodrigo, o seu erro quer dizer que você esta tentando somar string + inteiro, por isso do erro.

    • #127689
      Rodrigo Guimarães
      Participante

      Como posso consertar isso no código? Poderia me ajudar por favor?

    • #127698
      Tutora Jessica
      Moderador

      Ola Rodrigo, trouxe a sua duvida para uma ja existente no fórum, dê uma olhadinha nas resoluções e explicações acima.
      Você só precisa somar inteiro com inteiro, inteiro com string da erro.

Visualizando 14 respostas da discussão
  • Você deve fazer login para responder a este tópico.