Adobe Flash Anleitung | wechselseitige Kommunikation zwischen Actionscript, PHP & MySQL

S

sevY

Hi zusammen,

hier noch ein Tutorial, das auf dieses Tutorial aufbaut.

Dabei geht es darum, Inhalte zeitgesteuert auszulesen. Hier am Beispiel eine Flashchats, der allerdings aufgrund seines Performancehungers als Beta einzustufen ist. Das Beispiel dient also nur als Lernobjekt. Zum Testen unter realistischen Bedingungen gebe ich euch den Hinweis mit, das ich mit 25 Usern unseren dedicated SQL Server lahmgelegt habe. Teilweise waren bis zu 250 MySQL Transaktionen pro Sekunde zu verzeichnen.

Fangen wir mit der Query.php an, die 2 Varianten des Auslesen bereitstellt, welche aus Flash gesteuert werden.

PHP:
<?php
require_once('config.inc.php');
require_once('function.inc.php');
if($_POST['details']=='show')
    {
    $read=mysql_query("select user,timestamp,words from $db_tab order by id desc LIMIT 0,50",$handler);
    while($a=mysql_fetch_array($read))
        {
        $result.=$a['user'].' '.$a['timestamp'].'<br>'.$a['words'].'<br>';
        }
    }
else
    {
    $read=mysql_query("select user,words from $db_tab order by id desc LIMIT 0,50",$handler);
    while($a=mysql_fetch_array($read))
        {
        $result.=$a['user'].'<br>'.$a['words'].'<br>';
        }
    }
echo '&words='.charReplace::replace(utf8_encode($result));
?>


Der erste Teil des Actionscript liegt auf dem Loginbutton, der den dort eingegeben Usernamen global als Variable definiert.

PHP:
//Actionscript 1.0
on(release)
    {
    if(_root.userName.text!='')
        {
        _global.user=user;
        this.gotoAndStop(_currentframe+1);
        }
    }
on(keyPress '<Enter>')
    {
    if(_root.userName.text!='')
        {
        _global.user=user;
        this.gotoAndStop(_currentframe+1);
        }
    }


Im 2. Frame befinden sich dann die Funktionen, die für das Auslesen und Einfügen der Mitteilungen zuständig sind, sowie die Funktion der Checkbox, die definiert, ob das loadVars Objekt detailierte oder minimale Informationen (Datum, Uhrzeit) abfragen soll.

PHP:
//Actionscript 1.0
var details=this.attachMovie('FCheckBoxSymbol','details',1);
details._x=52;
details._y=380;
details.setLabel('Details');
details.setChangeHandler('detailsBox');
var detailsBox=function()
    {
    if(!details.getValue())
        {
        _global.details='hide';
        }
    else
        {
        _global.details='show';
        }
    }
details.setValue(true);
MovieClip.prototype.read=function()
    {
    var readContent=new LoadVars();
    readContent.object=this;
    readContent.details=_global.details;
    readContent.sendAndLoad('query.php', readContent, 'POST');
    readContent.onLoad=function()
        {
        _root.main.htmltext=this.words;
        _root.read();
        delete this.object['readContent'];
        }
    }
MovieClip.prototype.insert=function()
    {
    if(_root.userInput.text!='')
        {
        var insertContent=new LoadVars();
        insertContent.object=this;
        insertContent.words=words;
        insertContent.user=_global.user;
        insertContent.sendAndLoad('insert.php', insertContent, 'POST');
        insertContent.onLoad=function()
            {
            _root.userInput.text='';
            delete this.object['insertContent'];
            }
        }
    }
this.read();
this.stop();


Neu ist hier also das Nutzen der Checkbox und die Integration ihrer onChangeHanlder in das LoadVars Objekt, welches mit sendAndLoad() eine wechselseitige Kommunikation mit PHP erlaubt. Wenn man nun eine stetige Refreshrate haben möchte, kann man entweder ein Interval für den Aufruf des Read Prototypes setzen, oder aber, man schreibt den Funktionsaufruf in einen onEnterFrame Handler, was allerdings zu den o.g. kritischen SQL-Queries führen wird.


Viel Spaß.


Liebe Grüße

Yves
 
Zurück
Oben Unten