Ir para conteúdo

Arquivado

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

Thiago de Oliveira Cruz

[TUTORIAL] formulário de email fácil em AS3 + PHP

Recommended Posts

Esse tutorial está postado em meu blog

 

http://berseck.wordpress.com

 

Bom galera ai vai mais uma contribuição minha pra galera que gosta de trabalhar com flash.

 

Hoje vou ensinar como se faz um formulário de e-mail em flash + php.

 

Primeiramente vai necessitar do programa flash ou outro qualquer que faça as mesmas funções em AS3

 

Para esse tutorial são necessários os seguintes campos:

2 botões: um intânciado de btenviar outro btreset

4 campos de texto:

1 para nome intânciado nome.

1 para email instânciado email.

1 para mensagem intânciado mensagem.

1 para o status do e-mail intânciado stats.

 

Pronto já temos todos os campos necessários para o flash

Crie uma camada e coloque os 2 botões nela

Crie outra camada e coloque todos os campos de texto nela

Crie agora uma camada para o ActionScript

 

Na camada de action clique no primeiro frame e digite:

//Criando as variáveis necessárias
var loader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest("mail.php"); //coloque no lugar de mail.php o nome de seu formulário php no caso o meu foi mail.php
var variables:URLVariables = new URLVariables();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
req.method = URLRequestMethod.POST;
//fim

//Colocando o tabIndex para utilização de tab para mudar de campo
nome.tabIndex = 0;
email.tabIndex = 1;
mensagem.tabIndex = 2;
//fim

//Colocando o listener para verificar os campos
nome.addEventListener(Event.CHANGE, vererro);
email.addEventListener(Event.CHANGE, vererro);
mensagem.addEventListener(Event.CHANGE, vererro);
function vererro(event:Event):void {
	if (stats.text.length>0) {
		stats.text = "";
	}
}
//fim

//Colocando os botões
btenviar.addEventListener(MouseEvent.CLICK, sendForm);
btreset.addEventListener(MouseEvent.CLICK, resetForm);
//fim

//Valida o formulário e envia
function sendForm(evt:MouseEvent):void {
	if (nome.text.length<=0) {
		stats.text = "Por favor preencha o nome";
	} else if (!email.text.length || email.text.indexOf("@") == -1 || email.text.indexOf(".") == -1) {
		stats.text = "Email inválido ou inexistente";
	} else if (mensagem.text==""||mensagem.text.length<=1) {
		stats.text = "Por favor digite sua mensagem";
	} else {
		stats.text ="Enviando e-mail";
		variables.nome = nome.text; //coloco dentrode variables os campos nome, email e mensagem.
		variables.email = email.text;
		variables.mensagem = mensagem.text;
		req.data = variables; //Adiciono ao data do URLRequest as variáveis dos campos
		loader.load(req); //Envio para o php
		loader.addEventListener(Event.COMPLETE, receiveLoad); //Ao termino da leitura do php carrego a função de recebimento de variável.
	}
}
//fim

//Pega a informação carregada do php
function receiveLoad(evt:Event):void {
	if (evt.target.data.retval == 1) { //Verifico se a variavel de retorno retval está com o valor 1 ou 0 e aplico as fuções
		stats.text = "E-mail enviado";
	} else {
		stats.text="Erro ao enviar o e-mail";
	}
}
//fim

//Reseta formulário
function resetForm(evt:MouseEvent):void {
	nome.text="";
	email.text="";
	mensagem.text="";
}
//Fim

Todas as funções já estão devidamente comentadas ;)

 

Agora vamos ao php:

