Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

Kommunikation mellem Flash og PHP

Forord

I denne artikel lærer du hvordan Flash og PHP "kommunikerer" sammen. Dette er min første artikel, og jeg håber den vil blive modtaget godt.

Krav

For denne tutorial skal du et lille kendskab til PHP og Flash/ActionScript.
Det kræves også du har mulighed for at kunne smide nogen PHP-filer ud på en webserver.

Indledning

Når man kommunikere med PHP via Flash, er det faktisk bare variabler man sender imellem Flash og PHP. Når man skal gøre dette, skal man have fat i en funktion der hedder LoadVars(). Med LoadVars() har man mulighed for 3 metoder på at kommunikere med PHP-filer på: send(), load() og sendAndLoad(). Jeg vil i denne artikel gennemgå de 3 metoder.

send()

Først start med at trykke på din frame, og gå ind i Actions eller tryk F9. Der er herinde alt koden foregår.
Først skal vi starte med at lave et array, som skal indholde LoadVars funktionen:
  • var lv = new LoadVars();
Her vælger jeg at kalde min variabel for "lv", men det har du jo din fulde ret til selv at bestemme.
Ved brug af send() metoden, sender vi variabler fra Flash af, og videre til PHP-dokumentet. Når vi bruger send(), skal vi også lave nogen variabler som vi vil sende afsted. Lad mig give et eksempel:
  1. var lv = new LoadVars();
  2. var mitNavn = "Alexander";
  3. var minAlder = "16";
  4. lv.navn = mitNavn;
  5. lv.alder = minAlder;
  6. lv.send("http://www.domain.dk/send.php", "_blank", "GET");
Lad mig gennemgå det:
Linje 1: Laver en variabel til LoadVars.
Linje 2: Her laver vi en variabel til (i dette tilfælde) vores navn.
Linje 3: Her en variabel til vores alder.
Linje 4: For at lave variabler vi vil sende via vores send() metode, skal vi blot skrive navnet på vores LoadVars variabel, og vores navn vi vil have på den variabel vi vil sende af sted. I dette tilfælde vil vi sende en variabel afsted med navnet "navn", og den indholder værdien af vores "mitNavn"-variabel.
Linje 5: Her laver vi en variabel med navnet "alder", som indholder værdien af "minAlder" variablen.
Linje 6: Her bruger vi metoden send() til at få vores dataer sendt med. send() metoden: send(url, window, method). Her sætter du URL'en til det PHP-dokument der skal modtage dataerne med. Vores vindue har vi sat til "_blank", da vi gerne vil have åbnet det i et nyt vindue. Og til sidst method, som jeg har valgt at sætte til GET. Du kan også sagtens vælge at bruge POST, det er helt op til dig.

Det var faktisk opsætningen af Flash-dokumentet. Prøv at hoppe over til Notesblok, så er vi klar til at lave vores modtager-dokument.
I vores flash-fil lavede vi 2 variabler vi sendte afsted. Den ene hed "navn", og den anden "alder". Så i vores PHP-dokument kan vi starte med at skrive:
  1. <?php
  2. $navn = $_GET["navn"];
  3. $alder = $_GET["alder"];
  4. ?>
Som i kan se har jeg lavet 2 variabler, som henter indholdet af $_GET["navn"], og $_GET["alder"]. Grunden til jeg bruger GET, og ikke POST, er fordi vi valgte at bruge metoden GET i vores Flash-dokument:
  1. ...
  2. lv.send("http://www.domain.dk/send.php", "_blank", "GET");
Hvis vi derimod havde skrevet:
  1. ...
  2. lv.send("http://www.domain.dk/send.php", "_blank", "POST");
... ville vores PHP-dokument have skullet se sådan her ud:
  1. <?php
  2. $navn = $_POST["navn"];
  3. $alder = $_POST["alder"];
  4. ?>
Men lad os holde os til GET. Nu kan vi printe indholdet ud i vores php dokument, ved blot at skrive:
  • echo $navn." er ".$alder." år gammel.";
Nu vil vi have et færdigt eksempel af en simpel LoadVars.send() metode. Prøv nu at gå ind i dit flash-dokument, og trykke Test Movie (Ctrl+Enter). Nu åbnes en ny side i din internet browser, hvor der står: "Alexander er 16 år gammel.".
Færdige filer:
Flash:
  1. var lv = new LoadVars();
  2. var mitNavn = "Alexander";
  3. var minAlder = "16";
  4. lv.navn = mitNavn;
  5. lv.alder = minAlder;
  6. lv.send("http://www.domain.dk/send.php", "_blank", "GET");
PHP:
  1. <?php
  2. $navn = $_GET["navn"];
  3. $alder = $_GET["alder"];
  4. echo $navn." er ".$alder." år gammel.";
  5. ?>
Husk at rette stien i "lv.send()" til der hvor din PHP-fil nu ligger.

load()

