Redefinição de senha - não consigo enviar o e-mail
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
Curtidas 0
Melhor post
Alex William
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. ;)
GOSTEI 1