<?php
if(isset($_POST['email']) && isset($_POST['nome']) && isset($_POST['mensagem'])){
	$nome = $_POST['nome'];
	$from = $_POST['email'];
	$mensagem = $_POST['mensagem'];
	
	$email_subject = "E-mail do site"; // Assunto do e-mail 
		
	$email_to = "seuemail@mail.com"; // pra onde vai o e-mail
	
	$headers = "From: ".$from; 
	
	$semi_rand = md5(time()); 
	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
       
	$headers .= "\nMIME-Version: 1.0\n" . 
				"Content-Type: multipart/mixed;\n" . 
				" boundary=\"{$mime_boundary}\"";  
	
	$email_message = 	"Mensagem:". $mensagem. "<br>";
	$email_message .=	"\n\n--{$mime_boundary}\n";
	$email_message .=   "Content-Type:text/html; charset=\"iso-8859-1\"\n";
	$email_message .=	"Content-Transfer-Encoding: 7bit\n\n"; 
	$email_message .=	"Esse e-mail foi enviado pelo site<br>";
	$email_message .=	"<br>Nome do cliente:<br>". $nome. "<br>";
	$email_message .=	"<br>E-mail do cliente:<br>". $from ."<br>";
	$email_message .=	"<br>Mensagem:<br>" .$mensagem. "<br>" . "\n\n";  
	
	$ok = @mail($email_to, $email_subject, $email_message, $headers); 
	
	if($ok){
		echo "retval=1";
	}else{
		echo "retval=0";
	}
}
else {
echo "O e-mail não existe";
}
?>

Espero que gostem

Bom proveito e bom trabalho

 

Clique aqui para baixar o arquivo.

 

Abraços

Thiago Cruz(berseck)

 

Editado para trocar o empty por isset ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

kisuke

Bom posso ver aqui um modelo de e-mail em asp e adaptar...

 

Apesar de que eu não trabalho com asp... apesar de saber

Vou ver o que posso fazer :)

 

Silver qual seria a diferença de colocar o isset nas variaveis _POST? assim pra eu saber... e quem mais ler isso aqui ficar sabendo também

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa função serve para você verificar se a variavel existe, em alguns servidores se você usa assim por exemplo:

 

<?php
echo $_POST["teste"];
?>
<form method="post">
<input type="text" name="teste">
</form>
se o POST não é enviado nesse caso a pagina estiver em GET o PHP retornaria um erro igual a esse:

Notice: Undefined variable: teste in pagina.php on line 2

a função isset verifica a existencia da variavel, sendo assim a maneira mais correta de se trabalhar com VARIAVEIS ;) :

<?php
if(isset($_POST["teste"])){
echo $_POST["teste"];
}
?>
<form method="post">
<input type="text" name="teste">
</form>

LEIA: http://br.php.net/isset

 

falow abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

O arquivo php foi modificado para utilização do isset ;)

 

Assim conferindo se a variavel existe ou não.

 

Kisuke

O arquivo em asp segue abaixo

Atenção não dou 100% que funcione, pois não tenho onde rodar para testar.

<%
Dim nome, email, mensagem, textoemail, corpo
Dim objCDOSYSMail, objCDOSYSCon

nome = Request("nome")
email = Request("email")
mensagem = Request("mensagem")

corpo = "<html>"
corpo = corpo & "<style type='text/css'>"
corpo = corpo & "* {font-family: verdana, arial; font-size: 11px; color: #000000; text-align: justify;}"
corpo = corpo & "p {margin: 0 0 10px 0;}"
corpo = corpo & "h3 {font-size: 14px; margin: 10px 0; color: #993333;}"
corpo = corpo & "a:link, a:visited {color: #333333;}"
corpo = corpo & "a:hover {color: #FF6600;}"
corpo = corpo & "</style>"
corpo = corpo & "<body>"

textoemail = "<h3>Dados:</h3>"
textoemail = textoemail & "<p><b>Nome:</b>" & nome & "</p>"
textoemail = textoemail & "<p><b>E-mail:</b>" & email& "</p>"
textoemail = textoemail & "<h3>Mensagem:</h3>"
textoemail = textoemail & "<p>" & mensagem & "</p>"

textoemail = corpo & textoemail & "</body></html>"

Set objCDOSYSMail = Server.CreateObject("CDO.Message")
Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration")
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")= 25
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30

objCDOSYSCon.Fields.update
	
Set objCDOSYSMail.Configuration = objCDOSYSCon

