Anleitung | wechselseitige Kommunikation zwischen Actionscript, PHP & MySQL

Dieses Thema im Forum "Flash and Actionscript" wurde erstellt von sevY, 16.07.2004.

  1. sevY

    sevY Thread Starter Gast

    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