På samme måde som at sende variabler til et PHP-dokument, har vi også mulighed for at trække variabler ud af et PHP-dokument.
Som I alle sikkert lagt mærke til, står der nogen gange i en browser: domain.dk/?page=forside&sprog=dansk. Her er alt efter spørgsmålet faktisk variabler gemt i urlen. Dvs: page=forside&sprog=dansk faktisk kan trækkes ud via et PHP-dokument:
  1. echo $_GET["page"]; // vil skrive "forside"
  2. echo $_GET["sprog"]; // vil skrive "dansk"
På samme måde skriver man også variabler tilbage til flash på. Prøv at lave et nyt PHP-Dokument, og skriv:
  1. <?php
  2. $mitNavn = "Alexander";
  3. $minMad = "pizza";
  4. echo "navn=".$mitNavn."&mad=".$minMad;
  5. ?>
Her laver vi 2 variabler (mitNavn og minMad), og skriver dem ud, så de er klar til at blive hentet i flash. Hvis du prøver at åbne dokumentet, vil resultatet blive "navn=Alexander&mad=pizza". Den skarpe person vil nok have gennemskuet, at det faktisk er på samme måde man gemmer variabler i en browser på!
Lad os dog hoppe over i flash, og se hvordan vi hiver de dataer ud på!
Vi starter igen med at lave en variabel til LoadVars:
  • var lv = new LoadVars();
Herefter loader vi det PHP-dokument vi vil loade ind, i vores LoadVars variabel:
  1. var lv = new LoadVars();
  2. lv.load("dinFil.php");
Godt så. Nu vil vi have variablerne hentet ud fra PHP-dokumentet. Men det kan vi først gøre, når php-filen er helt loadet ind (det er jo klart). For at finde ud af om filen er loadet helt ind, er der lavet en funktion der hedder onLoad. Det lyder sikkert forvirrende, så lad mig vise det:
  1. var lv = new LoadVars();
  2. lv.load("dinFil.php");
  3. // filen er ikke blevet loadet endnu
  4. lv.onLoad = function() {
  5.     // nu er filen loadet ind!
  6. }
  7. // filen er heller ikke blevet loadet endnu
Så faktisk ALT... og jeg mener ALT hvad vi foretager os vi snakker om at loade filer ind, skal foregå inde i "onLoad" funtionen! Husk det. :-)
Vi har 2 variabler i vores PHP-fil, en der hedder "navn" og en der hedder "mad". For at hente dem ud, kunne vi bruge funktionen trace(). Dette er blot en funktion, som printer noget tekst ud i dit Output-panel i Flash. Vi kunne f.eks. trække variablen navn ud fra php-dokumentet (som vi har sat til at være "Alexander"):
  1. var lv = new LoadVars();
  2. lv.load("dinFil.php");
  3. lv.onLoad = function() {
  4.     trace(this.navn);
  5. }
Ved trace(this.navn) fortæller vi, at den skal trace den variabel, der hedder navn ud, som vi har stående i vores php-dokument. "this" henfører til "lvl". Så om vi skriver: "this.navn" eller "lv.navn" er ligegyldigt. Det samme kan vi gøre hvis vi vil have indholdet af "mad" ud på. Her skriver vi blot:
  1. var lv = new LoadVars();
  2. lv.load("dinFil.php");
  3. lv.onLoad = function() {
  4.     trace(this.mad);
  5. }
Vi kunne også gøre den mere spændende og skrive:
  1. var lv = new LoadVars();
  2. lv.load("dinFil.php");
  3. lv.onLoad = function() {
  4.     trace("Jeg hedder "+this.navn+", og jeg er glad for "+this.mad+"!");
  5. }
Som ville give resultatet: "Jeg hedder Alexander, og jeg er glad for pizza!". Ligesom vi bruger punktummer i PHP til at få variabler ind i en string på, bruger vi blot pluds-tegn i Flash.
Færdige filer:
Flash:
  1. var lv = new LoadVars();
  2. lv.load("dinFil.php");
  3. lv.onLoad = function() {
  4.     trace("Jeg hedder "+this.navn+", og jeg er glad for "+this.mad+"!");
  5. }
PHP:
  1. <?php
  2. $mitNavn = "Alexander";
  3. $minMad = "pizza";
  4. echo "navn=".$mitNavn."&mad=".$minMad;
  5. ?>
Husk at ændre stien til dit navn i "lv.load()".

sendAndLoad()

sendAndLoad() er så en blanding af de 2 måder vi har gennemgået. Så nu har vi faktisk bruger for både en LoadVars til at håndtere det vi sender, og en til at håndtere de variabler vi vil modtage. Vi starter med at lave 2 variabler til vores LoadVars:
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
Lad os lige lave de variabler vi vil sende afsted:
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
  3. var minHobby = "Computer";
  4. sender.hobby = minHobby;
Og det er her vores sendAndLoad() funktion kommer på. Den kører efter: sendAndLoad(url, targetObject, method). Prøv at følg med her:
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
  3. var minHobby = "Computer";
  4. sender.hobby = minHobby;
  5. sender.sendAndLoad("fil.php", loader, "GET");