objCDOSYSMail.From = email
objCDOSYSMail.To = "seuemail@mail.com"
objCDOSYSMail.Subject = "E-mail do site"
objCDOSYSMail.HTMLBody = textoemail

objCDOSYSMail.Send

Set objCDOSYSMail = Nothing
Set objCDOSYSCon = Nothing
%>

Pelo menos esse é o código que tenho de e-mail normal em asp ;)

 

Já usei ele algumas vezes...

Mas como raramente utilizo asp e não estou com servidores para testar :(

Fica ai o código se alguem quiser testar e informar pra ver se funciona ficarei agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa mas continua ERRADO. O isset deve ser aplicado a todas as variaveis _POST não somente a uma. Percebi tambem que você SETOU varias variaveis desnecessarias, se você não se importar mais tarde vou postar o código de maneira mais correta.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pelo site que você me deu... para ler e outros que eu li

 

isset serve para dizer se uma variavel existe ou não(se ela é true ou false)

 

O caso acima que eu estou usando serve apenas para testar se o e-mail está sendo enviado do flash para o php... caso true ele segue o script, caso false não...

 

Eu não coloquei todas as opções possiveis no flash por isso só coloquei a opção do e-mail

 

mas o php completo seria:

<?php
if(isset($_POST['email'])){
	if(isset($_POST['nome'])){
	$nome = $_POST['nome'];
	} else{
	   echo "A variavel nome não foi setada";
	}

	$from = $_POST['email'];

	if(isset($_POST['mensagem'])){
	$mensagem= $_POST['mensagem'];
	} else{
	   echo "A variavel mensagem não foi setada";
	}
	
	$email_subject = "E-mail do site"; // Assunto do e-mail
	$mensagem = $_POST['mensagem']; // O texto do e-mail
	
	
	$email_to = "seuemail@mail.com"; // pra onde vai o e-mail
	
	$headers = "From: ".$from;
	
	$semi_rand = md5(time());
	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
	  
	$headers .= "\nMIME-Version: 1.0\n" .
				"Content-Type: multipart/mixed;\n" .
				" boundary=\"{$mime_boundary}\"";  
	
	$email_message .=	 "Mensagem: $mensagem <br>" . "\n\n" .
						"--{$mime_boundary}\n" .
						"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
						"Content-Transfer-Encoding: 7bit\n\n" .
						"Esse e-mail foi enviado pelo site<br>
						<br>Nome do cliente:<br>$nome<br>
						<br>E-mail do cliente:<br>$from<br>
						<br>Mensagem:<br>$mensagem<br>" . "\n\n";  
	
	$ok = @mail($email_to, $email_subject, $email_message, $headers);
	
	if($ok){
		echo "retval=1";
	}else{
		echo "retval=0";
	}
}
else {
echo "O e-mail não existe";
}
?>

E assim ficaria o arquivo php...

 

Já o arquivo asp como não mexo muito só sei aquela maneira de fazer...

Se você souber outra ;)

Tamos ai sempre dispostos a aprender :)

 

Abraços

E mto obrigado pela contribuição de conhecimento para mim e para todos que lêem esse tutorial

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adiciona isso no inicio de todos seus códigos:

error_reporting(E_ALL);
é uma recomendação para quem programa em PHP, eu pessoalmente sempre uso ;)

você verá varios erros hehehehe.

 

o código ficaria assim(faça o teste com HTML e não com o FLASH):

