This is a discussion on Recuperare dati da mySQL con Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Abbiamo visto come inserire dei dati di un utente in un DataBase con Flash CS3.
In quel caso, avevamo una ...
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.