0

i'm trying to create buttons using the data in a XML file in AS3.

However, when I run my code I get no errors BUT nothing get loaded into my flash file either!

I am creating the XML file using PHP file.

so when I click on a button inside my flash file, I should SEND the data to the XML (generated using PHP) and then load the data inside the XML file in the form of buttons inside my flash file!

This is my AS3 code:

// Set the "y" location on stage where the first btn will live
var yPlacement:int = 130;
// Set the "x" location on stage where all btns will line up vertically
var xPlacement:int = 10;
// Set the distance each btn should be apart here
var distance:int = 18;
// Format the text appearance here
var format:TextFormat = new TextFormat();
format.color = 0x000000;
format.font = "Verdana";
format.size = 11;
//format.bold = true;
format.kerning = false;



getitems.addEventListener(MouseEvent.MOUSE_DOWN, checkLoginL);




     function checkLoginL (e:Event):void {

            /*
            check fields before sending request to php
            */

            if (myText2.text == "") {

                /*
                if username or password fields are empty set error messages
                */

                if (myText2.text == "") {

                myText2.text = "Enter your email";

                } 


            } else {

                /*
                init function to process login
                */

                processLoginL();

            }

        }


     function processLoginL ():void {


        var phpVarsL:URLVariables = new URLVariables();

            var myXML:XML = new XML();
            var XML_URL:String = "php/MYPHPFILE.php";
            var myXMLURL:URLRequest = new URLRequest(XML_URL);
            myXMLURL.method = URLRequestMethod.POST;
            var myLoader:URLLoader = new URLLoader(myXMLURL);


            myXMLURL.data = phpVarsL;


            myLoader.addEventListener("complete", xmlLoaded);

            phpVarsL.systemCallL = "checkLoginL";
            phpVarsL.myText2 = myText2.text;





function xmlLoaded(event:Event):void {

    // Place the xml data into the myXML object
    myXML = XML(myLoader.data);


    // Initialize and give var name to the new external XMLDocument
    var xmlDoc:XMLDocument = new XMLDocument();
    // Ignore spacing around nodes
    xmlDoc.ignoreWhite = true;
    // Define a new name for the loaded XML that is the data in myLoader
    var menuXML:XML = XML(myLoader.data);
    // Parse the XML data into a readable format
    xmlDoc.parseXML(menuXML.toXMLString());

    // Set the index number of our loop, increments automatically
    var i:Number = 0;
    // Run the "for each" loop to iterate through all of the menu items listed in the external XML file
    for each (var MenuItem:XML in myXML..MenuItem) {

    // Access the value of the "pagenum" node in our external XML file
    var pagenum:String = MenuItem.pagenum.toString();
    // Access the value of the "pagetext" node in our external XML file
    var pagetext:String = MenuItem.pagetext.toString(); 
    // Access the value of the "pagepicture" node in our external XML file
    var pagepicture:String = MenuItem.pagepicture.toString();

    // Just some trace I used while testiing
     //trace(pagenum);

                             // This all pertains to the style of the button, alter values to your liking
                             var type:String = GradientType.LINEAR;
                             var colors:Array = [0xFFFFFF, 0xCCCCCC];
                             var alphas:Array = [1, 1];
                             var ratios:Array = [0, 255];
                             var spreadMethod:String = SpreadMethod.PAD;
                             var interp:String = InterpolationMethod.LINEAR_RGB;
                             var focalPtRatio:Number = 0;
                             var matrix:Matrix = new Matrix();
                             var boxWidth:Number = 16;
                             var boxHeight:Number = 20;
                             var boxRotation:Number = Math.PI/2; // 90˚
                             var tx:Number = 0;
                             var ty:Number = 0;
                             matrix.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty);
                             var rect:Shape = new Shape;
                             rect.graphics.beginGradientFill(type, colors, alphas, ratios, matrix, spreadMethod, interp, focalPtRatio);
                             rect.graphics.lineStyle(1, 0x999999);
                             rect.graphics.drawRect(0, 0, boxWidth, boxHeight);

                             // This all pertains to the text fields that give our buttons their label, alter values to your liking
                             var myText:TextField = new TextField();
                             //myText.embedFonts = true;
                             myText.autoSize = TextFieldAutoSize.LEFT;
                             myText.antiAliasType = AntiAliasType.ADVANCED;
                             myText.defaultTextFormat = format;
                             myText.selectable = false;
                             myText.mouseEnabled = false;
                             myText.text = pagenum;
                             myText.x = 2;
                             myText.y = 2;
                             addChild(myText);

                             // Create MovieClip holder for each button graphic and text label
                             var clip_mc = new MovieClip();
                             // Add the rectangle graphic
                             clip_mc.addChild(rect);
                             // Add the text field
                             clip_mc.addChild(myText);
                             // Put the new movieClip on stage now
                             addChild(clip_mc);
                             // Make the mouse button mode true for the movieclip so user knows it is a button
                             clip_mc.buttonMode = true;                      

                             // Offset each one in the loop to make sure they don't just get put right on top of each other
                             xPlacement = xPlacement + distance;
                             // Now apply it in its offset Y position to the stage
                             clip_mc.y = yPlacement;
                             // X position it will be placed on stage
                             clip_mc.x = xPlacement;

                             var pictLdr:Loader = new Loader();
                             var pictURL:String = pagepicture;
                             var pictURLReq:URLRequest = new URLRequest(pictURL);
                             pictLdr.load(pictURLReq);
                             // Access the pic value and ready it for setting up the Click listener, and function
                             clip_mc.clickToPic = pictLdr;
                             // Access the text value and ready it for setting up the Click listener, and function
                             clip_mc.clickToText = pagetext;
                             // Add the mouse event listener to the moviClip button
                             clip_mc.addEventListener (MouseEvent.CLICK, clipClick);
                             //Add event listeners (used for animating the buttons)
                             clip_mc.addEventListener (MouseEvent.MOUSE_OVER, onMouseOver);
                             clip_mc.addEventListener (MouseEvent.MOUSE_OUT, onMouseOut);

                             // Set the function for what happens when that button gets clicked
                             function clipClick(e:Event):void {

                                 pagewindow.pageText_txt.text = e.target.clickToText;


                                 pagewindow.pagepic.addChild(e.target.clickToPic);

                             }

                             // increment the loop index number for trace testing
                             i++;
                             //trace(i);


    }




}

