Ir ao conteúdo
  • Cadastre-se
Relentless

PHP recuperar senha em .php

Recommended Posts

Boa noite, eu estou criando uma pagina web e estou com problemas para fazer o "esqueci minha senha", o codigo é esse aqui mas ele da erro quando tento executar.

<?php
    
    include("db.php");

    if(isset($_POST[ok])){  <-- aqui da erro

        $email = $mysqli->escape_string($_POST['email']);

        if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
            $erro[] = "E-mail inválido.";
        }

        $sql_code = "SELECT senha,id FROM usuarios WHERE email = '$_SESSION'";
        $sql_query = $mysqli->query($sql_code) or die($mysqli->error);
        $dado = $sql_query->fetch_assoc();
        $total = $sql_query->num_rows;

        if($total == 0){
            $erro[] = "O email informado não existe no banco de dados.";
        }

        if(count($erro) == 0 && total > 0){


        $novasenha = substrmd5(time(),0,6);
        $nscriptografada = md5(md5($novasenha));
        

        if(mail($email,"Sua nova senha","Sua nova senha:".$novasenha)){

        $sql_code = "UPDATE usuarios SET senha = '$nscriptografada' WHERE email = '$email'";
        $sql_query = $mysqli->query($sql_code) or die($mysqli->error);

            if($sql_query)
                $erro[] = "Senha Alterada com Sucesso!";

            }
        }
    }

?>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <?php if(count($erro) > 0)
        foreach($erro as $msg){ <-- aqui da erro
            echo "<p>$msg</p>";        
        }
    ?>
        <form method="POST" action="">
        <input value="<?php echo $_POST['email']; ?>" placeholder="Seu e-mail" name="email" type="text">
        <input name="ok" value="ok" type="submit">
</form>
</body>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Relentless Olá,  Qual o erro exatamente que você esta tendo?

 

Tem alguns pontos que quero ressaltar. 

Você faz uma consulta usando a sessão, mas não abriu ela no inicio do código php.

O update na tabela está sendo feito baseado no e-mail. ( ele é sua chave primária?) 

 

O ideal é que você modele seu banco de dados para que ele aja em torno no ID auto increment que o usuário recebe ao fazer o registro.

 

Evite de usar a função mail(), o phpmailer é muito melhor para envio de e-mails.

 

No seu form, o action está vazio. Por padrão da w3c e questões de segurança use:

action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"

Embora, recomende sempre que use um arquivo php separado para receber os dados de um formulário.

Isso permite que use o ajax no javascript

Compartilhar este post


Link para o post
Compartilhar em outros sites

A chave primaria do meu banco é o ID, coloquei o  session_start(); no começo do codigo mas não funcionou também, como sou novato, peguei esse php de uma video aula. o erro que dá está anexado. 

Me ajude por favor

 

 

WhatsApp Image 2018-05-26 at 18.33.28.jpeg

adicionado 4 minutos depois

@DiF Como você me indicaria fazer esse codigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas a session foi criada corretamente?

 

tipo:

<?php

session_start();

$_SESSION["nome"] = "nome_do_usuario";

?>

nas páginas seguintes ou na página que vai conter outras páginas(caso vá usar include), voce também DEVE iniciar a sessão session_start();

Para saber se a sessão está funcionado usa esse código para obter o nome do usuario logado em : nome_do_usuario

echo "Sessão atual: ". $_SESSION["nome"];

o resultado será exibir o nome que voce colocar em nome_do_usuario

 

Outra forma de ver se deu certo a sessão, é verificar se voce obteve um numero de sessão:

echo "valor da sessão: ".session_id();

o resultado seria algo como isso : valor da sessão: m8geqh7b0q1g0kdrkte0

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Relentless Então, não sei como está modelado o seu banco de dados.

Mas não é difícil.

 

Eu faria da seguinte forma:

 

O formulário:

<form action="processaDados.php" method="post">
    <input type="text" name="email" />
     <input type="submit" value="Gerar nova senha" />
</form> 

Note que  action emite os dados formulário para outro arquivo php.

Neste  você armazena o valor do campo emitido na variável.,  instancia a classe phpmailer e envia o e-mail com uma nova senha gerada aleatoriamente. 

 

O erro na imagem que postou, indica que a variável email não possui valor.

 

PS: para ter uma experiência mais legal, recomendo implementar esta geração de senha via e-mail com ajax.

  • Curtir 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





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×