View Single Post

  #1 (permalink)  
Old 27-08-08, 06:11
Flep Flep is offline
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,535
Rep Power: 6
Flep is on a distinguished road
Inserire dati nel DataBase da Flash CS3

Spesso capita che stiamo sviluppando un sito web con Adobe Flash per un cliente e/o amico e ci viene richiesto di immagazzinare i dati degli utenti tramite una form.
Come fare ?
Questo tutorial cercherà di spiegare ai meno esperti come inserire dei dati in un DataBase ( mySQL ) da Flash.

Per prima cosa bisogna ribadire il concetto che Flash e mySQL non possono comunicare direttamente.
Serve un script lato server ( in questo caso PHP ) che riceva i dati da Flash e li inserisca poi nel DataBase.

Ho creato un esempio utilizzando una form in Flash che invia dei dati ad uno script PHP ( nome, cognome, indirizzo, città, stato, email ) che a sua volta li immagazzinerà nel DataBase.

Prima di tutto bisogna creare una nuova tabella nel nostro DB:
In questo caso una tabella che chiameremo "clients" con 7 colonne ( ID, nome, cognome, indirizzo, città, stato, email ).

Il file .sql per creare la tabella necessaria è il seguente:
PHP Code:
CREATE TABLE `clients` (
`
IDINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`
nameTEXT NOT NULL ,
`
surnameTEXT NOT NULL ,
`
addressTEXT NOT NULL ,
`
cityTEXT NOT NULL ,
`
stateTEXT NOT NULL ,
`
emailTEXT NOT NULL
ENGINE MYISAM 
Creo una form in Flash nel seguente modo:
- sei campi di testo statici che conterranno i titoli ( nome, cognome, indirizzo, città, stato, email )
- sei campi di testo input nei quali l' utente inserirà le proprie informazioni
- un campo di testo dinamico che servirà a visualizzare eventuali messaggi per l' utente ( ad esempio se non ha compilato tutti i campi )
- un bottone per l' invio dei dati

Eccola:





Nella Document Class Main.as abbiamo il seguente codice:
Code:
/*
 *************************************
 * Data Store Flash CS3 + PHP  
 * http://www.FlepStudio.org         
 * Author: Filippo Lughi           
 * version 1.0                       
 *************************************
 */
package org.FlepStudio
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.*;
	import flash.net.*;
	import caurina.transitions.Tweener;
	
	public class Main extends MovieClip
	{
		private var email_checker:CheckEmail;
		
		private var timer:Timer;
		
		private var film_mc:MovieClip;
		
		public static var _Name:String;
		public static var _Surname:String;
		public static var _Address:String;
		public static var _City:String;
		public static var _State:String;
		public static var _Email:String;
		
		public function Main()
		{
			addEventListener(Event.ADDED_TO_STAGE,init);
		}
		
		private function init(evt:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			
			form_mc.x=stage.stageWidth+10;
			
			stage.frameRate=31;
			
			email_checker=new CheckEmail();
			
			moveInForm();
			addButtonListener();
		}
		
		private function moveInForm():void
		{
			Tweener.addTween(form_mc,{x:stage.stageWidth/2-form_mc.width/2,time:0.7,transition:"easeOutElastic"});
		}
		
		private function addButtonListener():void
		{
			form_mc.send_btn.addEventListener(MouseEvent.MOUSE_DOWN,checkFields);
		}
		
		private function checkFields(evt:MouseEvent):void
		{
			if(email_checker.initCheck(form_mc.email_txt.text))
			{
				if(form_mc.name_txt.text!=''&&form_mc.surname_txt.text!=''&&form_mc.address_txt.text!=''&&form_mc.city_txt.text!=''&&form_mc.state_txt.text!='')
				{
					showWorking();
					_Name=form_mc.name_txt.text;
					_Surname=form_mc.surname_txt.text;
					_Address=form_mc.address_txt.text;
					_City=form_mc.city_txt.text;
					_State=form_mc.state_txt.text;
					_Email=form_mc.email_txt.text;
					
					var send_data:StoreData=new StoreData(this);
				}
				else
					displayError("fill in all the fields please");
			}
			else
				displayError("invalid e-mail");
		}
		
		private function displayError(s:String):void
		{
			form_mc.error_txt.text=s;
			hideError();
		}
		
		private function hideError():void
		{
			timer=new Timer(2500,1);
			timer.addEventListener(TimerEvent.TIMER,deleteError);
			timer.start();
		}
		
		private function deleteError(evt:TimerEvent):void
		{
			form_mc.error_txt.text='';
		}
		
		private function showWorking():void
		{
			film_mc=new MovieClip();
			film_mc.graphics.beginFill(0xFFFFFF,0.7);
			film_mc.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
			addChild(film_mc);
		}
		
		public function hideWorking():void
		{
			removeChild(film_mc);
			
			displayError("Data has been stored");
			
			reset();
		}
		
		private function reset():void
		{
			form_mc.name_txt.text='';
			form_mc.surname_txt.text='';
			form_mc.address_txt.text='';
			form_mc.city_txt.text='';
			form_mc.state_txt.text='';
			form_mc.email_txt.text='';
			
			form_mc.x=stage.stageWidth+10;
			
			moveInForm();
		}
	}
}
Nella seguente riga:
var send_data:StoreData=new StoreData(this);
viene istanziata un' altra classe che si chiama StoreData che invierà i dati al PHP.
La seguente classe:
Code:
/*
 *************************************
 * Data Store Flash CS3 + PHP  
 * http://www.FlepStudio.org         
 * Author: Filippo Lughi           
 * version 1.0                       
 *************************************
 */
package org.FlepStudio
{
	import flash.events.*;
	import flash.net.*;
	import flash.display.MovieClip;
	
	public class StoreData
	{
		private var request:URLRequest=new URLRequest('http://www.flepstudio.org/swf/ImmagazzinareDati/storeData.php');
		
		private var _fla:MovieClip;
		
		public function StoreData(fla:MovieClip)
		{
			_fla=fla;
			
			sendToPHP();
		}
		
		private function sendToPHP():void
		{
			var variables:URLVariables=new URLVariables();
			variables.name=Main._Name;
			variables.surname=Main._Surname;
			variables.address=Main._Address;
			variables.city=Main._City;
			variables.state=Main._State;
			variables.email=Main._Email;
			request.method=URLRequestMethod.POST;
			request.data=variables;
			var loader:URLLoader=new URLLoader();
			loader.dataFormat=URLLoaderDataFormat.VARIABLES;
			addListeners(loader);
			trace(variables);
			try 
			{
				loader.load(request);
			} 
			catch (error:Error) 
			{
				trace('Unable to load requested document.');
			}
		}
		
		private function addListeners(d:IEventDispatcher):void
		{
			d.addEventListener(Event.COMPLETE,onComplete);
		}
		
		private function onComplete(e:Event):void
		{
			var loader:URLLoader=URLLoader(e.target);
			var vars:URLVariables=new URLVariables(loader.data);
			if(vars.answer=="ok")
			{
				_fla.hideWorking();
			}
		}
	}
}
Il file PHP è invece strutturato in questo modo:
PHP Code:
<?php
    
/*
 *************************************
  Flash CS3 Data Store Form                   
  http://www.flepstudio.org     
  Author: Filippo Lughi          
  version 1.0                                
 *************************************
 */
 /******** CHANGE YOUR DATABASE SETTING *******/
    
$dbhost 'localhost'// database host ( usually localhost )
    
$dbuser 'root'// database username
    
$dbpass 'root'// database password
    
$dbname 'name'// database name
    
$mysql mysql_connect($dbhost,$dbuser,$dbpass);
    
mysql_select_db($dbname);
    
    
/* VARIABLES FROM FLASH */
    
$name=$_REQUEST["name"];
    
$surname=$_REQUEST["surname"];
    
$address=$_REQUEST["address"];
    
$city=$_REQUEST["city"];
    
$state=$_REQUEST["state"];
    
$email=$_REQUEST["email"];
    
    
/*INSERT INTO DB*/
    
$Query "INSERT INTO `".$dbname."`.`clients` (`ID`, `name`, `surname`, `address`, `city`, `state`, `email`) VALUES (NULL, \"".$name."\", \"".$surname."\",\"".$address."\",\"".$city."\",\"".$state."\",\"".$email."\");";
    
    
/* ECHO TO FLASH */
    
if(mysql_query($Query))
    {
        
$answer='ok';
        echo 
"answer=".$answer;
    }
    else
    {
        
$answer='nope';
        echo 
"answer=".$answer;
    }
?>
La prossima volta vrdremo come recuperare i dati..
Allego i files:
Attached Files
File Type: zip StoringData.zip (75.2 KB, 129 views)

__________________

 


I recommend: Essential Actionscript 3.0

- I do not reply technicians pvt messages. Open a thread !
- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !

Last edited by Flep; 27-08-08 at 06:16..
Reply With Quote