Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com submit.


nicol store

Pergunta

Eu tenho um sistema para recuperação de senha perdida, configurei um smtp do gmail, o email é enviado para o email informado no form. Só que estou tendo um problema: quando o email do usuário é do gmail o email chega certinho e quando o usuário clica no botão "Atualizar Meus Dados" é redirecionado para a página correta. Mas quando o email do usuário é do hotmail, o botão não faz nada, além das palavras que possuem acentuação não aparecem corretamente. No gmail tudo funciona conforme o planejado. O que pode ser?

Abaixo está o código:

<!DOCTYPE HTML>
 
<html lang="br" class="no-js">
 
<head>
 
<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />
 
</head>
 
<body>
 
<div id="conteudo">
 
<h1>Sistema de login e senha criptografados - Verificando Informações</h1>
 
<div class="borda"></div>
 
<?php
include "conexao.php";
 
//Praticamente faço as mesmas validações que fizemos para o cadastrado do usuário no banco de dados.
//Recebendo os dados e tratando os mesmos para inserção no banco
$recebeEmail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$confereEmail = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_MAGIC_QUOTES);
 
//Nesse if, faço uma conferência em relação ao e-mail informado. Se não for informado nenhum, retorno a mensagem para que o usuário informe corretamente
if ($recebeEmail == NULL ) {
echo "<p>O endereço de e-mail precisa ser informado!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}
 
//Aqui faço a segunda parte da verificação: vejo se no endereço de e-mail foi utilizado algum caractere especial
//Isso serve para evitar uma possível invasão sql no banco de dados, possibilitando assim a proteção e integridade dos dados
//Nesse caso, eu comparo os nomes. Se forem iguais, após passarem pelos filtros, eu inicio a criptografia. Se não forem, peço que volte à página anterior
else if ($recebeEmail != $confereEmail) {
echo "<p>Você informou o seguinte endereço de e-mail: <strong>$confereEmail</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas e/ou barras!) no campo <strong>Informe o E-mail</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false; 
}
/*
Agora vamos consultar no banco de dados para ver se existe realmente esse cadastro
Vamos verificar ambos os dados: E-mail e ainda se o campo "ATIVO" está setado como SIM
*/ 
else{
$consultaInformacoes = pg_query($dbconn, "SELECT * FROM usuarios.usuario WHERE email = '$recebeEmail' AND ativo = 'SIM'") or die (pg_last_error());
$verificaInformacoes = pg_num_rows($consultaInformacoes);
 
if ($verificaInformacoes == 1){
echo "<p>O e-mail informado (<strong><em>$confereEmail</em></strong>) consta de nossa base de dados.</p>
<p>Acesse sua caixa de entrada. Se a mensagem não for encontrada, verifique se não está na caixa de spam!</p>";
	
	include('PHPMailer/PHPMailerAutoload.php');
	$mail = new PHPMailer();
 
	/* #########################
	* # CONFIGURAÇÕES BÁSICAS #
	* #########################
	*/
	$assunto = "..:: Recuperação de dados ArcGIS::..";
	$mensagem = utf8_decode('
<hr />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Recuperação de Dados</title>
<style type="text/css">
<!--
.style1 {
font-family: "Trebuchet MS", Arial;
font-size: 16px;
color: #FFFFFF;
}
.style4 {
font-family: "Trebuchet MS", Arial;
font-size: 12px;
color: #333333;
font-weight: bold;
}
-->
</style></head>
 
<body>
<form method="post" action="http://seudominio.com.br/novo/senha/exclusivo/atualizaInformacoes.php">
<fieldset>
<legend>Recuperação de Dados de Acesso</legend>
<label for="informacao">Para recuperar seus dados, clique no botão "Atualizar Meus Dados"!</label>
<input type="hidden" name="confereEmail" value="'.$confereEmail.'" /><br />
<input type="submit" value="Atualizar Meus Dados" />
</fieldset>
</form>
</body>
</html>
 
<hr />');
	$seu_email = 'seuemail@gmail.com';
	$seu_nome = 'seunome';
	$sua_senha = 'suasenha';
	 
	/* Se for do Gmail o servidor é: smtp.gmail.com */
	$host_do_email = 'smtp.gmail.com';
	 
	/* Configura os destinatários (pra quem vai o email) */
	$mail->AddAddress($recebeEmail);
	// $mail->AddAddress('email@email.com');
	// $mail->AddCC('email@email.com', 'Nome da pessoa'); // Copia
	// $mail->AddBCC('email@email.com', 'Nome da pessoa'); // Cópia Oculta
	 
	/* ###########################
	* # CONFIGURAÇÕES AVANÇADAS #
	* ###########################
	*/
	
	/* Mostra o erros*/
	$email->SMTPDebug = 2;
    /* Define que é uma conexão SMTP */
	$mail->IsSMTP();
	/* Define o endereço do servidor de envio */
	$mail->Host = $host_do_email;
	/* Utilizar autenticação SMTP */
	$mail->SMTPAuth = true;
	/* Protocolo da conexão */
	$mail->SMTPSecure = "tls";
	/* Porta da conexão */
	$mail->Port = "587";
	/* Email ou usuário para autenticação */
	$mail->Username = $seu_email;
	/* Senha do usuário */
	$mail->Password = $sua_senha;
	 
	/* Configura os dados do remetente do email */
	$mail->From = $seu_email; // Seu e-mail
	$mail->FromName = $seu_nome; // Seu nome
	 
	/* Configura a mensagem */
	$mail->IsHTML(true); // Configura um e-mail em HTML
	 
	/*  
	* Se tiver problemas com acentos, modifique o charset
	* para ISO-8859-1  
	*/
	$mail->CharSet = 'UTF-8'; // Charset da mensagem (opcional)
	 
	/* Configura o texto e assunto */
	$mail->Subject  = $assunto; // Assunto da mensagem
	$mail->Body = $mensagem; // A mensagem em HTML
	$mail->AltBody = trim(strip_tags($mensagem)); // A mesma mensagem em texto puro
	 
	/* Configura o anexo a ser enviado (se tiver um) */
	//$mail->AddAttachment("foto.jpg", "foto.jpg");  // Insere um anexo
	 
	/* Envia o email */
	$email_enviado = $mail->Send();
	 
	/* Limpa tudo */
	$mail->ClearAllRecipients();
	$mail->ClearAttachments();
	 
	/* Mostra se o email foi enviado ou não */
	if ($email_enviado) {
		echo "Email enviado!";
	} else {
		echo "<p>Endereço de e-mail informado não consta em nossa base de dados. Por favor, <a href='javascript:history.back();'>volte</a> e tente novamente!</p>";
	}
}
else {
 
//Se nenhuma das confirmações acima foram efetuadas, mais uma vez, retorno uma mensagem de erro ao usuário.
echo "<p>Endereço de e-mail informado não consta em nossa base de dados. Por favor, <a href='javascript:history.back();'>volte</a> e tente novamente!</p>";
}
}
?>
 
</div>
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Estranho... Era para funcionar, seu código está OK.

Tenta retirar o

$mensagem = utf8_decode('');

E usar:

$mensagem = '';

Outra opção é deixar o PHP detectar o charset ao invés de usar o utf8_decode, usa o mb_detect_encoding ( http://ca.php.net/manual/en/function.mb-detect-encoding.php )

$mensagem = mb_detect_encoding('');

Espero poder ajudar.

Editado por hutuh
Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Estranho... Era para funcionar, seu código está OK.

Tenta retirar o

$mensagem = utf8_decode('');

E usar:

$mensagem = '';

Outra opção é deixar o PHP detectar o charset ao invés de usar o utf8_decode, usa o mb_detect_encoding ( http://ca.php.net/manual/en/function.mb-detect-encoding.php )

$mensagem = mb_detect_encoding('');

Espero poder ajudar.

Olá hutuh muito obrigado pela sua valorosa sugestão. Utilizei sua dica que removia o Utf-8 e em relação aos caracteres agora aparecem corretamente. Agora o problema de quando clicar no botão: "atualizar meus dados" continua, não encaminha para página correspondente. Clico e nada acontece, vale salientar que isto ocorre apenas com emails do hotmail. Você tem alguma sugestão?

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite, acho que o erro está aqui:

$recebeEmail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$confereEmail = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_MAGIC_QUOTES);

o seu formulário está enviando o confereEmail

então o $_POST seria:

$recebeEmail = filter_input(INPUT_POST, 'confereEmail', FILTER_VALIDATE_EMAIL);
$confereEmail = filter_input(INPUT_POST, 'confereEmail', FILTER_SANITIZE_MAGIC_QUOTES);

Obs:

Corrigindo: seria este o erro se o seu formulário da mensagem chamar o mesmo script...

Editado por Sandro2011
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...