Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Della_Rovere

Sistema "Perdi minha senha"

Recommended Posts

Olá a todos.

Pessoal, primeiramente, não sou fera em PHP. Se for algo simples, me desculpe o post, mas procurei muito na net e não encontrei respostas.

Preciso fazer um sistema re recuperação de senha aquele famoso "Perdi minha senha".

 

Quando rodo ele, ele não envia o email e exibe a msg:

 

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/site/www/notom/perdi-minha-senha/envia_senha.php on line 21
Os dados informados nao sao compativeis com os cadastrados! Tente novamente!

 

Não sei o que acontece. Se alguém puder me ajudar, agradeço.

Segue o código:

 

index.html

<form action="envia_senha.php" method="post" name="recupera">
    <h1><div align="center">Recuperar de Senha</div></h1>
    <p>Preencha seu e-mail:</p>
    <div align="center">
    	E-mail: <input type="text" name="email2" size="30">
        <br /><br />
    	<input type="submit" name="recuperar" value="Recuperar!">
    </div>
</form>

envia_senha.php

<?php
$server = "mysql.meu-servidor.com.br";
$user = "meu-usuario";
$data = "meu-banco";
$pass = "minha-senha";

$conexao = mysql_connect("$server", "$user", "$pass");
mysql_select_db($data, $conexao);
?>

<?php
//Criando Variaveis//
if(isset($_POST['recuperar'])) {
$email = $_POST['email2']; // Aqui estou recuperando o input do formulário preenchido pelo usuário


//Buscar dados no SQL//
$sql_busca = 'SELECT email FROM usuarios WHERE email = "$email"';
$query = mysql_query($sql_busca);
$dados = mysql_fetch_array($query);

$emailsql = $dados['email'];
$senha = $dados['senha'];

//Se os E-mails Forem Iguais//

if ($email == $emailsql) {
    $mensagem = "Presado sr. ".$nome.",<br><br>";
    $mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";
    $mensagem .= "Senha: ".$senha."</p>";
    
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    
    mail($email, "Recuperação de Senha do site", $mensagem, $headers);
    
    echo "<b>Seus dados foram enviados com sucesso!</b>";
    }
//Caso os E-mails não são Iguais//
    else{
    echo "<b>Os dados informados nao sao compativeis com os cadastrados! Tente novamente!</b>";
    }
}
?>

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o resultado de fetch array veio em branco.

 

Veja que você solicita a exibição da informação mesmo sem saber se dará certo ou não

$dados = mysql_fetch_array($query);
 
$emailsql = $dados['email'];
$senha = $dados['senha'];

Pra corrigir isso, basta condicionar.

$dados = mysql_fetch_array($query);
 
