Avatar billede Slettet bruger
12. april 2005 - 01:23 Der er 5 kommentarer

Arrays fra PHP til Flash

Hej eksperter.

Jeg har en Flash-fil, der skal hente en stribe resultater fra en database.
Flash skal sende variablen "side" til getdesigns.php. PHP-filen skal herefter kigge databasen igennem og returnere en stribe variabler. Jeg vil gerne have den returneret i en array eller lignende, eftersom variablen "antalvises" - der p.t. er 6 men godt kan antage en anden værdi på sigt - ligeledes skal kunne sendes fra Flash, hvorfor det så ikke er smart at sende 6 forskellige variabler tilbage.


****** Flash-kode ******
System.useCodepage = true;

var rstring = new LoadVars();
    rstring.side = 1;
rstring.sendAndLoad("http://www.website.dk/getdesigns.php",rstring,"POST");
    rstring.onLoad = function(){
    // HVAD GØR JEG NU?
    };

****** Flash-kode slut ******


Kommentar til "hvad gør jeg nu?": OK, PHP-filen er kaldt, data hentet og der er nu returneret et array til Flash, der eksempelvis indeholder tallene 11,45,46,88,102,180. Det, der nu skal ske, er at en løkke gennemløber listen - og for hver eneste tal skal tilsvarende jpg.fil vises - altså som følger:
loadMovie("uploaddir/TAL.jpg","designs_mc.designs_instance");


****** PHP-kode - getdesigns.php ******
<?php
    include("connect.php");  // indeholder min database-forbindelse
   
    $side = $_POST['side'];  // variablen, der blev sendt fra Flash
   
    $kategori = 0; // Midlertidig variabel
    $antalvises = 6; // Angiver, hvor mange der skal vises. Er p.t. hardcoded, men skal på sigt sendes fra Flash
   
    $sidebund = $side * $antalvises + 1; // Nedre tærskel for selection
    $sidetop = ($side + 1) * $antalvises + 1; // Øvre tærskel for selection
   
    $alleelementer = mysql_query("SELECT element_id FROM element WHERE kategori_id = '$kategori' AND element_id >= '$sidebund' AND element_id < '$sidetop'");
   
    $returvar = array($side); // Opret nyt array. Hele molevitten skal sendes tilbage til flash
   
    for ($i=0; $i<$antalvises; $i++) {
        $elementet = mysql_fetch_array($alleelementer); // Af de resultater der er hentet - udskil da det første.
        $returvar[$i] = $elementet['element_id']; // Tilføj hvert resultat til array'et

}

echo "&returvar=$returvar"; // Dette er linien, der sender array'et tilbage til flash. Returvar er et array.
?>
****** kode slut ******


Opsummering: PHP-filen virker fint. Det er de rigtige resultater, der hentes og echoes tilbage til Flash - men jeg kan ikke helt greje, hvordan man så HÅNDTERER det array, der bliver sendt til Flash.

Kan nogen hjælpe?
Avatar billede barklund Nybegynder
12. april 2005 - 01:40 #1
Du finder nok ikke mange her, der forstår flash og actionscript - men jeg gør dog :)

Og du kan jo bare gøre det ved at sende variablerne:

antal=3&var_1=hej&var_2=flaf&var_3=boing

Så sender du først en variabel der siger, at der sidenhen kommer 3 variabler.

Men du kan også gøre det ved at konkatenere id'er med et komma immelem. Så kan du bare konvertere det til et array i flash ved at bruge split(), løbe arrayet igennem, oprette nye movieclips og loade billederne:

var rstring = new LoadVars();
rstring.side = 1;
rstring.sendAndLoad("http://www.website.dk/getdesigns.php",rstring,"POST");
rstring.onLoad = function(){
    var mc, ids = this.returvar.split(",");
    for (var i = 0; i < ids.length; i++) {
        mc = _root.createEmptyMovieClip("foo_"+i, i);
        // flyt mc på plads via x og y
        mc.loadMovie("uploaddir/"+ids[i]+".jpg");
    }
};

Så vil der ske noget :)

--
Morten Barklund
Avatar billede Slettet bruger
12. april 2005 - 16:06 #2
Tjo og tja - det der sker (ved array-løsningen), er at den forsøger at åbne "array.jpg" - og dermed giver en fejlmelding.
Når jeg prøver at indtaste (under mc.loadMovie etc): trace(ids[i]), blot for at teste output, skriver den: array.

PHP-filen ligger i øvrigt på http://www.b-seen.de/getdesigns.php
Avatar billede olebole Juniormester
12. april 2005 - 18:36 #3
<ole>

Du kan *ikke* sende et array til actionscript - ikke som array, that is  :)
Du må enten sende det som enkelt-variabler - som bjarklund viser - eller som en komma-delimiteret streng (hvis der er tale om et tal-indekseret, 0-baseret array).

Ellers kunne du også serialisere arrayet i PHP og skrive en modsvarende unserialize-funktion i actionscript.

Hovedsagen er, du ikke sender arrayet som et PHP-array - for det forstår actionscript ikke.

/mvh
</bole>
Avatar billede olebole Juniormester
12. april 2005 - 18:38 #4
barklund >> Du har sikkert ret i, vi nok ikke er så mange, men helt alene er du nu ikke  ;o)
Avatar billede Slettet bruger
12. april 2005 - 19:31 #5
Cool - nu virker det, monsieur Bjarklund. Jeg havde - set i bakspejlet - tidligere ikke 100% fanget din metode med komma-konkatenering. Men hvis du lige sender en tom besvarelse frem for kommentar, kan du få dine point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester