Ecco la seconda parte che spiega come recuperare i dati:
Recuperare dati da mySQL con 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:
Creo una form in Flash nel seguente modo:PHP Code:CREATE TABLE `clients` (
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` TEXT NOT NULL ,
`surname` TEXT NOT NULL ,
`address` TEXT NOT NULL ,
`city` TEXT NOT NULL ,
`state` TEXT NOT NULL ,
`email` TEXT NOT NULL
) ENGINE = MYISAM ;
- 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:
Nella seguente riga: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(); } } }
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:
Il file PHP è invece strutturato in questo modo: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(); } } } }
La prossima volta vrdremo come recuperare i dati..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;
}
?>
Allego i files:
Last edited by Flep; 27-08-08 at 06:16.
Ecco la seconda parte che spiega come recuperare i dati:
Recuperare dati da mySQL con Flash CS3
Vorrei riaprire la discussione perchè ho lo stesso tipo di problema...
Ho preso questo esempio per fare alcune prove utilizzando ASP.net
Ho creato un file main_contact.fla con Dc Main.as
StoreData.asCode:package { 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 static var _Sex:String; public static var _Message: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.messaggio_txt.text!=''&&form_mc.genere_txt.text!=''&&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; _Sex=form_mc.genere_txt.text; _Message=form_mc.messaggio_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.messaggio_txt.text=''; form_mc.genere_txt.text=''; form_mc.x=stage.stageWidth+10; moveInForm(); } } }
L'errore che mi da è:Code:package { 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 static var _Sex:String; public static var _Message: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.messaggio_txt.text!=''&&form_mc.genere_txt.text!=''&&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; _Sex=form_mc.genere_txt.text; _Message=form_mc.messaggio_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.messaggio_txt.text=''; form_mc.genere_txt.text=''; form_mc.x=stage.stageWidth+10; moveInForm(); } } }
Error: Error #2101: La stringa passata a URLVariables.decode() deve essere una stringa di query con codifica URL contenente coppie nome/valore.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables()
at flash.net::URLLoader/onComplete()
questo è la stringa che restituisce "variables" dopo il click
Help me pleaseCode:messsaggio=ddd&stato=zxczx&indirizzo=zxczx&genere=zxcvxz&citta=zxczx&nome=zxcc&cognome=czxc&email=zxczx%40dff%2Eiy![]()
Nel file ASP sei sicuro che non esiste codice html o altro tipo ?
Deve esserci solo ASP che restituisce un valore.
si ti copio la pagina
Code:<%@ Page Language="c#" Debug="true" %> <%@ Import namespace="System.Data.OleDb"%> protected OleDbDataReader rs; protected OleDbCommand cmdSql; protected OleDbConnection conn; protected OleDbDataReader rs2; protected OleDbCommand cmdSql2; protected OleDbConnection conn2; protected string strsql; aspx.cUtility utility = new aspx.cUtility(); private void Page_Load(object sender, System.EventArgs e) { conn = new OleDbConnection(utility.connetti("\\..\\gestione")); conn.Open(); try { string nome = Request.Form.Get("nome"); string cognome = Request.Form.Get("cognome"); string genere = Request.Form.Get("genere"); string email = Request.Form.Get("email"); // string oggetto = Request.Form.Get("oggetto"); string messaggio = Request.Form.Get("messaggio"); string indirizzo = Request.Form.Get("indirizzo"); string citta = Request.Form.Get("citta"); string stato = Request.Form.Get("stato"); inserisci(); Response.Write("msg=ok" + "&"); } catch (Exception ex) { Response.Write("msg=" + ex.Message + "&"); } } private void inserisci() { strsql = "Insert into UTENTI (nome, cognome,genere,messaggio,email,indirizzo,citta,stato) values ("; strsql += "'" + Request.Form.Get("nome").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("cognome").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("genere").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("messaggio").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("email").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("indirizzo").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("citta").Replace("'", "''") + "'"; strsql += ",'" + Request.Form.Get("stato").Replace("'", "''") + "'"; strsql += ")"; cmdSql = new OleDbCommand(strsql, conn); cmdSql.ExecuteNonQuery(); } protected void Page_Unload(object s, EventArgs e) { conn.Close(); }
Last edited by valerio.pisapia; 01-10-09 at 11:58. Reason: sistemato tags codice
ASP non lo conosco ma ad esempio il PHP deve restituire in questo modo:
String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pair | Tutorials Flash CS3 Flash CS4
cerca di applicarlo al tuo ASP.
Allora ho provato cosi:
loader.dataFormat=URLLoaderDataFormat.TEXT;
invece di
loader.dataFormat=URLLoaderDataFormat.VARIABLES;
L'errore scompare!
Però
Code:private function onComplete(e:Event):void { var loader:URLLoader=URLLoader(e.target); var vars:URLVariables=new URLVariables(loader.data); //Qui diciamo che mi si blocca ... vale a dire non va più avanti! //non capisco perchè _wall: _fla.form_mc.error_txt.text="aa:"+vars; if(vars.msg=="ok") { //richiama la funzione nella dc Main _fla.hideWorking(); } }
Bookmarks