<?php
error_reporting(E_ALL);
if(isset($_POST['email'])){
	$nome = $_POST['nome'];
	$from = $_POST['email'];
	$mensagem = $_POST['mensagem'];
	
	$from = $_POST['email'];
	$email_from = $from; // E-mail
	$email_subject = "E-mail do site"; // Assunto do e-mail
	$mensagem = $_POST['mensagem']; // O texto do e-mail
	
	
	$email_to = "your@gmail.com"; // pra onde vai o e-mail
	
	$headers = "From: ".$email_from;
	
	$semi_rand = md5(time());
	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
 
	$headers .= "\nMIME-Version: 1.0\n" .
				"Content-Type: multipart/mixed;\n" .
				" boundary=\"{$mime_boundary}\""; 
	
	$email_message .= "Mensagem: $mensagem <br>" . "\n\n" .
						"--{$mime_boundary}\n" .
						"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
						"Content-Transfer-Encoding: 7bit\n\n" .
						"Esse e-mail foi enviado pelo site<br>
						<br>Nome do cliente:<br>$nome<br>
						<br>E-mail do cliente:<br>$from<br>
						<br>Mensagem:<br>$mensagem<br>" . "\n\n"; 
	
	$ok = @mail($email_to, $email_subject, $email_message, $headers);
	
	if($ok){
		echo "retval=1";
	}else{
		echo "retval=0";
	}
}
else {
echo "O e-mail não existe";
}
?>
<form method="post">
<input name="nome" value="">
<input name="email" value="">
<textarea name="mensagem"></textarea>
<input type="submit" value="enviar">
</form>

Quando for clicar no ENVIAR não digite nada em nenhum campo, que você verá a resposta do servidor ;)

 

Outra dica amigo não se esqueça de SETAR sempre as variaveis, por exemplo aqui você fez mais ou menos isso:

$email_message .= "Mensagem: $mensagem <br>" . "\n\n";

o certo seria isso:

$email_message = "Mensagem: $mensagem <br>" . "\n\n";
$email_message .= "OUTRA PARTE";

Primeiro criar a variavel $VAR = ""; depois usa o ponto para adicionar mais strings $VAR .= "Sting adiconal";

 

O mesmo vale para Array.

 

Muitas pessoas fazem isso:

$var[] = "paremetro 1";
$var[] = "paremetro 2";

o certo é SETAR a var primeiro:

$var = Array();
$var[] = "paremetro 1";
$var[] = "paremetro 2";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... SilverFox

 

O unico erro que deu aqui ao testar o form que você deu foi realmente na variável email_message na linha 32 do meu script

E o erro ocorreu devido ao . antes do =

Ou seja era só tirar o ponto que tudo funciona normalmente...

 

Mas se você enviar o texto todo pelo flash... vai rodar plenamente o formulário sem erros... e também se enviar pelo html tbm vai normalmente......

 

Por isso não vi necessidade de usar:

email_mensagem = "Mensagem: $mensagem<br />";
email_mensagem .= "outra parte";

Tanto que recebo sempre meus e-mails com todas as variaveis corretamente......

 

Sei que é um padrão

Mas o que eu fiz seria

 

email_mensagem = "Mensagem: $mensagem<br />" . "\n\n" . "Nome: $nome<br />" . "\n\n" . "E-mail: $email<br />" . "\n\n"

Ou seja... eu coloquei tudo na mesma linha... eu só dei enteres no código para ficar melhor visualmente do que digitar o código inteiro em uma linha só...

 

Isso é uma caracteristica minha para não me atrapalhar quando estou programando algo... e ficar mais limpo tanto para quem está programando... tanto para o proximo que pode vir a pegar seu código...

 

o código correto de email_mensagem então seria:

$email_message = "Mensagem: $mensagem <br>";
$email_mensage .= "\n\n";
$email_mensage .="--{$mime_boundary}\n";
$email_mensage .= "Content-Type:text/html; charset=\"iso-8859-1\"\n";
$email_mensage .= "Content-Transfer-Encoding: 7bit\n\n";
$email_mensage .= "Esse e-mail foi enviado pelo site<br>";
$email_mensage .= "<br>Nome do cliente:<br>$nome<br>";
$email_mensage .= "<br>E-mail do cliente:<br>$from<br>";
$email_mensage .= "<br>Mensagem:<br>$mensagem<br>";
$email_mensage .= "\n\n";

E veja como ficou muito mais feio -.- visualmente falando fora que acho desnecessária inumeras declarações quando posso simplesmente colocar tudo na mesma linha...

 

Código na mesma linha:

