Redefinição de senha - não consigo enviar o e-mail
26/07/2022
0
Boa noite, amigos. Estou criando um sistema de login, com a funcionalidade de redefinir senha.
Criei o formulário:
o arquivo "envia-nova-senha.php:
e o arquivo "altera_senha.php":
Só que não envia o e-mail. O que poderia estar errado ou faltando?
Criei o formulário:
<?php require_once '../classes/usuarios.php'; ?> <html lang="pt-br"> <head> <meta charset="utf-8"> <title>SGI - PAINEL DE CONTROLE</title> <link type="text/css" rel="stylesheet" media="screen" href="estilos.css" /> <script type="text/javascript" language="javascript"> function valida_form(){ if(document.getElementById("email").value == ""){ alert('Por favor, digite o E-mail do usuário!'); document.getElementById("email").focus(); return false } } </script> </head> <body> <div style="text-align:center"><h2><font color="#ffffff">ESQUECI MINHA SENHA...</h2></font><br><br></div> <div id="form"> <form method="POST" action="envia-nova-senha.php" onsubmit="return valida_form(this)"> <label>Informe seu e-mail:</label><input type="email" id="email" name="email" placeholder="E-mail" maxlength="520"><br> <input type="submit" name="postar" value="SOLICITAR"><br> </form> <?php ?> </div> </body> </head> </html>
o arquivo "envia-nova-senha.php:
<?php session_start(); //require_once "../config.php"; if(isset($_POST['postar'])){ if(empty(trim($_POST["email"]))){ header("location: redefine_password_usu.php"); }else{ $email = trim($_POST["email"]); $dsn = ("mysql:host=localhost;dbname="meu banco";charset=utf8"); $user = "meu usuario"; $pass = "minha senha"; $pdo = new PDO($dsn,$user,$pass); $sql = ("SELECT * FROM usuarios WHERE email='$email'"); $stm = $pdo->prepare($sql); $stm->execute(); $dados = $stm->fetchAll(PDO::FETCH_OBJ); foreach($dados as $reg): $id = $reg->id . ""; $nome = $reg->nome . ""; $senha = $reg->senha . ""; $mail = $reg->email . ""; $chave = sha1($id.$senha); endforeach; if($chave){ header("location: altera_senha.php?$chave"); $_SESSION['destinatario'] = $mail; $_SESSION['nome'] = $nome; }else{ echo '<script> alert ("E-mail não consta em nosso banco de dados. Por favor, entre em contato com o administrador do sistema."); location.href=("redefine_password_usu.php")</script>'; } } } ?>
e o arquivo "altera_senha.php":
<?php session_start(); $chave = $_SERVER['QUERY_STRING']; $value = $_SESSION['destinatario']; $name = $_SESSION['nome']; if (empty($chave)) { echo '<script> alert ("E-mail não consta em nosso banco de dados."); location.href=("redefine_password_usu.php")</script>'; } else { $nome = $name; $email = $value; $link_adress = 'http://meu_dominio/alterar_senha_usu.php?chave='.$chave.''; $to = $value; $subject = 'Redefinição de Senha - SGI'; $message = 'Olá. Esqueceu a sua senha? Tudo bem, acontece! Vamos te ajudar a redefinir. Clique no link '.$link_adress.' e redefina. Ah, uma coisinha importante: Para a sua segurança, este link só é válido por 2 horas. Após este tempo, você vai precisar fazer um novo pedido de redefinição, tudo bem?'; $headers = array( 'From' => 'webmaster@meu_dominio', 'Reply-To' => 'webmaster@meu_dominio', 'X-Mailer' => 'PHP/' . phpversion() ); mail($to, $subject, $message, $headers); } ?>
Só que não envia o e-mail. O que poderia estar errado ou faltando?
Edilson Santiago
Curtir tópico
+ 0
Responder
Post mais votado
29/07/2022
Opa, amigo. Tudo bem?
Tentou dar um dump na sua session na página que envia o e-mail.
Estou desconfiado que seu session_start(), como a session não tem nome, ela inicia uma nova sessão vazia, e por isso não consegue pegar os dados gravados anteriormente.
Para testar mesmo, tente deixar assim:
Em todos os lugares que você precisa dessa sessão especifica, se funcionar era o que eu te disse anteriormente.
Se não, dê um var_dump() para verificar se está trazendo os dados corretos.
Espero ter ajudado. ;)
Tentou dar um dump na sua session na página que envia o e-mail.
Estou desconfiado que seu session_start(), como a session não tem nome, ela inicia uma nova sessão vazia, e por isso não consegue pegar os dados gravados anteriormente.
Para testar mesmo, tente deixar assim:
<?php session_name('redefinir_senha'); session_start();
Em todos os lugares que você precisa dessa sessão especifica, se funcionar era o que eu te disse anteriormente.
Se não, dê um var_dump() para verificar se está trazendo os dados corretos.
Espero ter ajudado. ;)
Alex William
Responder
Clique aqui para fazer login e interagir na Comunidade :)