if(!empty($dados)){
    $emailsql = $dados['email'];
    $senha = $dados['senha'];
}
else{
    echo "Nenhum registro selecionado";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Provavelmente o resultado de fetch array veio em branco.

 

Veja que você solicita a exibição da informação mesmo sem saber se dará certo ou não

$dados = mysql_fetch_array($query);
 
$emailsql = $dados['email'];
$senha = $dados['senha'];

Pra corrigir isso, basta condicionar.

$dados = mysql_fetch_array($query);
 
if(!empty($dados)){
    $emailsql = $dados['email'];
    $senha = $dados['senha'];
}
else{
    echo "Nenhum registro selecionado";
}

 

Oi Maykel, primeiramente, valeu por responder.

Fiz a alteração que citou, e realmente o erro sumiu, mas a página fica em branco, não apresenta nem o "email enviado" nem o "email não encontrado" e também não envia o email.

<?php
$server = "mysql.meu-servidor.com.br";
$user = "meu-usuario";
$data = "meu-banco";
$pass = "minha-senha";

$conexao = mysql_connect("$server", "$user", "$pass");
mysql_select_db($data, $conexao);
?>

<?php
//Criando Variaveis//
if(isset($_POST['recuperar'])) {
$email = $_POST['email2'];

//Buscar dados no SQL//
$sql_busca = 'SELECT email FROM publico_leigo WHERE email = "$email"';
$query = mysql_query($sql_busca);

$dados = mysql_fetch_array($query);
 
if(!empty($dados)){
    $emailsql = $dados['email'];
    $senha = $dados['senha'];

    $mensagem = "Presado sr. ".$nome.",<br><br>";
    $mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";
    $mensagem .= "Senha: ".$senha."</p>";
    
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    
    mail($email, "Recuperação de Senha so Site", $mensagem, $headers);
    
    echo "<b>Seus dados foram enviados com sucesso!</b>";
    }

}
else{
    echo "Nenhum registro selecionado";
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
$sql_busca = 'SELECT email FROM publico_leigo WHERE email = "$email"';

Acho que deveria ter um senha no select, porque o select só esta fazendo select de email... e a sua variável contém a senha que não esta sendo retornada pelo select.

$sql_busca = 'SELECT email,senha FROM publico_leigo WHERE email = "$email"';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, coloquei assim agora:

$sql_busca = 'SELECT email, senha FROM publico_leigo WHERE email = "$email"';

Mas continua dando página em branco quando encia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta colocar esse mail dentro de um if ....

 

if(mail){

ok

}else{

erro

}

 

o código parece estar normal, essa variavel $nome ela vem da onde? porque ela está ali atoa... sem ser atribuida.

 

só uma dica procure usar filtros nos get e post... para evitar SQL Injection

$email = filter_input(INPUT_POST,'email2',FILTER_SANITIZE_MAGIC_QUOTES);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, Obrigado também pela dica do filter_input !!

 

Coloquei:

if(mail){
   echo ok;
}
else{
   echo erro;
} 

Retornou ˜ok˜

 

De resto, página em branco (fora o "ok") e email não enviado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo, no código tem essa variavel $nome que está sem atribuição..

 

 

você pode usar normal com o mail completo

if( mail($email, "Recuperação de Senha so Site", $mensagem, $headers)){
     print_r("Email enviado com sucesso!");
}else{
     print_r("Falha no envio do E-mail.");
}

No caso do $nome ali, teria que colocar no select o nome também...

$sql_busca = 'SELECT email,senha,nome FROM publico_leigo WHERE email = "$email"';

e o $nome

$nome = $dados['nome'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, e o código fica assim mesmo, como abaixo:

<?php
//Criando Variaveis//
if(isset($_POST['recuperar'])) {
$email = filter_input(INPUT_POST,'email2',FILTER_SANITIZE_MAGIC_QUOTES);

//Buscar dados no SQL//
$sql_busca = 'SELECT email,senha,nome FROM publico_leigo WHERE email = "$email"';
$query = mysql_query($sql_busca);

$dados = mysql_fetch_array($query);
 
//TESTE mail //

if( mail($email, "Recuperação de Senha so Site", $mensagem, $headers)){
     print_r("Email enviado com sucesso!");
}else{
     print_r("Falha no envio do E-mail.");
}
 
if(!empty($dados)){
    $emailsql = $dados['email'];
    $senha = $dados['senha'];
	$nome = $dados['nome'];

    $mensagem = "Presado sr. ".$nome.",<br><br>";
    $mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";
    $mensagem .= "Senha: ".$senha."</p>";
    
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    
    mail($email, "Recuperação de Senha No tom da vida", $mensagem, $headers);
    
    echo "<b>Seus dados foram enviados com sucesso!</b>";
    }

}
else{
    echo "Nenhum registro selecionado";
}

?>

Porque assim, ele mostra ˜Email enviado com sucesso!˜ mas não chega nenhum email.

E mesmo que eu coloque email errado no campo, ele retorna o valor de email "Enviado com sucesso".

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
//Criando Variaveis//
if(isset($_POST['recuperar'])) {
$email = filter_input(INPUT_POST,'email2',FILTER_SANITIZE_MAGIC_QUOTES);

//Buscar dados no SQL//
$sql_busca = 'SELECT email,senha,nome FROM publico_leigo WHERE email = "$email"';
$query = mysql_query($sql_busca);

$dados = mysql_fetch_array($query);
 
 
if(!empty($dados)){
    $emailsql = $dados['email'];
    $senha = $dados['senha'];
	$nome = $dados['nome'];

    $mensagem = "Presado sr. ".$nome.",<br><br>";
    $mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";
    $mensagem .= "Senha: ".$senha."</p>";
    
    $headers = "From: ".$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    
    if( mail($email, "Recuperação de Senha so Site", $mensagem, $headers)){
        print_r("Email enviado com sucesso!");
    }else{
        print_r("Falha no envio do E-mail.");
    }
 
    }

}
else{
    echo "Nenhum registro selecionado";
}

?>

tenta assim... se não der, vai ter que esperar alguém mais experiente, =/.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu página em branco tanto com email que tem no banco quanto com email que não tem no banco.

 

Obrigado Willian! valeu pela ajuda.

 

 

Mudei o código para o seguinte:

//Conexão//$conexao = mysql_connect("$server", "$user", "$pass") or trigger_error(mysql_error(),E_USER_ERROR);mysql_select_db($data, $conexao);?><?php//Criando Variaveis//if(isset($_POST['recuperar'])) {$email = filter_input(INPUT_POST,'email2',FILTER_SANITIZE_MAGIC_QUOTES);//Buscar dados no SQL//$query = sprintf('SELECT * FROM publico_leigo nome,senha,email WHERE email = "$email"');//$dados = mysql_fetch_array($query); $dados = mysql_query($query, $conexao) or die(mysql_error()); if(!empty($dados)){    $emailsql = $dados['email'];    $senha = $dados['senha'];	$nome = $dados['nome'];    $mensagem = "Presado sr. ".$nome.",<br><br>";    $mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";    $mensagem .= "Senha: ".$senha."</p>";        $headers = "From: ".$email."\r\n";    $headers .= "MIME-Version: 1.0\r\n";    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";        if( mail($email, "Recuperação de Senha so Site", $mensagem, $headers)){        print_r("Email enviado com sucesso!");    }else{        print_r("Falha no envio do E-mail.");    }     }}else{    echo "Nenhum registro encontrado com este email. Tente novamente.";}?>

Aí, retorna o seguinte erro:

Table 'marketing.senha' doesn't exist[/size]

Compartilhar este post


Link para o post
Compartilhar em outros sites

quer dizer que na tabela marketing não tem o campo senha.. veja qual é o nome do campo que tem a senha

Então, mas minha tabela é outra...

$query = sprintf('SELECT * FROM publico_leigo nome,senha,email WHERE email = "$email"');

Porque ao invés dele procurar em "publico_leigo" está tentando encontrar em "marketing" ?

envia_senha.php

<?php

$server = "mysql.meu-servidor.com.br";
$user = "meu-usuario";
$pass = "minha-senha";
$data = "meu-banco";

//$conexao = mysql_connect("$server", "$user", "$pass");
$conexao = mysql_pconnect($server, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($data, $conexao);
?>
 
<?php
//Criando Variaveis//
if(isset($_POST['recuperar'])) {
$email = filter_input(INPUT_POST,'email2',FILTER_SANITIZE_MAGIC_QUOTES);

//Buscar dados no SQL//
$sql_busca = 'SELECT email,senha,nome FROM publico_leigo WHERE email = "$email"';
$query = mysql_query($sql_busca);

$dados = mysql_fetch_array($query);
 
 
if(!empty($dados)){
    $emailsql = $dados['email'];
    $senha = $dados['senha'];
	$nome = $dados['nome'];

    $mensagem = "Presado sr. ".$nome.",<br><br>";
    $mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";
    $mensagem .= "Senha: ".$senha."</p>";
    
    $headers = "From: ".$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    
    if( mail($email, "Recuperação de Senha so Site", $mensagem, $headers)){
        print_r("Email enviado com sucesso!");
    }else{
        print_r("Falha no envio do E-mail.");
    }
 
    }

}
else{
    echo "Nenhum registro selecionado";
}

?>

A página retorna em branco tanto com email que existe no BD quanto com email aleatório.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei uma melhorada, testa ai!!!

<?php

$server = "mysql.meu-servidor.com.br";
$user = "meu-usuario";
$pass = "minha-senha";
$data = "meu-banco";

//$conexao = mysql_connect("$server", "$user", "$pass");
$conexao = mysql_connect($server, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($data, $conexao);


//Criando Variaveis//
if(isset($_POST['recuperar'])) {
	
	$email = filter_input(INPUT_POST,'email2',FILTER_VALIDATE_EMAIL);
	
	//Buscar dados no SQL//
	$sql_busca = sprintf ("SELECT `email`, `senha`, `nome` FROM `publico_leigo` WHERE `email` = '%s'", $email);

	$query = mysql_query($sql_busca) or die ('Erro: '. mysql_error());
	$dados = mysql_fetch_array($query);
 
	if (is_array($dados)) && sizeof($dados) > 0) {
		
		echo '<script type="text/javascript">alert(\'email encontrado!\')</script>';
		
		$email = $dados['email'];
		$senha = $dados['senha'];
		$nome = $dados['nome'];

		$mensagem = "Presado sr. ".$nome.",<br><br>";
		$mensagem .= "Esta mensagem foi enviada ao senhor pois solicitou a recuperação de seus dados de login em nosso site. Abaixo seguem seus dados:";
		$mensagem .= "Senha: ".$senha."</p>";

		
		$headers = "MIME-Version: 1.0\r\n";
		$headers .= "Content-type: text/html; charset=8859-1\r\n";
		$headers .= "From: $email\r\n";
		$headers .= "Return-Path: $email\r\n";
		$headers .= "Reply-To: $email\r\n";
		$headers .= "X-Mailer: PHP/" . phpversion ();
		$headers .= "X-Priority: 1\r\n"; 		
		
		
		if( mail($email, "Recuperação de Senha so Site", $mensagem, $headers)){
			print("Email enviado com sucesso!");
		}else{
			print("Falha no envio do E-mail.");
		} 
    } else {
		
		echo '<script type="text/javascript">alert(\'email não encontrado!\')</script>';
	}

}
else{
    echo "Nenhum registro selecionado";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Williams, muito obrigado.

Mas retornou o seguinte erro:

 

 

 

Parse error: syntax error, unexpected T_BOOLEAN_AND in /home/hemofiliabrasil/www/notomdavida/perdi-minha-senha/envia_senha.php on line 26

 

No programa, o If (linha 26) e o else (linha 53) ficam grifados de vermelho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca ai por

 

26

echo '<script type="text/javascript">alert("email encontrado!")</script>';

53

echo '<script type="text/javascript">alert("email não encontrado!")</script>';

ou comente ou retire este alertas!

 

PS.: O importante é ver se esta caindo dentro do if, de um de um die('OK');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Williams, me desculpe, mas o erro aponta EXATAMENTE as linhas do if e else.

Tenho duas linhas de comentário acima do código, aí para você devem ser as linhas 24 e 51.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.