This is a discussion on Actionscript 3.0 e Zend AMF within the Articoli e tutorials forums, part of the Flash Italiano category; Zend è un framework PHP.
Zend Amf ci permette di comunicare da Flash al PHP senza dover utilizzare l' XML ...
Nella prima riga attivo la modalità di avviso errori e di che tipo qualora ce ne fossero.
ini_set, imposta il valore di una data opzione di configurazione.
Se l'operazione riesce restituisce il vecchio valore, oppure FALSE se fallisce.
Le opzioni di configurazione manterranno il nuovo valore durante l'esecuzione dello script, e saranno ripristinate al termine dello stesso.
Quindi ho incluso la path "frameworks".
L'istruzione require_once() include e valuta il file specificato durante l'esecuzione dello script.
È un comportamento simile all'istruzione require(), con la sola differenza che se il codice di un file è stato già incluso, esso non sarà incluso nuovamente.
Quindi dico al PHP che servono i files Server.php ( esattamente nella path Zend/Amf/ ) e Comments.php ( che vado a creare nel passo 5 di questo tutorial ).
Istanzio Zend, new Zend_Amf_Server(), istanzio la classe Comments ed eseguo un echo del metodo handle().
Passo 5
Creare una classe PHP con nome Comments.php
implementata nel seguente modo e caricarlo nella cartella ZendAmf :
PHP Code:
<?php class Comments { public function __construct() { mysql_connect("localhost","username","password"); mysql_select_db("database"); }
public function getAuthors() { $result=mysql_query("SELECT * FROM wp_comments"); $t = array();
Come possiamo vedere, questa classe si connette al DB nella sua funzione costruttrice.
Poi ha un metodo ( getAuthors ) che esegue la query al DB, fa il push in un Array di ogni riga della tabella wp_comments e restituisce l' Array.
Questo Array lo andremo a recuperare con Flash.
Passo 6
Apriamo Flash.
Creo un FLA che salvo con nome zendamf.fla .
Nella sua libreria ho una MovieClip che fungerà da preloader con Linkage "Wheel".
Poi trascino un componente TextArea sullo stage e gli assegno il nome istanza "my_ta";
A questo punto apro il pannello azioni e scrivo:
Code:
var nc:NetConnection=new NetConnection();
nc.connect("http://url della cartella ZendAmf/");
var res:Responder=new Responder(onResult,onError);
my_ta.visible=false;
var wheel_mc:Wheel=new Wheel();
wheel_mc.width=wheel_mc.height=40;
wheel_mc.x=stage.stageWidth/2-wheel_mc.width/2;
wheel_mc.y=stage.stageHeight/2-wheel_mc.height/2;
addChild(wheel_mc);
nc.call("Comments.getAuthors",res);
function onResult(e:Object):void
{
for(var i:int=0;i < e.length;i++)
{
my_ta.appendText((i+1)+" - "+e[i].comment_author+"\n");
}
wheel_mc.stop();
removeChild(wheel_mc);
my_ta.visible=true;
}
function onError(e:Object):void
{
wheel_mc.stop();
removeChild(wheel_mc);
my_ta.text=e.toString();
my_ta.visible=true;
}
Passo 7
Analizziamo Actionscript.
Creo una nuova istanza della classe NetConnection
var nc:NetConnection=new NetConnection();
e gli dico di connettermi alla cartella ZendAmf in cui ho index.php che abbiamo appena creato
nc.connect("http://www.flepstudio.org/ZendAmf/");
Creo una nuova istanza della classe Responder che chiamerà la funzione onResult quando avrà caricato i dati dal PHP e la funzione onError se ci saranno degli errori.
var res:Responder=new Responder(onResult,onError);
imposto la text area invisibile
my_ta.visible=false;
Aggiungo il preloader
var wheel_mc:Wheel=new Wheel();
wheel_mc.width=wheel_mc.height=40;
wheel_mc.x=stage.stageWidth/2-wheel_mc.width/2;
wheel_mc.y=stage.stageHeight/2-wheel_mc.height/2;
addChild(wheel_mc);
Dico alla istanza NetConnection di chiamare il metodo getAuthors() della classe Comments.php
nc.call("Comments.getAuthors",res);
Questa funzione viene chiamata quando i dati dal PHP sono stati caricati:
La cosa molto bella è che il PHP ci restituisce un Object.
Quindi creo un ciclo for per recuperare gli autori e li assegno come testo della mia text area.
Nota che chiamo comment_author che è il nome della colonna della tabella che ho interrogato ! Questo è il bello !
Quindi i nomi delle colonne della tabella, in Flash diventano proprietà di quell' oggetto
che ci viene restiuito dal PHP !
In questi giorni ho iniziato ad usare Zend Framework e tra le cose che più mi sono piaciute c'è proprio la possibilità di bypassare l'xml per far avere i dati a Flash.
Volevo scriverci un post ma tu, come sempre, sei un passo avanti. Grande Filippo!!!!
Aggiungo che:
lo sto provando in locale su windows con wamp,
se provo da un altro script php a richiamare ./fw/comments.php ciò che resituisce getAuthors() è giusto,
se provo a chiamare ./amf/index.php da browser mi restituisce un file .part contenente
ciao a tutti...molto utile questo zend...riesco a ricevere i dati dal db ma non riesco a fare delle insert con dei parametri inviati da flash. Nella call vedo che appunto si possono inviare dei parametri, ma come si richiamano da php? grazie mille...ciao ciao
ciao ragazzi.
ho letto un po in giro e sto tentando di fare un sito in flash che gestisce un database mysq utilizzando zend.. ma sono bloccato. nn riesco ad estrarre ad esempio un record solo da una tabella. ho modificato la funzione nel file php
PHP Code:
public function get_prova($idtemp) { $la_query = sprintf("SELECT * FROM tb_anagrafica WHERE id_anagrafica = %s ORDER BY Cognome ASC",$idtemp); $result = mysql_query($la_query) ; $t = array(); while($row = mysql_fetch_assoc($result)) { array_push($t, $row); } return $t; }
ma poi nn riesco da flash a passarli il valore $idtemp !!!
qualche suggerimento ??
Salve,
sto realizzando il mio primo sito web in flash e mi sono fermato al login, non capisco come fare a salvare una variabile in sessione, per poi riaccedervi in una seguente chiamata.. Grazie in anticipo!
Ciao AndreaM e benvenuto.
Flash non ha sessioni come il PHP.
Un SWF è un video, quindi hai due strade:
1) il PHP ( o qualsiasi altro linguaggio lato server stai usando ) apre le sessioni che passi all'SWF tramite HTML ed Actionscript eseguirà delle azioni in base a tali variabili.
2) Flash chiama un PHP passandogli ad esempio un id o nomeutente ed il PHP controllerà nel DB se far passare tale utente oppure no. A quel punto il PHP restituisce un true o false a Flash che si comporterà di conseguenza.
Ho risolto, ho scoperto a mie spese, ovvero passando ben 4 ore a scervellarmi su quale fosse il problema, che se semplicemente testo il filmato da flash, ad ogni chiamata php assegna un session_id diverso, invece dovevo testarlo col php =P
Grazie per le delucidazioni comunque!
Bookmarks