Flashhilfe.de - Flash Community

Ein Array aus PHP an Flash übergeben [Flash 8]

 


AntwortenRegistrieren Seite1  

chricken#1
Benutzerbild von chricken
Beiträge: 65
Registriert: Apr 2004

25.09.2007, 12:25

Moin, ich bin grad dabei, mich in die Bearbeitung von Datenbanken von Flash aus einzuarbeiten.
Und schon scheitere ich an der ersten Hürde.

Ich habe in der Datenbank eine Tabelle, aus der ich einen Teil der Daten auslesen will: id, Vorname und Nachname.
Das habe ich schon einmal erfolgreich gemacht, da hatte die Tabelle aber auch nur eine Zeile.
Nun bekomme ich von der Datenbank ein Array zurück und damit fängt auch schon das Dilemma an. Ich muss also ein Array, das ich in PHP habe an Flash übergeben.
Ich habe es schon soweit begriffen, daß ich das Array als einzelne String-Variable an Flash zurückgeben und da wieder auseinander tüdeln muss.
Dazu sollten die Felder mit einem Trennzeichen (|) in den String geschrieben werden.
Das sieht bei mir so aus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
       
//Connect
       
$mydb mysql_connect("localhost","root","");

       
//Bei Ablehnung
       
if (!$mydb) die ("Konnte keine Verbindung zu mySQL aufbauen");

       
//Datenbank
       
$db=$_POST["firma"];
       if(!
mysql_select_db($db,$mydb)) die ("Konnte keine Verbindung zur Datenbank aufbauen");

       
//Daten aus DB lesen
       //"rs" steht f&uuml;r results bzw die Ausf&uuml;hrung des SQl-Queries
       
$sql "SELECT * FROM kunden";
       
   
$rs mysql_query $sql ) or die ($_POST["firma"]." - Die Daten konnten nicht geladen werden");;
   
//Anfang der String-Variable f&uuml;r Flash
   
echo "&id='";
       
//&Uuml;bergabe der einzelnen Felder in den String
   
while ( $row mysql_fetch_object $rs ) ){
       
$ausgabe $row->id '|';
        echo 
$ausgabe;
    }
       
//Der Echo-Befehl unten sind zwei ' in normalen Anf&uuml;hrungszeichen. Damit sollte der String geschlossen werden
   
echo "'";

       
//Aus Performancegr&uuml;nden Verbindung schliessen
       
mysql_free_result($rs);
       
mysql_close();
?>


Dieses Script wird von Flash aufgerufen.
Das sieht bei mir so aus:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Kundenliste einlesen
//Datenbankabfrage
var kundenlisteSender:LoadVars = new LoadVars();
var ergebnis:LoadVars = new LoadVars();
//Hiermit wird definiert, welche DB verwendet wird
kundenlisteSender.firma = login.firma;

//In dieses Objekt sollen später die Daten geschrieben werden
_global.kundenliste=new Object();
kundenliste.id=[];
kundenliste.nname=[];
kundenliste.vname=[];
      
//wenn Daten abgesendet wurden
ergebnis.onLoad=function(success:Boolean){
   if(success){
        //Ergebnis wird in ein Textfeld geschrieben, um die Korrektheit des Rückgabewertes zu prüfen
      _root.ausgabe+=ergebnis.id;
   }
}   
//Daten senden, die auskommentierte Zeile dient zu Testzwecken, um ein Ergebnis nicht an Flash zurückzugeben, sondern in ein neues Fenster zu laden
//kundenlisteSender.send("scripting/kundenlisteladen.php", "ergebnis", "POST");
kundenlisteSender.sendAndLoad("scripting/kundenlisteladen.php", ergebnis, "POST");
   


Einen ersten Test mit einer Ausgabe an ein weiteres html-Fenster führte zu diesem Ergebnis:

&id='1|2|3|4|5|6|7|8|9|'

Das sieht für mich vielversprechend aus und war auch das, was ich erwartet habe.
Wenn ich aber dieses Ergebnis an Flash zurückgeben wollte bekam ich "undefined" ins Textfeld geschrieben. Und das ist nun mein Problem: Anscheinend kommen die Daten nicht zurück oder ich übernehme sie falsch oder sonst irgendwas.