// Set the mouse over function for all movieclip buttons
function onMouseOver (e:Event):void {

// Create the filters and add them to an array
var bevel:BevelFilter = new BevelFilter();
bevel.distance = 1;
bevel.angle = 45;
bevel.shadowColor = 0x666666;
bevel.shadowAlpha = 0.5;
bevel.strength = 4;
bevel.quality = BitmapFilterQuality.MEDIUM;
bevel.type = BitmapFilterType.INNER;
bevel.knockout = false;
var glow:GlowFilter = new GlowFilter();
glow.color = 0x79B3E1;
glow.alpha = 1;
glow.quality = BitmapFilterQuality.MEDIUM;
// Pack the filter paramters into the array variable
var filtersArray:Array = new Array(bevel, glow);

// Assign the filters array to the display object to apply the filter
e.target.filters = filtersArray;

}

// Set the mouse out function for all movieclip buttons
function onMouseOut (e:Event):void {

    // Remove the Filters on Mouse Out
    e.target.filters = null;

}

}

AND THIS IS HOW I CREATE THE XML FILE USING PHP:

<?php 
session_start();
header ("content-type: text/xml");
/*
connect to our database
*/
/*
we post the variables we recieve from flash
*/
$myText2 = $_POST['myText2'];
/* 
if flash called the login system the code below runs
*/
$myText2 = $_POST['myText2'];
if ($_POST['systemCallL'] == "checkLoginL") {
// Initialize the xmlOutput variable
$xmlBody = '<?xml version="1.0" encoding="iso-8859-1"?>';
$xmlBody .= "<XML>";
$xmlBody .= "<MenuList>";
// Run a select query to get my letest 6 items
// Connect to the MySQL database  
include "connectxml.php"; 
//$sql = "SELECT DISTINCT product_name FROM `ctegories_and`";
$sql = "SELECT * FROM `restItems` WHERE restarantName='$myText2'";
$query = mysqli_query($db_conx, $sql);
$productCount = mysqli_num_rows($query); // count the output amount
if ($productCount > 0) {
    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
             $id = $row["id"];
             $product_name = $row["product_name"];
$xmlBody .= '<MenuItem>
               <pagenum>'.$product_name.'</pagenum>
         <pagepicture>http://babygifts4u.co.uk/austinApp/php/pageThumbs/page1thumb.jpg</pagepicture>
         <pagetext>
         Page 1 text is blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
         </pagetext>
         </MenuItem>';
}

}// End while loop
$xmlBody .= "</MenuList>";
$xmlBody .= "</XML>";

}
echo $xmlBody;

?>

if i remove if ($_POST['systemCallL'] == "checkLoginL") { } from my php code, the AS3 code loads the data properly and creates the buttons! but I don't want to do that!

any help would be appreciated.

Thanks in advance.

3
  • I don't see myLoader.load() did you take that out of the code before posting it here? Commented Nov 21, 2014 at 3:56
  • @Daniel, No, I never had that in my code! i did put it in my code when you mentioned it but I get the following error: Scene 1, Layer 'Layer 1', Frame 1, Line 84 1136: Incorrect number of arguments. Expected 1. Commented Nov 21, 2014 at 4:02
  • I'm not sure then how the data gets loaded without the load request. also it seems that the processLoginL function is not closed properly Commented Nov 21, 2014 at 4:25

1 Answer 1

1

here is an example request with POST

var loader : URLLoader = new URLLoader();  
var request : URLRequest = new URLRequest("/index.php");  

request.method = URLRequestMethod.POST;  
var variables : URLVariables = new URLVariables();  
variables.key1 = "value1";  
variables.key2 = "value2";  
request.data = variables;  

//  Handlers  
loader.addEventListener(Event.COMPLETE, on_complete);  
loader.load(request);  
private function on_complete(e : Event):void{  
       // process
}

src: http://scriptcult.com/subcategory_9/article_442-post-request-data-in-as.htm

note that the loader.load needs the request to be passed

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.