Flash CS3 + PHP + mySQL, visualizzare il numero utenti registrati da vBulletin
This is a discussion on Flash CS3 + PHP + mySQL, visualizzare il numero utenti registrati da vBulletin within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Maramao!
Con questo articolo vedremo come poter accompagnare Flash con l' ormai super nota board vBulletin.
Vedremo come creare un ...
Flash CS3 + PHP + mySQL, visualizzare il numero utenti registrati da vBulletin
Maramao!
Con questo articolo vedremo come poter accompagnare Flash con l' ormai super nota board vBulletin.
Vedremo come creare un SWF che tramite Actionscript 3.0 che chiama un PHP che a sua volta esegue una query al database mySQL. Il PHP restituisce tale valore a Flash che visualizza il numero di utenti registrati del forum ed il nome dell' ultimo registrato.
Se avete appreso bene i contenuti dell' articolo in cui mostravo come utilizzare il nuovo Actionscript 3.0 con PHP e cosa sia laDocument Class in Flash CS3, allora siete pronti per aggiungere un bel modulo in Flash al vostro forum.
Creo un FLA che salvo con nome ' utenti.fla ' e gli assegno le misure di 150x80.
Al suo interno ho sullo Stage:
- una MovieClip con nome loading_mc che sarà visualizzata durante il tempo di percorrenza dalla chiamata al PHP fino alla sua risposta. Al suo interno ha una piccola animazione a intermittenza.
- una MovieClip con nome utenti_mc con all' interno un campo di testo che visualizza la scritta ' utenti registrati '. Inoltre ha una piccola animazione al suo interno in modo da far apparire la MovieClip stessa dalla destra verso il centro.
- una MovieClip con nome ultimo_mc con le stesse caratteristiche di utenti_mc ma con la scritta ' ultimo utente registrato '.
- un campo di testo dinamico con nome numero_txt che visualizzerà il numero degli utenti iscritti
- un campo di testo dinamico con nome ultimo_txt che visualizzerà il nome dell' ultimo utente registrato.
Passiamo al codice Actionscript 3.0:
creo la Document class, un file AS che salvo con nome ' Utenti.as ', che chiamerà il primo script PHP per recuperare il numero totale degli utenti iscritti, implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.utils.Timer;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.events.*;
public class Utenti extends MovieClip
{
private var num_utenti:int;
private var timer:Timer;
private var boo:Boolean=true;
public function Utenti()
{
init();
callServer();
}
private function init():void
{
stage.frameRate=31;
}
private function callServer():void
{
var richiesta:URLRequest=new URLRequest();
richiesta.url='http://www.flepstudio.org/test.php?cachebuster='+new Date().getTime();
var loader:URLLoader=new URLLoader();
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
}
private function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}
private function completato(e:Event):void
{
loading_mc.stop();
loading_mc.visible=false;
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
num_utenti=vars.utenti;
utenti_mc.play();
utenti_mc.addEventListener(Event.ENTER_FRAME,checking);
}
private function checking(e:Event):void
{
if(e.currentTarget.currentFrame==31)
{
e.currentTarget.removeEventListener(Event.ENTER_FRAME,checking);
display();
var utlimo:Ultimo=new Ultimo(this);
}
}
private function display():void
{
numero_txt.text=num_utenti.toString();
timer=new Timer(250,0);
timer.addEventListener(TimerEvent.TIMER,fade);
timer.start();
}
private function fade(t:TimerEvent):void
{
if(boo)
utenti_mc.alpha=.75;
else
utenti_mc.alpha=1;
boo=!boo;
}
}
}
Poi creo un' altra classe, un file AS che salvo con nome ' Ultimo.as ', che chiamerà il secondo script PHP per recuperare il nome dell' ultimo utente iscritto, implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.events.*;
public class Ultimo extends MovieClip
{
private var Root:MovieClip;
private var ultimo_utente:String;
public function Ultimo(m:MovieClip)
{
Root=m;
Root.loading_mc.visible=true;
Root.loading_mc.y+=40;
Root.loading_mc.play();
callServer();
}
private function callServer():void
{
var richiesta:URLRequest=new URLRequest();
richiesta.url='http://www.flepstudio.org/ultimo_registrato.php';
var loader:URLLoader=new URLLoader();
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
}
private function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}
private function completato(e:Event):void
{
Root.loading_mc.stop();
Root.loading_mc.visible=false;
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
ultimo_utente=vars.ultimo;
Root.ultimo_mc.play();
Root.ultimo_mc.addEventListener(Event.ENTER_FRAME,checking);
function checking(e:Event):void
{
if(e.currentTarget.currentFrame==31)
{
e.currentTarget.removeEventListener(Event.ENTER_FRAME,checking);
Root.ultimo_txt.text=ultimo_utente;
}
}
}
}
}
Analizziamo il codice:
Classe Utenti.as
Proprietà:
una variabile numerica in cui inserirò il valore che mi passa il PHP ( numero utenti )
private var num_utenti:int;
un Timer per una piccola animazione
private var timer:Timer;
Una variabile di tipo Boolean che servirà sempre per l' animazione
private var boo:Boolean=true;
Metodi
init();
imposto la velocità del frame rate
stage.frameRate=31;
Adesso mi concentro dal metodo completato() in avanti, in quanto il resto che esegue questa classe lo abbiamo già visto quì: Chiamare PHP con Flash CS3
completato();
fermo l' animazione di loading_mc e lo rendo invisibile
loading_mc.stop();
loading_mc.visible=false;
recupero i dati che mi ha restiuito utenti.php ( facendo una query al DB )
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
asegno il valore del PHP alla variabile num_utenti
num_utenti=vars.utenti;
faccio partire la timeline di utenti_mc
utenti_mc.play();
creo un intervallo ENTER_FRAME che controlla il numero del frame attuale di utenti_mc chiamando la funzione checking
utenti_mc.addEventListener(Event.ENTER_FRAME,check ing);
checking();
se il frame corrente è il numero 31
if(e.currentTarget.currentFrame==31)
{
fermo l' intervallo
e.currentTarget.removeEventListener(Event.ENTER_FR AME,checking);
chiamo il metodo display()
display();
istanzio la classe Ultimo ( che vedremo tra poco )
var utlimo:Ultimo=new Ultimo(this);
}
display();
assegno al campodi testo numero_txt il valore della variabile num_utenti
numero_txt.text=num_utenti.toString();
creo un Timer che chiamerà ogni 250 centesimi di secondo la funzione fade()
timer=new Timer(250,0);
timer.addEventListener(TimerEvent.TIMER,fade);
timer.start();
fade();
se la variabile boo è true
if(boo)
assegno un alpha a ytenti_mc pari a 0,75
utenti_mc.alpha=.75;
se invece è false
else
assegno un alpha a ytenti_mc pari a 1
utenti_mc.alpha=1;
inverto il valore di boo
boo=!boo;
Classe Ultimo.as
Proprietà:
una variabile di tipo MovieClip a cui assegnerà la root passandogliela da Utenti.as in modo da potermi riferire alle MovieClip e campi di testo che ho in utenti.fla
private var Root:MovieClip;
una variabile di tipo stringa in cui inserirò il nome dell' ultimo utente registrato che mi ha restituito ultimo.php ( dopo la query al database )
private var ultimo_utente:String;
Come abbiamo già visto in altri casi, il codice all' interno della funzione costruttrice di una classe è la prima cosa che viene eseguita.
Infatti quando da Utenti.as abbiamo istanziato Ultimo.as, nella costruttrice di Ultimo.as abbiamo il seguente codice:
assegno alla variabile Root, la root così posso chiamare le MovieClip che ho sullo Stage
Root=m;
rendo visibile loading_mc
Root.loading_mc.visible=true;
gli spostola sua y di 40 pixels
Root.loading_mc.y+=40;
faccio partire la sua timeline
Root.loading_mc.play();
Adesso andiamo al metodo completato();
fermo la timeline di loading_mc e lo rendo invisibile
Root.loading_mc.stop();
Root.loading_mc.visible=false;
recupero i dati che il PHP mi ha restituito ( una sringa col nome dell' ultimo utente registrato )
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
assegno i dati alla variabile ultimo_utente
ultimo_utente=vars.ultimo;
faccio partite la timeline di ultimo_mc
Root.ultimo_mc.play();
creo un intervallo ENTER_FRAME che controlla il numero del frame attuale di ultimo_mc chiamando la funzione checking
Root.ultimo_mc.addEventListener(Event.ENTER_FRAME, checking);
function checking(e:Event):void
{
se il frame corrente è il numero 31
if(e.currentTarget.currentFrame==31)
{
fermo l' intervallo
e.currentTarget.removeEventListener(Event.ENTER_FR AME,checking);
assegno il testo al campo di testo ultimo_txt
Root.ultimo_txt.text=ultimo_utente;
}
}
Il PHP che utilizzo :
utenti.php
PHP Code:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
E' sufficiente cambiare: nome utente database, password database e nome database.
Cambiare gli url ai files PHP nelle classi Utenti ( riga 42 ) e Ultimo (riga 38 ).
I due file php devono avere permessi 777.
Questo è risultato di questo modulo che prende i dati dal forum di FlepStudio:
PS: causa traffico intenso, l' SWF di esempio lavora solo con il numero totale di utenti e non richiede anche il nome dell' ultimo. Ma il tutorial fa entrambi, vedete voi come si comporta sul vostro forum.
Re: Flash CS3 + PHP + mySQL, visualizzare il numero utenti registrati da vBulletin
Ciao Flep,
complimenti per il tuo sito col quale ci delizi sempre di ottimi consigli su come diventare + bravi con AS3 e FLASH.
vengo al dunque:
attualmente gestisco un sito che si appoggia su un server che mi da la possibilità di usare il DB MySQL per registrare varie informazioni.
il sito fatto con Joomla e l'ho personalizzato in base alle mie esigenze.
mi piacerebbe molto creare un modulo swf da aggiungere alla colonna sinistra del mio sito, il quale mostrasse gli utenti attualmente connessi al sito..
ho già provato vari moduli anche scritti in AJAX, ma non funzionano..
vorrei capire se è possibile fare un modulo che faccia questo e che sia cmq una cosa sicura (le impostazioni di collegamento al DB, se servono, devono essere scritte non nel SWF presumo ma in un file non accessibile ai navigatori)
in attesa di una tua risposta ricolgo l'occasione per farti i complimenti !
PS
mi sto avvicinando ora a FLASH CS3 e a AS3, non è che sia un grande esperto, ma ci metto passione...
Re: Flash CS3 + PHP + mySQL, visualizzare il numero utenti registrati da vBulletin
Ciao buddhabas e benvenuto
Personalmente avevo creato un modulo in Flash che chiamava un PHP che gli restituiva la lista dei nomi utenti online in quel momento ( quindi usando le sessioni ), ma non l' avevo fatto io il PHP, avevo 'noleggiato' un PHP programmer che mi aveva detto di chiamare un certo script e comnque adesso che mi viene in mente era con Vbulletin e non con Joomla.
Le mie conoscenze di PHP non mi permettono di darti una risposta, forse qualche altro utente può darti una mano