- Este tópico contém 17 respostas, 9 vozes e foi atualizado pela última vez 12 meses atrás por Tutora Jessica.
-
AutorPosts
-
-
28 de setembro de 2021 às 09:39 #76408Eurico OliveiraParticipante
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();
?> -
28 de setembro de 2021 às 13:17 #76425Tutora MaylaMestre
Eurico, seu código ao executar retorna algum erro? Seja os definidos no próprio código ou algum erro na execução?
-
28 de setembro de 2021 às 13:42 #76438Eurico OliveiraParticipante
Nada, isso que e o pior. Ele simplesmente vai diretor para o “usuario nao existe”.
-
-
28 de setembro de 2021 às 21:45 #76464Ricardo Otomar Maria da SilvaParticipante
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
-
29 de setembro de 2021 às 07:59 #76476Eurico OliveiraParticipante
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(); ?>
-
3 de outubro de 2021 às 15:33 #76770Ana Carolina CampolinaParticipante
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?-
3 de outubro de 2021 às 16:37 #76771Ana Carolina CampolinaParticipante
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;
}
-
-
5 de outubro de 2021 às 21:00 #76943Tutora MaylaMestre
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.
-
6 de fevereiro de 2022 às 21:44 #85658Douglas Eduardo Guimarães PereiraParticipante
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.
-
9 de fevereiro de 2022 às 17:13 #85891Tutora VeraMestre
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.
-
-
12 de fevereiro de 2023 às 23:03 #110268WelersonParticipante
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 admin lá dentro 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.
-
14 de fevereiro de 2023 às 09:10 #110351Tutora VeraMestre
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.
-
26 de novembro de 2023 às 14:25 #127543Rodrigo GuimarãesParticipante
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’]);}
-
27 de novembro de 2023 às 12:58 #127604Tutora JessicaModerador
Ola Rodrigo, em qual modulo e aula você esta?
-
28 de novembro de 2023 às 10:07 #127680Rodrigo GuimarãesParticipante
PHP com MySQL – Módulo 02: Segurança e níveis de acesso
Fazendo o login funcionar
-
28 de novembro de 2023 às 14:03 #127687Tutora JessicaModerador
Ola Rodrigo, o seu erro quer dizer que você esta tentando somar string + inteiro, por isso do erro.
-
28 de novembro de 2023 às 14:14 #127689Rodrigo GuimarãesParticipante
Como posso consertar isso no código? Poderia me ajudar por favor?
-
28 de novembro de 2023 às 15:13 #127698Tutora JessicaModerador
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.
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.