$email_message = "Mensagem: $mensagem <br>" . "\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . "Esse e-mail foi enviado pelo site<br>" . "<br>Nome do cliente:<br>$nome<br>" . "<br>E-mail do cliente:<br>$from<br>" . "<br>Mensagem:<br>$mensagem<br>" . "\n\n";

Abraços ;)

E muito obrigado pela colaboração

Compartilhar este post


Link para o post
Compartilhar em outros sites

E veja como ficou muito mais feio -.- visualmente falando fora que acho desnecessária inumeras declarações quando posso simplesmente colocar tudo na mesma linha...

Na verdade eu acho bem mais "elegante" assim.

 

E outra ajuda a trabalhar com ASPAS, pois se você errar uma ASPA em uma linha você terá melhor noção de qual linha esta o erro.

 

Na fork faça isso:

if(isset($_POST['email']) && isset($_POST['nome']) && isset($_POST['mensagem'])){

Veja aqui você declarou as variaveis duas vezes:

$nome = $_POST['nome'];
	$from = $_POST['email'];<--AQUI
	$mensagem = $_POST['mensagem'];
	
	$from = $_POST['email'];<--AQUI
	$email_from = $from; // E-mail<--DESNECESSARIO
	$email_subject = "E-mail do site"; // Assunto do e-mail
	$mensagem = $_POST['mensagem']; // O texto do e-mail<--AQUI

Aqui ao inves de fazer assim, "é um exemplo":

echo "texto: $variavel texto";

faça isso, assim evitará problema com ASPAS e com variaveis tipo ARRAY ou OBJECT:

echo "texto: ".$variavel."texto";

Falow abraços espero que isso abra a sua mente hehehe ;) .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela colaboração mais uma vez ;)

 

O código foi atualizado :)

 

E como eu estou aprendendo PHP é sempre bom quando alguem discute e da ideias de como se fazer... por que disso por que daquilo...

Acho muito interessante... pois isso muitas vezes eu debato aqui, mesmo que eu já tenha entendido o porque... para que proximas pessoas que passarem aqui entendam o porque que foi feito daquela maneira e não de outra ;)

 

Continuo nos meus estudos ^^

 

E se tiver alguem ai para desvendar se aquele código em asp ta certo ou ta errado eu ia adorar saber hahaha

Pois não tenho como testar ele.

 

Abraços

E muito obrigado pela colaboração

Compartilhar este post


Link para o post
Compartilhar em outros sites

mto boa a dica... só deu um problema na mensagem que chegou para mim...

ela não reconheceu acentos, e desconfigurou a mensagem!!!

oq pode ser???

Compartilhar este post


Link para o post
Compartilhar em outros sites

System.useCodePage = true...

 

E trocar talvez isso aqui charset=\"iso-8859-1" do código do php para utf-8

 

Mas antes disso veja se o embed das suas caixinhas de texto estão como latin...

Que ai evita o problema do recebimento do texto

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bersek,

 

Estou usando seu tópico para fazer um Form em flash.

 

Mais quando coloco as Action. o flash acusa erro na linha 2, 3, 4, 19, 32, 52, 62

 

oq estou fazendo de errado?

 

você pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acusa que tipos de erros?

 

1 - Verificou se você está montando um arquivo em ActionScript 3? pois esse código é AS 3 e não funciona em AS 2.

2 - Verificou se é as aspas? ele da um erro de quote quando há erro nas aspas, basta trocar elas que resolve.

 

Caso não seja nenhuma das opções acima.

Por favor diga qual foi o erro para assim eu poder ajudar soluciona-lo.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Bersek eu fiz no AS2.

Eu mudei para AS3 mais eu ja tenho toda uma programação que não vai funcionar no AS3.

 

Tem alguma forma de mudar esse código do form para AS2 ou um outro código para que funcione direitinho?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não usa o mesmo tutorial só que para AS 2?

Seria muito mais simples.

 

Eu fiz nas 2 formas justamente para quem está trabalhando com uma linguagem ou outra.

http://forum.imasters.com.br/index.php?/topic/314180-tutorial-formulrio-fcil-de-e-mail-flash-php/

 

Abraços

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.