URL'en er sat til hvorend du nu smider din PHP fil hen (som vi laver om lidt). targetObject, er det hvor de MODTAGENDE variabler skal tilføjes til. Her tilføjer vi dem til vores variabel "loader". Og så vores metode, som jeg har sat til GET. Her kan du også sætte den til POST.
Nu vil jeg ikke gå videre med koden lige nu, for først vil jeg kode på vores PHP-dokument. Åben notesblok, og skriv følgende:
  1. <?php
  2. $hobby = $_GET["hobby"];
  3. if ($hobby == "Computer") {
  4.     $msg = "Ja, computer er også en sjov ting.";
  5. }
  6. else if ($hobby == "Fodbold") {
  7.     $msg = "Fodbold, wauw. Ja det er faktisk også hammer sjovt.";
  8. }
  9. else {
  10.     $msg = "Det lyder også som en god hobby.";
  11. }
  12. echo "msg=".$msg;
  13. ?>
Koden er ikke så advanceret. Den tjekker om hobbyen endten er sat til Compter, Fodbold eller noget andet. Herefter får man et resultat der vil give: "msg=En af de 3 værdier". Dette er nu klar til at blive smidt tilbage til flash. Vi har nemlig lige lavet en ny variabler til flash, som hedder "msg". Smid filen ud på din server, og lad os hoppe tilbage til flash!
Vores kode ligenu i flash er denne:
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
  3. var minHobby = "Computer";
  4. sender.hobby = minHobby;
  5. sender.sendAndLoad("fil.php", loader, "GET");
Og nu skal vi bare have informationerne ud fra PHP-dokumentet. Ved vores kode har vi sat targetObject til "loader" (der hvor vores MODTAGENDE variabler gemmes ned i). Så for at få disse ud, skal vi lave en onLoad funktion til loader!
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
  3. var minHobby = "Computer";
  4. sender.hobby = minHobby;
  5. sender.sendAndLoad("fil.php", loader, "GET");
  6. loader.onLoad = function() {
  7. }
For som vi så med load() funktionen, kan vi ikke trække data ud før dokumentet er 100% loadet ind. Så nu kan vi faktisk trække vores "msg" variabel ud fra vores PHP-dokument, ved blot at skrive:
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
  3. var minHobby = "Computer";
  4. sender.hobby = minHobby;
  5. sender.sendAndLoad("fil.php", loader, "GET");
  6. loader.onLoad = function() {
  7.     trace(this.msg);
  8. }
Du har du fået vist indholdet af variablen "msg" fra PHP-dokumentet i Output-panelet.
Færdige filer:
Flash:
  1. var sender = new LoadVars();
  2. var loader = new LoadVars();
  3. var minHobby = "Computer";
  4. sender.hobby = minHobby;
  5. sender.sendAndLoad("fil.php", loader, "GET");
  6. loader.onLoad = function() {
  7.     trace(this.msg);
  8. }
PHP:
  1. <?php
  2. $hobby = $_GET["hobby"];
  3. if ($hobby == "Computer") {
  4.     $msg = "Ja, computer er også en sjov ting.";
  5. }
  6. else if ($hobby == "Fodbold") {
  7.     $msg = "Fodbold, wauw. Ja det er faktisk også hammer sjovt.";
  8. }
  9. else {
  10.     $msg = "Det lyder også som en god hobby.";
  11. }
  12. echo "msg=".$msg;
  13. ?>
Husk at ændre stien til dit navn i "sender.sendAndLoad()".

Slut

Du burde nu være i stand til at "kommunikere" mellem Flash og PHP. Hvis du nu syntes at denne artikel ikke hjalp dig, vil jeg blot sige, at det er jeg ked af. Jeg har gjort det bedste for at kunne forklare dette grundigt. Jeg tager meget gerne imod ris/ros! :)

Jeg har helt sikkert lavet mange stavefejl - men hvis de er så slemme, så sætningen slet ingen mening giver, så kom lige og sig det. Tak. :)

Ha' en fortsat god dag!
Sidst redigeret 19:12 19/10/2008
Oprettet af:

Flash/ActionScript

Point modtaget: 200

Rate:
18:23 18/10/2008

Kommentarer

Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
God artikel.
Dog kender jeg ikke så meget til flash. Men det ser da fint ud :)
Oprettet af:
  Mail
19:50 19/10/2008
Sejt nok - jeg er lige begyndt på flash, så det er det rette tidspunkt den her artikel kom ud på ;)..
Oprettet af:
  Mail
20:16 20/10/2008
Ja man skal nok lige have det lidt grundlæggende teori bag ActionScript inden man læser denne. :)
Oprettet af:
  Mail
20:55 20/10/2008
Skal jeg nok læse engang.. :D Skal rode mig ud i noget war halløj hvor man kan skade hinanden med noget random php shit :P Men den ser sku god ud, TAK!
Har ventet på sådan en artikel længe..
Oprettet af:
  Mail
18:47 22/10/2008
Hvorfor beskriver du ActionScript 2.0 måden?
Det er de færreste der bør lære AS 2.0, når 3.0 har været på gaden i snart lang tid???
Oprettet af:
  Mail
15:45 23/10/2008
Jeg sidder stadig i Flash 8. :<
Oprettet af:
  Mail
17:52 23/10/2008
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes