Como Dar Feedback Ao Usuário Em Script De Esqueci A Senha
Started By marcosbin, 09/03/2010, 11:22
7 replies to this topic
#1
Posted 09/03/2010, 11:22
Olá amigos
Desenvolvi um script para que o usuário receba, por e-mail, a senha cadastrada em um formulário, caso a tenha esquecido. A recuperação dos dados e o envio do e-mail funcionam perfeitamente, pelo menos no meu servidor. Mas não consigo deixar a mensagem de feedback para o usuário. Quando ele clica no botão de submit, a página é redirecionada para o index automaticamente sem aparecer a msg de erro ou acerto. Já tentei corrigir isso usando âncora (HTML), header (PHP), window.location (javascript), e nada. Em resumo, quero o seguinte:
1 – Depois que o usuário clicar em enviar, não redirecionar a página para o index, mas ficar em “senha.php” (página do form), onde deverá aparecer a msg de erro ou acerto.
2 – Surgir uma msg de erro se o campo email estiver vazio (com validação em PHP, não em javascript) ou se o email não estiver cadastrado no banco de dados.
3 – Surgir uma msg de acerto se o email estiver cadastrado e se a senha for enviada corretamente.
Alguém pode me ajudar? Segue o código comentado:
senha.php
<?php include("recuperasenha.php"); // onde fica o código para recuperar os campos email e senha ?>
<html>
<head>...</head>
<body>
<form name="senha" action="<?php $_SERVER['PHP_SELF'];?>" method="post">
E-mail:<br />
<input type="text" name="email " size="40" /><br />
<br />
<input type="submit" name="submit" value="OK" />
</form>
<?php $erro ?> //aqui, quero que apareça a msg de feedback
</body>
</html>
recuperasenha.php
<?php include("conexao.php"); // arquivo de conexão com o banco de dados. Está funcionando, então não vou detalhá-lo
$email = $_POST['email'];$query = mysql_query("SELECT * FROM minhatabela WHERE email = '".$email."'", $conexao); // aqui e nas duas linhas abaixo, eu consulto o banco pra saber se o email existe e se a senha é equivalente ao email
if ($rs = mysql_fetch_array($query)){
$senha_banco = $rs["senha"];
}else{
$erro = "Seu e-mail não consta em nossa base de dados! "; // aqui eu quero definir a mensagem que vai aparecer se o email não estiver no banco. Mas acho que está errado, pois desta forma a msg já aparece qdo a pessoa entra na página, não precisa nem digitar o email
}
$msg = "<font face='Verdana' size='2'>Recuperação de senha</font><br /><br />";
$msg .= "<font face='Verdana' size='2'><strong>Sua senha é:</strong> $senha_banco</font><br /><br />"; // este código funciona perfeitamente, mesmo sem o ponto antes da variável
$mensagem = $msg;
$destinatario = $email;
$assunto = "Recuperação de senha";
$headers = "Content-type: text/html; charset=iso-8859-1";
$headers .= "Bcc: meuemail@meudominio.com";
if($submit){
ini_set('sendmail_from', 'postmaster@meudominio.com); // este código é exigido pelo meu servidor
mail($destinatario, $assunto, $mensagem, $headers);
$erro = "Mensagem enviada com sucesso"; // mensagem de feedback para acerto, que não funciona. Além disso, a partir daqui a página é direcionada automaticamente para o index.php, embora eu tenha tentado alguns comandos para ficar em senha.php
}
?>
Desenvolvi um script para que o usuário receba, por e-mail, a senha cadastrada em um formulário, caso a tenha esquecido. A recuperação dos dados e o envio do e-mail funcionam perfeitamente, pelo menos no meu servidor. Mas não consigo deixar a mensagem de feedback para o usuário. Quando ele clica no botão de submit, a página é redirecionada para o index automaticamente sem aparecer a msg de erro ou acerto. Já tentei corrigir isso usando âncora (HTML), header (PHP), window.location (javascript), e nada. Em resumo, quero o seguinte:
1 – Depois que o usuário clicar em enviar, não redirecionar a página para o index, mas ficar em “senha.php” (página do form), onde deverá aparecer a msg de erro ou acerto.
2 – Surgir uma msg de erro se o campo email estiver vazio (com validação em PHP, não em javascript) ou se o email não estiver cadastrado no banco de dados.
3 – Surgir uma msg de acerto se o email estiver cadastrado e se a senha for enviada corretamente.
Alguém pode me ajudar? Segue o código comentado:
senha.php
<?php include("recuperasenha.php"); // onde fica o código para recuperar os campos email e senha ?>
<html>
<head>...</head>
<body>
<form name="senha" action="<?php $_SERVER['PHP_SELF'];?>" method="post">
E-mail:<br />
<input type="text" name="email " size="40" /><br />
<br />
<input type="submit" name="submit" value="OK" />
</form>
<?php $erro ?> //aqui, quero que apareça a msg de feedback
</body>
</html>
recuperasenha.php
<?php include("conexao.php"); // arquivo de conexão com o banco de dados. Está funcionando, então não vou detalhá-lo
$email = $_POST['email'];$query = mysql_query("SELECT * FROM minhatabela WHERE email = '".$email."'", $conexao); // aqui e nas duas linhas abaixo, eu consulto o banco pra saber se o email existe e se a senha é equivalente ao email
if ($rs = mysql_fetch_array($query)){
$senha_banco = $rs["senha"];
}else{
$erro = "Seu e-mail não consta em nossa base de dados! "; // aqui eu quero definir a mensagem que vai aparecer se o email não estiver no banco. Mas acho que está errado, pois desta forma a msg já aparece qdo a pessoa entra na página, não precisa nem digitar o email
}
$msg = "<font face='Verdana' size='2'>Recuperação de senha</font><br /><br />";
$msg .= "<font face='Verdana' size='2'><strong>Sua senha é:</strong> $senha_banco</font><br /><br />"; // este código funciona perfeitamente, mesmo sem o ponto antes da variável
$mensagem = $msg;
$destinatario = $email;
$assunto = "Recuperação de senha";
$headers = "Content-type: text/html; charset=iso-8859-1";
$headers .= "Bcc: meuemail@meudominio.com";
if($submit){
ini_set('sendmail_from', 'postmaster@meudominio.com); // este código é exigido pelo meu servidor
mail($destinatario, $assunto, $mensagem, $headers);
$erro = "Mensagem enviada com sucesso"; // mensagem de feedback para acerto, que não funciona. Além disso, a partir daqui a página é direcionada automaticamente para o index.php, embora eu tenha tentado alguns comandos para ficar em senha.php
}
?>
#2
Posted 09/03/2010, 11:48
Fala Marcos,
Faltou o echo pra exibir o erro
senha.php
Fiz umas modificações
[]'s
Faltou o echo pra exibir o erro
senha.php
<?php if(isset($_POST["enviar_senha"])); include("recuperasenha.php"); // onde fica o código para recuperar os campos email e senha } ?> <html> <head>...</head> <body> <form name="senha" action="<?php $_SERVER['PHP_SELF'];?>" method="post"> E-mail:<br /> <input type="text" name="email " size="40" /><br /> <br /> <input type="submit" name="enviar_senha" value="OK" /> </form> <?php echo $erro; ?> //aqui, quero que apareça a msg de feedback </body> </html>
Fiz umas modificações
[]'s
Edição feita por: digo, 09/03/2010, 11:48.
#3
Posted 09/03/2010, 14:37
Oi digo, blz? Valeu pela resposta rápida. Eu não coloquei o echo no erro pq, dessa forma, a msg aparecia mesmo sem o cara digitar o e-mail e clicar em enviar. Vou testar suas correções e darei resposta. Obrigado de novo. Abs
Oi digo
Não funcionou. Não acontece nenhuma das 3 coisas que eu queria.
Oi digo
Não funcionou. Não acontece nenhuma das 3 coisas que eu queria.
#4
Posted 09/03/2010, 15:01
A intenção do Digo foi boa e estava no caminho certo, mas marcos, teu cod tem muitos erros de lógica.
Tente assim que se eu não esqueci de nada vai funcionar:
senha.php
recuperasenha.php
Analise bem o que eu fiz e como estava o seu e tente entender a lógica, que na verdade foi onde mais errou no seu código, lógica.
Até mais
Tente assim que se eu não esqueci de nada vai funcionar:
senha.php
<html> <head>...</head> <body> <?php if (isset($_POST['submit'])){ include("recuperasenha.php"); } ?> <form name="senha" action="<?php $_SERVER['PHP_SELF'];?>" method="post"> E-mail:<br /> <input type="text" name="email " size="40" /><br /><br /> <input type="submit" name="submit" value="OK" /> </form> </body> </html>
recuperasenha.php
<?php include "conexao.php"; $email = $_POST['email']; $query = mysql_query("SELECT * FROM minhatabela WHERE email = '".$email."'"); if (mysql_num_rows($query) > 0){ $senha_banco = $rs['senha']; $msg = "<font face=\"Verdana\" size=\"2\">Recuperação de senha</font><br /><br />"; $msg .= "<font face=\"Verdana\" size=\"2\"><strong>Sua senha é:</strong>".$senha_banco."</font><br /><br />"; $destinatario = $email; $assunto = "Recuperação de senha"; $headers = "Content-type: text/html; charset=iso-8859-1"; $headers .= "Bcc: meuemail@meudominio.com"; ini_set('sendmail_from', 'postmaster@meudominio.com'); mail($destinatario, $assunto, $mensagem, $headers); $erro = "Mensagem enviada com sucesso"; } else{ $erro = "Seu e-mail não consta em nossa base de dados!"; } ?>
Analise bem o que eu fiz e como estava o seu e tente entender a lógica, que na verdade foi onde mais errou no seu código, lógica.
Até mais
Crab - Ex-Administrador Geral fórum WMO
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#5
Posted 09/03/2010, 17:12
E aí, Crab, blz?
Cara, valeu. Entendi bem seu script e vc tinha toda razão. É que a gente vai juntando pedaços de código aqui e ali e acaba com um produto final todo remendado (e errado).
Seu código estava quase perfeito. A senha não estava mais chegando no e-mail, pq faltou definir o "$rs", fazendo o comando mysql_fetch_array. Além disso, vc tirou o trecho em que eu definia $mensagem como igual a $msg, no arquivo recuperarsenha.php, e faltou o echo $erro no senha.php.
Já o meu código tinha um erro no HTML, que eu não publiquei aqui - em outra página, para forçar o encerramento da sessão ao fechar o browser, pus um comando no body que me levava para o arquivo sair.php (de logout). Eu aproveitei esse código e, por isso, era redirecionado para a index.
Para quem estiver lendo esta página e for ainda mais iniciante do que eu, vale lembrar que estou definindo o charset como iso-8859-1. Então, para funcionar corretamente em todos os webmails, é preciso trocar os acentos pelos caracteres especiais.
Ao final, ficam assim os arquivos corretos:
senha.php
recuperasenha.php
Valeu!!! Abs
Cara, valeu. Entendi bem seu script e vc tinha toda razão. É que a gente vai juntando pedaços de código aqui e ali e acaba com um produto final todo remendado (e errado).
Seu código estava quase perfeito. A senha não estava mais chegando no e-mail, pq faltou definir o "$rs", fazendo o comando mysql_fetch_array. Além disso, vc tirou o trecho em que eu definia $mensagem como igual a $msg, no arquivo recuperarsenha.php, e faltou o echo $erro no senha.php.
Já o meu código tinha um erro no HTML, que eu não publiquei aqui - em outra página, para forçar o encerramento da sessão ao fechar o browser, pus um comando no body que me levava para o arquivo sair.php (de logout). Eu aproveitei esse código e, por isso, era redirecionado para a index.
Para quem estiver lendo esta página e for ainda mais iniciante do que eu, vale lembrar que estou definindo o charset como iso-8859-1. Então, para funcionar corretamente em todos os webmails, é preciso trocar os acentos pelos caracteres especiais.
Ao final, ficam assim os arquivos corretos:
senha.php
<html> <head>...</head> <body> <?php if (isset($_POST['submit'])){ include("recuperasenha.php"); } ?> <form name="senha" action="<?php $_SERVER['PHP_SELF'];?>" method="post"> E-mail:<br /> <input type="text" name="email " size="40" /><br /><br /> <input type="submit" name="submit" value="OK" /> </form> <?php echo $erro ?> </body> </html>
recuperasenha.php
<?php include("conexao.php"); $email = $_POST['email']; $query = mysql_query("SELECT * FROM minhatabela WHERE email = '".$email."'"); if(mysql_num_rows($query) > 0){ $rs = mysql_fetch_array($query); $senha_banco = $rs["senha"]; $msg = "<font face=\"Verdana\" size=\"2\">Recuperação de senha</font><br /><br />"; $msg .= "<font face=\"Verdana\" size=\"2\"><strong>Sua senha é:</strong>".$senha_banco."</font><br /><br />"; $mensagem = $msg; $destinatario = $email; $assunto = "Recuperação de senha"; $headers = "Content-type: text/html; charset=iso-8859-1"; $headers .= "Bcc: meuemail@meudominio.com"; ini_set('sendmail_from', 'postmaster@meudominio.com'); mail($destinatario, $assunto, $mensagem, $headers); $erro = "Mensagem enviada com sucesso!"; } else{ $erro = "Seu e-mail não consta em nossa base de dados!"; } ?>
Valeu!!! Abs
Edição feita por: marcosbin, 09/03/2010, 17:26.
#6
Posted 09/03/2010, 17:27
Marcos eu realmente esqueci o $rs, e de alterar lá na função mail() de $mensagem pra $msg... mas foi só isso.
O resto vc está equivocado.
Pra que atribuir $msg pra $mensagem.
Use $msg direto...
E quanto à isso...
<?php echo $erro ?>
... desta forma, está errado, pois veja bem...
Entenda que usando o isset($_POST['submit]) a variável $erro só estará definida quando o form for enviado... pois o arquivo que define a var $erro só é executado se o form é enviado.
Então para exibir a mensagem de erro ali abaixo do form, no mínimo também deve fazer a verificação se a var $erro está definida , senão atribua NULL.
De outra forma irá gerar NOTICES ou até WARNINGS se não me engano, mas acho que apenas NOTICES.
Então ficaria assim corrigido:
senha.php
recuperasenha.php
O resto vc está equivocado.
Pra que atribuir $msg pra $mensagem.
Use $msg direto...
E quanto à isso...
<?php echo $erro ?>
... desta forma, está errado, pois veja bem...
Entenda que usando o isset($_POST['submit]) a variável $erro só estará definida quando o form for enviado... pois o arquivo que define a var $erro só é executado se o form é enviado.
Então para exibir a mensagem de erro ali abaixo do form, no mínimo também deve fazer a verificação se a var $erro está definida , senão atribua NULL.
De outra forma irá gerar NOTICES ou até WARNINGS se não me engano, mas acho que apenas NOTICES.
Então ficaria assim corrigido:
senha.php
<html> <head>...</head> <body> <?php if (isset($_POST['submit'])){ include("recuperasenha.php"); } ?> <form name="senha" action="<?php $_SERVER['PHP_SELF'];?>" method="post"> E-mail:<br /> <input type="text" name="email " size="40" /><br /><br /> <input type="submit" name="submit" value="OK" /> </form> <?php echo (isset($erro)) ? $erro : NULL; ?> </body> </html>
recuperasenha.php
<?php include "conexao.php"; $email = $_POST['email']; $query = mysql_query("SELECT * FROM minhatabela WHERE email = '".$email."'"); if (mysql_num_rows($query) > 0){ $rs = mysql_fetch_array($query); $senha_banco = $rs['senha']; $msg = "<font face=\"Verdana\" size=\"2\">Recuperação de senha</font><br /><br />"; $msg .= "<font face=\"Verdana\" size=\"2\"><strong>Sua senha é:</strong>".$senha_banco."</font><br /><br />"; $destinatario = $email; $assunto = "Recuperação de senha"; $headers = "Content-type: text/html; charset=iso-8859-1"; $headers .= "Bcc: meuemail@meudominio.com"; ini_set('sendmail_from', 'postmaster@meudominio.com'); mail($destinatario, $assunto, $msg, $headers); $erro = "Mensagem enviada com sucesso"; } else{ $erro = "Seu e-mail não consta em nossa base de dados!"; } ?>Até mais
Crab - Ex-Administrador Geral fórum WMO
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
#7
Posted 09/03/2010, 22:19
Oi Crab
Mais uma vez, muito obrigado pela força. Quem sou eu pra dar pitaco, só queria mostrar pra quem achar esta página pelos Googles da vida como ficou o código final.
O $rs realmente era necessário, pois a senha não estava mais chegando ao e-mail. $msg = $mensagem não era, mas no código que vc postou inicialmente o $msg estava definido e o $mensagem era chamado na função mail. Veja lá. Aí, eu igualei tudo como $mensagem, mas realmente poderia ter sido $msg.
Com o $erro aconteceu algo parecido. No código do arquivo senha.php que vc postou, não havia menção a ele. A mensagem era definida para acerto ou erro no recuperasenha.php, mas não era chamada no senha.php. Eu usei echo $senha e funcionou. Mas se o isset($erro) com NULL é o mais correto, vou mudar agora mesmo.
Como falei, ainda estou iniciando em PHP e aprendendo muito aqui no fórum com vcs. Valeu pela ajuda. Abs
Mais uma vez, muito obrigado pela força. Quem sou eu pra dar pitaco, só queria mostrar pra quem achar esta página pelos Googles da vida como ficou o código final.
O $rs realmente era necessário, pois a senha não estava mais chegando ao e-mail. $msg = $mensagem não era, mas no código que vc postou inicialmente o $msg estava definido e o $mensagem era chamado na função mail. Veja lá. Aí, eu igualei tudo como $mensagem, mas realmente poderia ter sido $msg.
Com o $erro aconteceu algo parecido. No código do arquivo senha.php que vc postou, não havia menção a ele. A mensagem era definida para acerto ou erro no recuperasenha.php, mas não era chamada no senha.php. Eu usei echo $senha e funcionou. Mas se o isset($erro) com NULL é o mais correto, vou mudar agora mesmo.
Como falei, ainda estou iniciando em PHP e aprendendo muito aqui no fórum com vcs. Valeu pela ajuda. Abs
Edição feita por: marcosbin, 09/03/2010, 22:21.
#8
Posted 10/03/2010, 00:24
é... quanto à $msg e $mensagem eu mesmo mencionei no meu último post acima, que esqueci de mudar na função mail()... veja lá tbm.
Mas postei correto depois.
Na correria esqueci alguns pontos... mas é falta de atenção... acontece nas melhores famílias kkkkkkkkkkk
Legal que tu estava ligado... sinal que tá afim de aprender mesmo e não ficar no copy and paste
Mas se ajudou, considere apertar o botão verde kkkkkkkkk
Abraço Até mais
Mas postei correto depois.
Na correria esqueci alguns pontos... mas é falta de atenção... acontece nas melhores famílias kkkkkkkkkkk
Legal que tu estava ligado... sinal que tá afim de aprender mesmo e não ficar no copy and paste
Mas se ajudou, considere apertar o botão verde kkkkkkkkk
Abraço Até mais
- marcosbin likes this
Crab - Ex-Administrador Geral fórum WMO
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
canaldev.com.br
sistemabasico.com.br
twitter.com/sistemabasico
twitter.com/lunelli
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)