Macromedia Flash Professional 8 UNLEASHED [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Macromedia Flash Professional 8 UNLEASHED [Electronic resources] - نسخه متنی

David Vogeleer, Eddie Wilson, Lou Barber

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید






PHP and FlashReceiving Data


As stated before, integrating Flash with PHP will allow us to create some pretty dynamic applications. We aren't quite there yet, so let's start with some simple examples of how Flash can receive data from PHP.

Example 1Hello World


In our first example we will use the most common of examples, displaying the text Hello World. Here our PHP file will already contain the variable and send it to Flash to be displayed. Create a new PHP file, save it as

helloWorld.php , and paste the following script inside:


<?php
echo "myVariable=Hello World";
?>

See a difference? In this example, not only are we displaying "Hello World," but we are saying that it is the value of "myVariable." The reason for this is that Flash will understand only the data in the name/value pair format. Now that we have the PHP script created, let's move on to our Flash file.


1.

Create a new Flash file, save it as

helloWorld.fla , and save it to the same directory as helloWorld.php on your server.

2.

In the Actions panel of the first frame, place this code inside:


//Create a text field
this.createTextField("display_txt",1,0,0,100,20);
//The LoadVars object for loading the data
var hello_lv:LoadVars = new LoadVars();
//When the LoadVars object receives the data
hello_lv.onLoad = function(success){
if(success){
display_txt.text = this.myVariable;
}else{
trace("An error has occurred.");
}
}
//Load the PHP
hello_lv.load("http://PATH_TO_YOUR_SERVER/helloWorld.php");


Walking through the ActionScript, we can see that we have created a dynamic text field in the top-left corner of the canvas. We then create an instance of the LoadVars object, which will be used to connect to the PHP page and receive the data. The onLoad event is then created to tell Flash what to do when the requested data is returned. In it we test the value of success to see if there were any issues connecting to our PHP page. If success returns true, it will write the myVariable value to our text field, and if not it will display "An error has occurred" in the Output panel. Now all we have to do is make the request using the load method by passing it the full path to your helloWorld.php file.

Publish your movie, and if you run the generated SWF you should see the following result, as shown in Figure 22.1:

Figure 22.1. The result of our "Hello World" example.

NOTE

When you are using PHP with Flash, we recommend using an absolute path to access your PHP files. This ensures that no matter where your Flash files are on the server, you can still access the PHP files. In the preceding example, as well as in the following examples, you will need to change "PATH_TO_YOUR_SERVER" to the actual path to your PHP scripts. You may be working from the root of your server or within a directory, so customize the paths respectively.

Example 2Hello, Goodbye World


In this example we will be passing two variables instead of one. These variables will be displayed in different text fields.


1.

Create a new PHP file, save it as

helloGoodbye.php , and paste the following script inside:


<?php
echo "myVariable1=Hello World&myVariable2=Goodbye World";
?>

As you can see, the PHP script is identical to example1 except for one small thing: We are now passing two variables instead of one. To pass numerous variables, we place an ampersand (&) between the name/value pairs.

2.

Create a new Flash file, save it as

helloGoodbye.fla , and save it to the same directory as helloGoodbye.php on your server.

3.

In the Actions panel of the first frame, place this code:


//Create a text field
this.createTextField("displayHello_txt",1,0,0,100,20);
this.createTextField("displayGoodBye_txt",2,0,40,100,20);
//The LoadVars object for loading the data
var hello_lv:LoadVars = new LoadVars();
//When the LoadVars object receives the data
hello_lv.onLoad = function(success){
if(success){
displayHello_txt.text = this.myVariable;
displayGoodBye_txt.text = this.myVariable;
}else{
trace("An error has occurred.");
}
}
//Load the PHP
hello_lv.load("http://PATH_TO_YOUR_SERVER/helloGoodbye.php");


Walking through the ActionScript, you can see that we are now creating two dynamic text fields in the top-left corner of the canvas, 20 pixels apart. Notice that we place them on separate levels; otherwise, the next field will wipe out the preceding field. After success returns true, we will write the two variables we have received to their respective fields. Now all we have to do is make the request using the load method by passing it the full path to your helloGoodbye.php file.

Publish your movie, and if you run the generated SWF, you should see the result shown in Figure 22.2:

Figure 22.2. The result of our "Hello, Goodbye World" example.

Example 3Multiple Values and Multiple Variables


In this example, we will work with multiple variables, like example 2. The difference is that the variables in this example will have multiple values. Instead of using a name/value pair for each variable, we can place multiple values into one variable.

In this example we have three people. Each person has a name, age, and weight. If we did this with individual variables it would take a total of nine variables. Instead we pass three variables, one for name, one for age, and one for weight, and let Flash do the work of parsing the values. Create a new PHP file, save it as

multipleValues.php , and paste the following script inside:


<?php
//Arrays that hold the values
$personName = array("Rick", "Jane", "Andy");
$personAge = array("12", "13", "11");
$personWeight = array("115", "103", "105");
//Loop through the array and store the values in new variables
for($i=0;$i<count($personName);$i++){
$sentName .= $personName[$i] . "~";
$sentAge .= $personAge[$i] . "~";
$sentWeight .= $personWeight[$i] . "~";
}
//Write the results to the screen
echo "sentName=$sentName&sentAge=$sentAge&sentWeight=$sentWeight";
?>

Because we are working without a database, our information is currently stored in arrays. We cannot pass these arrays directly to Flash, so we loop through them and store the data as a string into new variables, separated by the tilde (~) character. Finally, we write the information to the browser. If you test this page alone on your server, you should see what is shown in Figure 22.3:

Figure 22.3. Data written to the browser.

[View full size image]

Now we can move on to the Flash component of this example. We need to create a file that will draw this data in, parse it back into arrays, and then write it to the text fields we create.


1.

Create a new Flash file, save it as

multipleValues.fla , and save it to the same directory as multipleValues.php on your server.

2.

In the Actions panel of the first frame, place this code:


//Create the text fields
this.createTextField("name_txt",1,20,20,100,100);
this.name_txt.multiline = true;
this.name_txt.border = true;
this.createTextField("age_txt",2,130,20,100,100);
this.age_txt.multiline = true;
this.age_txt.border = true;
this.createTextField("weight_txt",3,240,20,100,100);
this.weight_txt.multiline = true;
this.weight_txt.border = true;
//The LoadVars object for loading the data
var multipleValues_lv:LoadVars = new LoadVars();
//When the LoadVars object receives the data
multipleValues_lv.onLoad = function(success){
if(success){
var name_array = this.sentName.split("~");
var age_array = this.sentAge.split("~");
var weight_array = this.sentWeight.split("~");
//Because of the extra "~", there is an extra element
//so we only need every element, but the last one
var tempLength = name_array.length - 1;
for(i=0;i<tempLength;i++){
name_txt.text += name_array[i] + newline;
age_txt.text += age_array[i] + newline;
weight_txt.text += weight_array[i] + newline;
}
}else{
trace("An error has occurred.");
}
}
//Load the PHP
multipleValues_lv.load("http://PATH_TO_YOUR_SERVER/multipleValues.php");


The ActionScript for this example is slightly different from the previous examples. First, we create the text fields, but because they are going to be holding multiple strings, we make them multiline. We also give them a border so we can see their size and placement. Next we use the LoadVars object, but the difference is how we handle the data that is returned. First we create three arrays and store the incoming data into those arrays by splitting the values based on the ~ character. Then we look through the arrays and populate the text fields with the values returned. Finally, we call the PHP page to get the process going. If you test the movie, you should see the results shown in Figure 22.4:

Figure 22.4. The text fields populated with the parsed data.

As you can see, it's easier to store multiple values into a single variable and allow Flash to parse that data, instead of handling individual variables for each value.

Example 4Sending Mail with Flash and PHP


The first three examples have no real-world application, but they give you a basis for understanding how to integrate Flash and PHP. This next example will show you how to send a simple email using Flash as the interface and using PHP to process the email. Create a new PHP file, save it as

sendMail.php , and paste the following script inside:


<?php
//Get the external variable
$destMail = $_REQUEST["destMail"];
$senderName = $_REQUEST["senderName"];
$senderMail = $_REQUEST["senderMail"];
$senderSubject = $_REQUEST["senderSubject"];
$senderBody = $_REQUEST["senderBody"];
//Add header information
$header = "From: $senderName <$senderMail>\n";
$header .= "Reply-To: $senderName <$senderMail>\n";
//Send Email (to, subject, body, header)
mail($destMail, $senderSubject, $senderBody, $header);
?>

As you can see, the script is very straightforward. This page will first accept the five variables passed to it:

  • destMail
    Destination email address

  • senderName
    Name of the sender

  • senderMail
    Email address of the sender

  • senderSubject
    Subject of the email

  • senderBody
    Body of the email


Then we format the header information for the email (the sender's name and email address) and use the mail function to send the email. Now we can move on to the Flash part of this example. We need to create a file that will allow a user to enter in the five pieces of information and submit them to the page we just created.


1.

Create a new Flash file, save it as

sendMail.fla and save it to the same directory as sendMail.php on your server. Create five text fields and place them on the canvas, aligned vertically.

The first field should have the following properties:


  • Type
    Input


  • Show border around text
    true


  • Font size
    12


  • Instance name
    destEmail_txt


The second field should have the following properties:


  • Type
    Input


  • Show border around text
    true


  • Font size
    12


  • Instance name
    senderName_txt


The third field should have the following properties:


  • Type
    Input


  • Show border around text
    true


  • Font size
    12


  • Instance name
    senderEmail_txt


The fourth field should have the following properties:


  • Type
    Input


  • Show border around text
    true


  • Font size
    12


  • Instance name
    senderSubject_txt


The fifth field should have the following properties:


  • Type
    Input


  • Show border around text
    true


  • Font size
    12


  • Instance name
    senderBody_txt

2.

Create a button symbol and place it below the text fields. The button should have the following properties:


  • Instance name
    send_btn


You may format, label, and color your file however you like. Your basic layout should look, in some way, like Figure 22.5 :

Figure 22.5. The mail interface laid out and labeled.

Now that we have our interface laid out, we need to do two things. First, we need to create a way that the Submit button will not pass the variables unless all the text fields are filled out. Second, we need to write the actual script to pass the information from these text fields to the PHP script. In the Actions panel of the first frame, place this code:[View full width]

//Add a listener to make sure fields are filled
//If all fields are filled enable button
fieldsFilled = new Object();
fieldsFilled.onKeyUp = function(){
if(destMail_txt.text != '' && senderName_txt.text != '' && senderMail_txt.text !=
'' && senderSubject_txt.text != '' && senderBody_txt.text != ''){
send_btn.enabled = true;
} else {
send_btn.enabled = false;
}
}
//Apply the listener, and disable the button on init
Key.addListener(fieldsFilled);
send_btn.enabled = false;
//The object for communicating with the PHP page
var sendMail_lv:LoadVars = new LoadVars();
send_btn.onRelease = function(){
//set the variables we are sending
sendMail_lv.destMail = destMail_txt.text;
sendMail_lv.senderName = senderName_txt.text;
sendMail_lv.senderMail = senderMail_txt.text;
sendMail_lv.senderSubject = senderSubject_txt.text;
sendMail_lv.senderBody = senderBody_txt.text;
//send and receive the data
sendMail_lv.sendAndLoad("http://PATH_TO_YOUR_SERVER/sendMail.php", sendMail_lv, "POST");
}

In the preceding code, we start with the field requirements. Because we need all five pieces of the information, we create a listener (fieldsFilled) that checks to see whether all field fields are not empty. If they all contain some sort of text, then send_btn is enabled. We then create the LoadVars object (sendMail_lv) that we will use to pass the variables. Then we create a function and attach it to the onRelease event of send_btn. This function grabs the values of the five text fields, places them in the LoadVars object, and then calls the sendAndLoad event to pass the data to our PHP page.

Now that you have a good understanding of how to send data to PHP from Flash, let's work on PHP sending some data back to Flash.

/ 318