Basic AS3 Contact Form

I stripped the one from here http://www.flepstudio.org/forum/flepstudio-utilities/2265-email-form-pictures-flash-cs3-php.html, which was a bit heavy for my needs…

[AS]package {

import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.AntiAliasType;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
import flash.events.IEventDispatcher;
import flash.utils.Timer;

public class ContactForm extends Sprite {			
	
	private var txtName:TextField = new TextField ();
	private var txtMessage:TextField = new TextField ();
	private var txtEmail:TextField = new TextField ();
	private var txtSend:TextField = new TextField ();		
	private var inputName:TextField = new TextField ();
	private var inputMessage:TextField = new TextField ();
	private var inputEmail:TextField = new TextField ();		
	private var txtInfo:TextField = new TextField ();		
	private var format:TextFormat = new TextFormat ();	
	private var iformat:TextFormat = new TextFormat ();	
	private var sformat:TextFormat = new TextFormat ();	
	private var submitBtn:Sprite = new Sprite();		
	private var sendMailURL:URLRequest=new URLRequest("sendMail.php");		
	private var _name:String="";
	private var _message:String="";
	private var _email:String="";
	private var timer:Timer;
	
	public var uploadURL:URLRequest;
	public const absoluteURL:String="";
	
	public function ContactForm () 
	{			
		addEventListener(Event.ADDED_TO_STAGE,init);
	}
	
	private function init(e:Event):void 
	{					
		removeEventListener(Event.ADDED_TO_STAGE,init);
		
		format.size = 12;
		format.font = 'Arial';
		format.color = 0x333333;
		format.align = 'left';		
		
		iformat.size = 12;
		iformat.font = 'Arial';
		iformat.color = 0xFF0000;
		iformat.align = 'left';		
		
		sformat.size = 12;
		sformat.font = 'Arial';
		sformat.color = 0xFFFFFF;
		sformat.align = 'left';		
		
		createTexts();					
	}		
	
	private function createTexts ():void 
	{						
		txtInfo.defaultTextFormat = iformat;			
		txtInfo.antiAliasType = AntiAliasType.ADVANCED;
		txtInfo.autoSize = TextFieldAutoSize.LEFT;
		txtInfo.wordWrap = true;
		txtInfo.multiline = true;
		txtInfo.selectable = false;	
		txtInfo.text = "";
		txtInfo.x = 10;
		txtInfo.y = 10;			
		txtInfo.width = 400;
		addChild(txtInfo);
		
		txtName.defaultTextFormat = format;			
		txtName.antiAliasType = AntiAliasType.ADVANCED;
		txtName.autoSize = TextFieldAutoSize.LEFT;
		txtName.wordWrap = true;
		txtName.multiline = true;
		txtName.selectable = false;	
		txtName.text = "NAME";
		txtName.x = 10;
		txtName.y = txtInfo.y + txtInfo.height + 30;
		addChild(txtName);
		
		inputName.defaultTextFormat = format;		
		inputName.text ="";
		inputName.width =200;			
		inputName.height = 20;
		inputName.x = txtName.x + txtName.width + 10;
		inputName.y = txtName.y;
		inputName.border = true;
		inputName.type = TextFieldType.INPUT;
		addChild(inputName); 

		txtEmail.defaultTextFormat = format;			
		txtEmail.antiAliasType = AntiAliasType.ADVANCED;
		txtEmail.autoSize = TextFieldAutoSize.LEFT;
		txtEmail.wordWrap = true;
		txtEmail.multiline = true;
		txtEmail.selectable = false;	
		txtEmail.text = "EMAIL";
		txtEmail.x = 10;
		txtEmail.y = txtName.y + txtName.height + 10;			
		addChild(txtEmail);
		
		inputEmail.defaultTextFormat = format;		
		inputEmail.text ="";
		inputEmail.width =200;			
		inputEmail.height = 20;
		inputEmail.x = txtEmail.x + txtEmail.width + 10;
		inputEmail.y = txtEmail.y;
		inputEmail.border = true;
		inputEmail.type = TextFieldType.INPUT;
		addChild(inputEmail);  

		txtMessage.defaultTextFormat = format;			
		txtMessage.antiAliasType = AntiAliasType.ADVANCED;
		txtMessage.autoSize = TextFieldAutoSize.LEFT;
		txtMessage.wordWrap = true;
		txtMessage.multiline = true;
		txtMessage.selectable = false;	
		txtMessage.text = "MESSAGE";
		txtMessage.x = 10;
		txtMessage.y = txtEmail.y + txtEmail.height + 20;			
		addChild(txtMessage);
		
		inputMessage.defaultTextFormat = format;		
		inputMessage.text ="";
		inputMessage.width =200;			
		inputMessage.height = 150;
		inputMessage.x = txtMessage.x + txtMessage.width + 10;
		inputMessage.y = txtMessage.y;
		inputMessage.border = true;
		inputMessage.type = TextFieldType.INPUT;			
		inputMessage.multiline = true;
		inputMessage.wordWrap = true
		addChild(inputMessage);  			
		
		submitBtn.graphics.beginFill (0x333333);
		submitBtn.graphics.drawRect (txtMessage.x + txtMessage.width + 10, inputMessage.y + inputMessage.height + 20,100, 25);											
		submitBtn.graphics.endFill ();
		submitBtn.buttonMode = true;
		submitBtn.useHandCursor = true;
		submitBtn.mouseChildren = false;
		submitBtn.addEventListener(MouseEvent.MOUSE_DOWN, buttonHandler);
		addChild(submitBtn);			
		
		txtSend.defaultTextFormat = sformat;			
		txtSend.antiAliasType = AntiAliasType.ADVANCED;
		txtSend.autoSize = TextFieldAutoSize.LEFT;
		txtSend.wordWrap = true;
		txtSend.multiline = true;
		txtSend.selectable = false;	
		txtSend.text = "SEND";
		txtSend.x = txtMessage.x + txtMessage.width + 40;
		txtSend.y = inputMessage.y + inputMessage.height + 23;			
		submitBtn.addChild(txtSend);
	}		
	
	private function buttonHandler(event:MouseEvent):void
	{
		startSubmitSequence();
	}
	
	private function startSubmitSequence():void
	{	
		// assign inputted text
		_name = inputName.text; 
		_message = inputMessage.text
		_email = inputEmail.text

		if(checkRequiredFields()) // Check if all the required fields have text
			if (isValidEmail(_email)) // Check if the Email entered is a valid one
				sendMessage();
			else
				txtInfo.text = "NOT A VALID EMAIL ADDRESS";
		else
			txtInfo.text = "ALL FIELDS ARE REQUIRED";
	}
	
	private function isValidEmail(email:String):Boolean 
	{
		var emailExpression:RegExp = /^[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i;
		return emailExpression.test(email);
	}
	
	private function checkRequiredFields():Boolean
	{
		if(_name!="" && _message!="" && _email!="")
			return true;
		else
			return false;
	}
	
	private function sendMessage():void
	{
	var variables:URLVariables=new URLVariables();
		variables.abs_url=absoluteURL;
		variables.name = _name;
		variables.message = _message;
		variables.email = _email;
		
		sendMailURL.method=URLRequestMethod.POST;
		sendMailURL.data=variables;
	var loader:URLLoader=new URLLoader();
		loader.dataFormat=URLLoaderDataFormat.VARIABLES;
		addListeners(loader);
		try 
		{
			txtInfo.text = "SENDING..."
			loader.load(sendMailURL);
		} 
		catch (error:Error) 
		{
			txtInfo.text ="AN ERROR HAS OCCURRED PLEASE TRY AGAIN";
		}
	}
	private function addListeners(d:IEventDispatcher):void
	{
		d.addEventListener(Event.COMPLETE,messageSent);
	}
	
	private function messageSent(event:Event):void
	{
		txtInfo.text = "THANKS, YOUR MESSAGE HAS BEEN SENT";
					
		var loader:URLLoader=URLLoader(event.target);
		var vars:URLVariables=new URLVariables(loader.data);
		if(vars.answer=="ok")
		{
			timer=new Timer(4000,1);
			timer.addEventListener(TimerEvent.TIMER,resetAll);
			timer.start();
		}
		else
		{
			txtInfo.text = "AN ERROR HAS OCCURRED PLEASE TRY AGAIN";
		}
	}
	
	private function resetAll(event:TimerEvent):void
	{
		timer.removeEventListener(TimerEvent.TIMER,resetAll);
		txtInfo.text = "";
		inputName.text ="";
		inputEmail.text ="";
		inputMessage.text ="";
	}
}

}[/AS]

and the sendMail.php file, in this example saved in the same folder as the flash file

<?php
	$sendTo = "example@email.com";
	$subject = "E-mail from my web site";

	$headers = "From: " . $_POST["name"] ."<" . $_POST["email"] .">
";

	$message = "";
	$message .= "Name: ";
	$message .= "
";
	$message .= $_POST["name"];
	$message .= "

";
	$message .= "From: ";
	$message .= "
";
	$message .= $_POST["email"];
	$message .= "

";
	$message .= "

";
	$message .= "Message: ";
	$message .= "
";
	$message .= $_POST["message"];
	$message .= "

";


	if(@mail($sendTo, $subject, $message, $headers))
	{
		$answer='ok';
		echo "answer=".$answer;
	}
	else
	{
		$answer='error';
		echo "answer=".$answer;
	}
?>

Example: contactform example

I hate actionscript when you need to do text with it. Hate it with a passion.

Can’t wait for FP10. Good job btw!

[QUOTE=sekasi;2353348]I hate actionscript when you need to do text with it. Hate it with a passion.

Can’t wait for FP10. Good job btw![/QUOTE]
sekasi, hows Flash player 10 going to help things?

I meant CS4, sorry. It will re-vamp the way Flash works with fonts.

[QUOTE=sekasi;2353369]I meant CS4, sorry. It will re-vamp the way Flash works with fonts.[/QUOTE]
yeh? could you point me in the direction of some docs about it, thanks.

No idea. I went to FiTC Chicago and heard it directly from Adobe during their CS4 preview presentation :slight_smile:

[QUOTE=daidai;2353501]yeh? could you point me in the direction of some docs about it, thanks.[/QUOTE]
Here is a good write-up and video. However it might not be all inclusive at this point.

Flash Player 10 feature: New text engine
http://www.flashmagazine.com/news/detail/flash_player_10_feature_new_text_engine/

Video - Flash Player 10 Text Features
http://labs.adobe.com/technologies/flashplayer10/demos/videos/text.html

[ot][QUOTE=sekasi;2353348]I hate actionscript when you need to do text with it. Hate it with a passion.

Can’t wait for FP10. Good job btw![/QUOTE]
It will still use the same AS I believe, they have just extended the amount of properties and things one can do with the textfield.

I don’t see whats so bad with the textfield it’s very easy to use. I myself wrote up a function to create the textfields to make it easier (basically sets all the default and obvious properties and places it at on the stage/somewhere defined in the parms). So really you can just make it easier for yourself.[/ot]