Abbiamo visto come inserire dei dati di un utente in un DataBase con Flash CS3.
In quel caso, avevamo una form in Flash che inviava i dati dell' utente ad uno script PHP che a sua volta li inseriva nel DataBase mySQL.
Adesso vediamo come recuperare questi dati.
Come ho già detto, Flash e mySQL non possono comunicare direttamente e quindi anche in questo caso dobbiamo avvalerci di uno script lato server ( PHP ).
Inoltre ci serve che l' output per Flash dal PHP sia in formato XML.
Quindi per prima cosa dobbiamo creare un file PHP che esegue la Query al DataBase e restituisce un output XML a Flash.
Solo a questo punto possiamo visualizzare i dati con Flash in modi e forme che più ci piaciono.
In questo caso utilizzo un componente DataGrid.
Questo tutorial si appoggia sullo stesso DataBase e tabella "clients" utilizzato nel tutorial inserire dei dati di un utente in un DataBase con Flash CS3.
Creo un file PHP che recupera i dati della tabella "clients" e spara fuori un output in formato XML:
PHP Code:
<?php /* ************************************* Retrieve data from DataBase with Flash CS3 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 = 'dbname'; // database name $mysql = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname);
$Query="SELECT * from clients"; $Result=mysql_query( $Query ); $Return="<?xml version=".'"1.0"'." encoding=".'"UTF-8"?>'."\n"."<clients>";
Una volta chiamato lo script, ecco l' output che genera:
HTML Code:
<?xml version="1.0" encoding="UTF-8"?><clients><client><id>1</id><name>filippo</name><surname>lughi</surname><address>piazza fiorentini 17</address><city>cesenatico</city><state>italy</state><email>info@flepstudio.org</email></client><client><id>2</id><name>paolo</name><surname>rossi</surname><address>via verdi</address><city>milano</city><state>italy</state><email>wewew@fddf.com</email></client><client><id>3</id><name>giacomo</name><surname>leopardi</surname><address>via marrone</address><city>roma</city><state>italy</state><email>qwqwqw@gfgfgf.com</email></client><client><id>4</id><name>antonio</name><surname>gialli</surname><address>via viola</address><city>napoli</city><state>italy</state><email>hgfgfd@gfdf.com</email></client><client><id>5</id><name>andrea</name><surname>viola</surname><address>piazza la bomba e scappa</address><city>torino</city><state>italy</state><email>wewewe@dfdfdf.com</email></client><client><id>6</id><name>paolo</name><surname>de paoli</surname><address>via paolino</address><city>paolopoli</city><state>italy</state><email>sdsdsd@fdfdfd.com</email></client><client><id>7</id><name>alessandro</name><surname>magno</surname><address>via da roma</address><city>roma</city><state>italy</state><email>qqwqw@fgfgfg.com</email></client><client><id>8</id><name>briana</name><surname>banks</surname><address>via del padulo</address><city>genova</city><state>italy</state><email>scscssc@ghghggh.com</email></client><client><id>9</id><name>ruggero</name><surname>ruggeri</surname><address>via del rug</address><city>ragusa</city><state>italy</state><email>qwqqw@fdfdfd.com</email></client></clients>
Adesso mi creo un FLA che contiene un componente DataGrid sullo stage con nome istanza "my_dg".
Creo la Document Class, Main.as:
Code:
package
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.xml.*;
import fl.controls.ScrollPolicy;
public class Main extends MovieClip
{
private var clients_array:Array=new Array();
private var titles_array:Array;
public function Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
titles_array=new Array('id','name','surname','address','city','state','email');
loadXML();
}
private function loadXML():void
{
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE,completeHandler);
var request:URLRequest=new URLRequest('http://www.flepstudio.org/swf/ImmagazzinareDati/recuperare/getData.php');
try
{
loader.load(request);
}
catch(error:Error)
{
trace('Impossibile caricare il documento.');
}
}
private function completeHandler(event:Event):void
{
var result:XML=new XML(event.target.data);
var myXML:XMLDocument=new XMLDocument();
myXML.ignoreWhite=true;
myXML.parseXML(result.toXMLString());
var node:XMLNode=myXML.firstChild;
var n:int=node.childNodes.length;
for(var i:int=0;i < n;i++)
{
var obj:Object=new Object();
for(var j:int=0;j < node.childNodes[i].childNodes.length;j++)
{
if(j==0)
obj.id=int(node.childNodes[i].childNodes[j].firstChild.nodeValue);
if(j==1)
obj.name=node.childNodes[i].childNodes[j].firstChild.nodeValue;
if(j==2)
obj.surname=node.childNodes[i].childNodes[j].firstChild.nodeValue;
if(j==3)
obj.address=node.childNodes[i].childNodes[j].firstChild.nodeValue;
if(j==4)
obj.city=node.childNodes[i].childNodes[j].firstChild.nodeValue;
if(j==5)
obj.state=node.childNodes[i].childNodes[j].firstChild.nodeValue;
if(j==6)
obj.email=node.childNodes[i].childNodes[j].firstChild.nodeValue;
}
clients_array.push(obj);
}
populateDataGrid();
}
private function populateDataGrid():void
{
my_dg.rowCount=5;
my_dg.columns=titles_array;
my_dg.verticalScrollPolicy=ScrollPolicy.ON;
for(var i:int=0;i < clients_array.length;i++)
{
my_dg.addItem(clients_array[i]);
}
}
}
}
Abbiamo 3 funzioni:
loadXML che chiama il PHP ( output in formato XML ).
completeHandler che parsa l' output XML del PHP ed inserisce i dati in un Array.
populateDataGrid che riempie il DataGrid con i dati appunto recuperati dal DataBase tramite il PHP.
Ho ricreato il file php con qualche modifica e adesso funziona, se qualcuno riscontrasse lo stesso problema a creare l'xml dal database mi faccia sapere.
Riferimento: Recuperare dati da mySQL con Flash CS3
Ciao,
essendo nuovo dell'ambiente voorei avere qualche spiegazione perchè a me non funziona;ho poca domestichezza con AS e zero per quanto riguarda PHP.
Leggendo le vostre discussioni ho capito che devo risolvere un problema sui file php suppongo sui vari indirizzi... mi spiego a me l'inserimento funziona perchè mi da il messagggio di invio ma il recupero no o meglio appare un pannello bianco che presuppongp dovrebbe contenere il "componente" ma nessuna "tabella" ..chi mi può dare una mano.
MA bisogna per forza passare tramite xml??
Non si possono usare come quando passi i dati al database un qualcosa.variabile a cui poi passi il valore estratto dalla query??
E' una domanda per chiarire.
mi sembra un assurdità l'essere schiavi nell'uso di un xml!!
Ragazzi anche a me da l'errore: TypeError: Error #1088: Il codice nel documento successivo all'elemento principale deve essere formato correttamente.
quando tento di recuperare in flash i dati dal xml generato con php.
Come avete risolto voi?
tu Bulga come hai risolto?
Bookmarks