Alter project to pull from mysql

Hi All!

I am have been asked to alter a project to take a small memory game and insert/ pull details from a database rather than an xml doc (which it is at the moment). I havn’t done Actionscript before however i managed to get a small example working with as2, when it come to as3 i’m gettitng a bit lost.

i have the following xml doc

<flashMatch>
    <settings>
        <keepTrackOfCardFlips>true</keepTrackOfCardFlips>
        <keepTrackOfTime>true</keepTrackOfTime>
        <gridDimensions>6x3</gridDimensions>
        <horizontalCardMargin>10</horizontalCardMargin>
        <verticalCardMargin>10</verticalCardMargin>
        <completeText><![CDATA[Congratulations!<br/><br/>You've completed The  Match Game!!]]></completeText>
        <timeText><![CDATA[You completed the game in %time% seconds!]]></timeText>
        <cardFlipText><![CDATA[You completed the game in %flips% card flips!]]></cardFlipText>
    </settings>
    <cards>
        <item>newimages/img1.jpg</item>
        <item>newimages/img2.jpg</item>
        <item>newimages/img3.jpg</item>
        <item>newimages/img4.jpg</item>
        <item>newimages/img5.jpg</item>
        <item>newimages/img6.jpg</item>
        <item>newimages/img7.jpg</item>
        <item>newimages/img8.jpg</item>
        <item>newimages/img9.jpg</item>
    </cards>
</flashMatch>

and the following as3 code



//---------------------------------------------------
//config errors--------------------------------------
//---------------------------------------------------
function addConfigError(str){
    configErrorText +=str+"<br/>";
    configErrorFound=true;
}
function displayConfigErrors(){
    //handles display of config errors
    var errorField:TextField = new TextField();
    errorField.multiline=true;
    errorField.autoSize = TextFieldAutoSize.LEFT;
    errorField.htmlText = "<font color='#FF0000'>"+configErrorText+"</font>";
    addChild(errorField);    
}
//---------------------------------------------------
//card handling--------------------------------------
//---------------------------------------------------
function fadeNextCard(evnt:Event){
    cardARY[fadeCount].alpha=.3;
    fadeCount++;
    if(fadeCount>=cardARY.length){
        fadeOutTimer.stop();
    }
}
function showFinalScreen(evnt:Event){
    textAnim.visible=true;
    var myClickPattern:RegExp = /%flips%/; 
    var myTimePattern:RegExp = /%time%/; 
    cardFlipText = cardFlipText.replace(myClickPattern,totalClickCount);
    var timeInSeconds = totalTimeUsed/1000;
    timeText = timeText.replace(myTimePattern,timeInSeconds);
    var htmlStr:String = "<b>"+completeText+"</b>";
    if(keepTrackOfCardFlips == "true"){
        htmlStr += "<br/><b>"+cardFlipText+"</b>";
    }
    if(keepTrackOfTime == "true"){
        htmlStr += "<br/><b>"+timeText+"</b>";
    }
    textAnim.textHolder.completeText_TF.htmlText = htmlStr;
    fadeOutTimer.start();
    textAnim.gotoAndPlay("in");
}
function setMatch(val){
    completedMatches++;
    click1=0;
    click2=0;
    //find cards adn set to complete
    var total = cardARY.length;
    for(var i:uint = 0;i<total;i++){
        var card = cardARY*;
        if(card.myID == val){
            card.completed=true;
        }
    }
    if(completedMatches==totalImages){
        //game complete
        totalTimeUsed = getTimer()-totalTimeUsed;
        gameCompleteTimer.start();
    }
}
function cardClick(evnt:Event){
    totalClickCount++;
    if(totalTimeUsed==0){
        totalTimeUsed=getTimer();
    }
    var me = evnt.target.parent.parent;
    me.buttonMode=false;
    me.removeEventListener(MouseEvent.CLICK,cardClick);
    var myID = me.myID;
    if(click1 == 0){
        click1 = myID;
        click1Ref=me;
    }else{
        //this is the second Click
        if(click2==0){
            click2 = myID;
            click2Ref=me;
            if(click1==click2){
                //match made
                trace("match");
                setMatch(click1);
            }else{
                inCorrectTimer.start();
                disableAll();
                click1=0;
                click2=0;
            }
        }else{
            //this is the third Click..reset and start over
            inCorrectTimer.start();
            click1 = myID;
            click2=0;
        }
    }
    me.front.gotoAndPlay("reappear");
}
function resetCards(...rest){
    trace("resetCards");
    var total = cardARY.length;
    for(var i:uint = 0;i<total;i++){
        var card = cardARY*;
        if(card.completed == 0){
            card.buttonMode=true;
            card.addEventListener(MouseEvent.CLICK,cardClick);
            if(card.front.currentLabel == "show"){
                card.front.gotoAndPlay("disappear");
            }
        }
    }
}
function disableAll(){
    var total = cardARY.length;
    for(var i:uint = 0;i<total;i++){
        var card = cardARY*;
            card.buttonMode=false;
            card.removeEventListener(MouseEvent.CLICK,cardClick);
    }
}
function randomizeCards(){
    cardARY = shuffle(cardARY);
    var total:uint = cardARY.length;
    var xLoc = horizontalCardMargin;
    var yLoc = verticalCardMargin;
    var row_Count:uint = 0;
    var col_Count:uint = 0;
    for(var i:uint=0;i<total;i++){
        var thisCard = cardARY*;
        thisCard.x = xLoc;
        thisCard.y = yLoc;
        xLoc += thisCard.width+horizontalCardMargin;
        row_Count++;
        if(row_Count >= rows){
            xLoc=horizontalCardMargin;
            row_Count=0;
            col_Count++;
            yLoc += thisCard.height+verticalCardMargin;
        }
    }
}
function loadImage(tgt1,tgt2,src,id){
    //trace("src="+src);
    var pictURLReq:URLRequest = new URLRequest(src);
    var pictLdr:Loader = new Loader();
    
    pictLdr.load(pictURLReq);
    pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
    function imgLoaded(evnt:Event){
        totalLoaded++;
        var image:Bitmap = Bitmap(pictLdr.content);
        var imageDup:Bitmap = new Bitmap(image.bitmapData.clone());
        tgt1.imgHolder.addChild(image);
        tgt2.imgHolder.addChild(imageDup);
        tgt1.myID = id;
        tgt2.myID = id;
        if(totalLoaded==totalImages){
            //all images loaded and card created
            randomizeCards();
        }
    }
}
//---------------------------------------------------
//data handling--------------------------------------
//---------------------------------------------------
function shuffle(arr){
    var shuffled:Array = arr.slice();
    for (var i:int=0; i<arr.length; i++) 
    {
        var element:Object = shuffled*;
        var rnd:int = Math.floor(arr.length * Math.random());
        shuffled* = shuffled[rnd];
        shuffled[rnd] = element;
    }
    return shuffled; 
};
function loadXML(){
    var myXML:XML = new XML();
    var XML_URL:String = "flashmatch.xml";
    var myXMLURL:URLRequest = new URLRequest(XML_URL);
    var myLoader:URLLoader = new URLLoader(myXMLURL);
    myLoader.addEventListener("complete", xmlLoaded);
    
    function xmlLoaded(event:Event):void
    {
        myXML = XML(myLoader.data);
        totalImages = myXML.cards.child("item").length();
        gridDimensions = myXML.settings.gridDimensions;
        keepTrackOfCardFlips = myXML.settings.keepTrackOfCardFlips.toLowerCase();
        keepTrackOfTime = myXML.settings.keepTrackOfTime.toLowerCase();
        horizontalCardMargin = myXML.settings.horizontalCardMargin;
        verticalCardMargin = myXML.settings.verticalCardMargin;
        completeText = myXML.settings.completeText;
        timeText = myXML.settings.timeText;
        cardFlipText = myXML.settings.cardFlipText;

        if(gridDimensions.indexOf("x")==-1){
            addConfigError("Grid Dimensions must be in this format: 4x2");
        }else{
            var gridSplit = gridDimensions.split("x");
            rows = new uint(gridSplit[0]);
            trace("rows="+rows);
            cols = new uint(gridSplit[1]);
            var totalByGridCalc = rows*cols;
            var totalByXMLCount = totalImages*2;
            if(totalByGridCalc != totalByXMLCount){
                var totalDiff = (totalByGridCalc - totalByXMLCount)/2;
                addConfigError("You need "+totalDiff+" more image(s) to complete a "+gridDimensions+" grid");
            }
            trace("totalByGridCalc="+totalByGridCalc);
        }
        
        if(configErrorFound==false){
            var localID:uint = 1;
            for(var k:uint=0;k<totalImages;k++){
                var img:String = myXML.cards.item[k];
                var card = new cardClip();
                var altCard = new cardClip();
                card.front.gotoAndStop("hide");
                altCard.front.gotoAndStop("hide");
                cardARY.push(card);
                cardARY.push(altCard);
                cardHolder.addChild(card);
                cardHolder.addChild(altCard);
                card.buttonMode=true;
                altCard.buttonMode=true;
                card.addEventListener(MouseEvent.CLICK,cardClick);
                altCard.addEventListener(MouseEvent.CLICK,cardClick);
                loadImage(card,altCard,img,localID);
                localID++;
            }
        }else{
            displayConfigErrors();
        }
    }
}

function playAgain(...rest){
    gotoAndPlay(2);
}
//---------------init-----------------
textAnim.visible=false;
var configErrorFound:Boolean = false;
var configErrorText:String = "XML Configuration errors:<br/><br/>";
var totalLoaded:uint=0;
var totalImages:uint = 0;
var gridDimensions:String = "";
var rows:uint = 0;
var cols:uint = 0;
var keepTrackOfCardFlips:String = "true";
var keepTrackOfTime:String = "true";
var horizontalCardMargin:int = 0;
var verticalCardMargin:int = 0;
var completeText:String="";
var timeText:String="";
var cardFlipText:String="";
var completedMatches:uint = 0;
var totalClickCount:uint=0;
var totalTimeUsed:uint=0;
var click1:uint;//used to store card clicks
var click2:uint;//used to store card clicks
var click1Ref;
var click2Ref;
var cardARY:Array = new Array();//hold the URLs of the images to load
var inCorrectTimer:Timer = new Timer(700,1);
inCorrectTimer.addEventListener(TimerEvent.TIMER,resetCards);
var gameCompleteTimer:Timer = new Timer(1000,1);
gameCompleteTimer.addEventListener(TimerEvent.TIMER,showFinalScreen);
var fadeOutTimer:Timer = new Timer(50);
fadeOutTimer.addEventListener(TimerEvent.TIMER,fadeNextCard);
var fadeCount:uint = 0;
loadXML();
stop();

My question is how can i change this to acept variable from the database (ideally via php)? I have tried to add code like

var MyClickPattern = evt.target.data.clicks

which i tried to pull from a static php script however every time i add any code or amend anything the script loops all the time? Can anyone point me in the right direction?