Bitte hilf mir :(
Geändert von chricken am 25.09.07 um 12:26 Uhr
springer#2
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

25.09.2007, 12:42

du brauchst nicht zwei loadvars. im ersten bekommst du ja schon das resultat:
nicht getestet...

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Kundenliste einlesen
//Datenbankabfrage
var kundenlisteSender:LoadVars = new LoadVars();

//Hiermit wird definiert, welche DB verwendet wird
kundenlisteSender.firma = login.firma;

//In dieses Objekt sollen später die Daten geschrieben werden
_global.kundenliste=new Object();
kundenliste.id=[];
kundenliste.nname=[];
kundenliste.vname=[];
       
//wenn Daten abgesendet wurden
kundenlisteSender.onLoad=function(success:Boolean){
    if(success){
        //Ergebnis wird in ein Textfeld geschrieben, um die Korrektheit des Rückgabewertes zu prüfen
        _root.ausgabe+=kundenlisteSender.id;
    }
}   
//Daten senden, die auskommentierte Zeile dient zu Testzwecken, um ein Ergebnis nicht an Flash zurückzugeben, sondern in ein neues Fenster zu laden
//kundenlisteSender.send("scripting/kundenlisteladen.php", "ergebnis", "POST");
kundenlisteSender.sendAndLoad("scripting/kundenlisteladen.php", ergebnis, "POST");


lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
burnZ#3
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

25.09.2007, 13:06

btw, warum nicht json benutzen? das spart viel tipparbeit und sicherlich peformanter.

und
ActionScript:
1
2
3
4
5
// ... in einer schleife... kundenliste ist ein array
kundenliste.push( { id: dieID, vorname: derVorname, nachname: derNachname } );

// später....
trace( kundenliste[ 4 ].vorname );


erscheint mir "logischer" als
ActionScript:
1
2
3
kundenliste.id=[];
kundenliste.nname=[];
kundenliste.vname=[];


aber das würde sich durch json schon erledigen dann könntest du nämlich einfach direkt aus dem gefetchten mysql result einen json string machen.
Geändert von burnZ am 25.09.07 um 13:10 Uhr
chricken#4
Benutzerbild von chricken
Beiträge: 65
Registriert: Apr 2004

Themenautor/in

25.09.2007, 16:58

Vielen Dank für Eure Antworten.
Leider hat es noch nichts geholfen.
Die Ausgabe ist immer noch undefined, unabhängig davon, ob ich ergebnis.id oder kundenlisteSender.id verwende.
Es ist fast so, als wäre da irgendwo ein Tippfehler, den ich einfach nciht finde oder sowas.
Oder als ob die Daten in einem falschen Format übergeben würden.
*grübel rumprobier*

BurnZ: Danke für den Tipp mit dem Array. Es wäre tatsächlich weniger Code und performanter wäre es sicher auch. Aber mir ist wichtig, daß ich auf die Daten zugreifen kann, ohne mir merken zu müssen, was an dritter oder vierter Stelle ist. Deswegen habe ich mich für ein Objekt entscheiden.

springer#5
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

25.09.2007, 17:05

ActionScript:
1
2
3
4
5
if(success){
trace("successful loaded")
        //Ergebnis wird in ein Textfeld geschrieben, um die Korrektheit des Rückgabewertes zu prüfen
        _root.ausgabe+=kundenlisteSender.id;
    }


mach mal noch ein trace in der onLoad...

wird was ausgegeben?

lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
chricken#6
Benutzerbild von chricken
Beiträge: 65
Registriert: Apr 2004

Themenautor/in

25.09.2007, 17:13

*Jubel*
Habs gefunden
Die Variable Ergebnis habe ich einer anderen DB-Abfrage schonmal verwendet. Die beiden scheinen sich zu beeinflussen (vermutl. Timing).  Also habe ich diese Ergebnis in "kundenlisteergebnis" umbenannt. Und es funzt.
Und Deinen Tipp, lieber Springer, kundenlisteSender für die Rückgabe zu verwenden ist auch super und hat den ganzen Kram nochmal schlanker gemacht - und damit umgehe ich das oben genannte Problem.

Beste Grüße
Chricken

burnZ#7
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

25.09.2007, 17:38

nein du hast 3 arrays, ich habe ein objekt. ausserdem is da nix mit merken - es war nur ein beispiel. später iteriert  man doch eh...


AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de