Zurück   Flashforum > Flash und Server > Flash Remoting

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-02-2006, 11:09   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Question Daten mit AMFPHP, PHP und MySQL durch AS2 auslesen und an Flash übergeben

Hallo Leute,

ich weiß ja sonst kein anderes Forum an das ich mich wenden soll!
Vielleicht bekomme ich ja diesmal eine Antwort?!

Ich möchte gerne mittels amfphp Daten aus einer MySql Datenbank auslesen und an Flash übergeben.

Mein Ansatz ist:

Die ServicePHP Datei im Service Ordner =>
PHP-Code:
<?php

//
class Test
{

private  
$db_host 'localhost';
private  
$db_user 'user';
private  
$db_password 'pw';
private  
$db_db 'db';

    function 
Test()
    {

        
$this->conn mysql_pconnect($this->db_host$this->db_user$this->db_password);
         
mysql_select_db ($this->db_db);

        
$this->methodTable = array
        (

            
"returnString" => array(
                
"description" => "Gibt eine Zeichenkette zurück",
                
"access" => "remote"
            
),

            
"frMethod" => array
            (
                
"description" => "Gibt ein Array zurück",
                
"access" => "remote"// available values are private, public, remote
                
"arguments" => array ("")
            )
        );
    }
    
//
    
function returnString ($in) {
        return 
"You said '$in'!";
    }

    
//
    
function frMethod ()
    {
        return 
mysql_query("SELECT `content_title`, `content_text` FROM `content_manager` WHERE `content_group` = '0' ORDER BY `content_id`");
    }

}

?>
als zweites habe ich es über eine Klassendatei angesprochen =>
PHP-Code:

import mx
.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
import mx.remoting.RecordSet;
import mx.remoting.DataGlue;
import mx.utils.Delegate;
import mx.remoting.debug.NetDebug;

class 
Xtc
{
    
//Lege die gateway URL in der Variablen gatewayUrl fest
    
private var gatewayUrl:String "http://localhost/flashservices/gateway.php";
    private var 
service:Service;
    
//private var newArray:Array;

    
function Xtc()
    {
        
NetDebug.initialize();
        
this.service = new Service(this.gatewayUrlnull"Xtcommerce"nullnull);
        
    }

    
// anzusprechende Funktionen Anfang
    //Gibt eine Zeichenkette zurück
    
function returnString(message)
    {
        var 
pc:PendingCall service.returnString(message);
        
pc.responder = new RelayResponder(this"handleReturnString""handleRemotingError");
    }
    
    
    
//Gibt ein Array zurück
    
function frMethod()
    {
        var 
pc:PendingCall service.frMethod();
        
pc.responder = new RelayResponder(this"handleFrMethod""handleRemotingError");
    }
    
// anzusprechende Funktionen Ende
    // handling der Funktionen
    
function handleReturnString(re:ResultEvent):Void
    
{
        
trace(re.result);
        
_root.createTextField("tf",1,0,0,100,12);
        var 
tf:TextField _root.tf;
        
tf.autoSize "left";
        
tf.text String(re.result);
    }

    
    function 
handleFrMethod(re:ResultEvent)
    {
        
trace(re.result.length); // in der db sind 3 Datensätze über trace bekomme ich die Zahl drei zurück
    
}
    
    function 
handleRemotingErrorfault:FaultEvent ):Void
    
{
        
NetDebug.trace({level:"None"message:"Error: " fault.fault.faultstring });
    }

und zu guter letzt möchte ich es in der Flash Datei ausgeben =>

PHP-Code:
_root.news = new Xtc(); 
_root.news.returnString(ja servus!); //funktz gut!
_root.news.frMethod(); 
Also die Menge der Datensätze bekomme ich zurück, schööön!

Hilft mir aber nicht!

über
PHP-Code:
    function handleFrMethod(re:ResultEvent)
    {
        
trace(re.result);
    } 
bekomme ich dann [objekt objekt]
ich möchte aber gerne ein verschachteltes Array mit den Datensätzen haben?!
So in der Art:
PHP-Code:
newArray = [[content_title1 => content_text1],[content_title2 => content_text2],[content_title3 => content_text3]] 
vielleicht kann mir ja jemand mal die korrekte Schreibweise in AS2 geben oder mir zumindestens helfen?!

Wäre wirklich dringend! Arbeite nun schon mehrere Wochen an diesem Mist.

Ich finde immer nur Bsp. mit CFC und das möchte ich nicht verwenden.
crashT ist offline   Mit Zitat antworten
Alt 23-02-2006, 13:02   #2 (permalink)
FMK
O.o rly ?!
 
Benutzerbild von FMK
 
Registriert seit: Oct 2005
Beiträge: 130
Guck dir das hier an , da wir auch mit ner db über flash und xml kommuniziert !

Ich hab dadurch ales gelernt was ich zu Kommunkikation brauchte http://flashstar.de/tutlist/redirect...lashhighv2.zip


MFG
FMK
FMK ist offline   Mit Zitat antworten
Alt 23-02-2006, 16:14   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@FMK

Danke erst einmal für die Antwort!

Nach einem kurzen drüber schauen sehe ich das ihr die ausgelesenen Daten in eine XML Datei packt und diese dann über loadVar in Flash einlest.

Das ist etwas das auch gut funktioniert.

Ich möchte allerdings gerne die Funktion in AMFPHP verstehen, darum bräuchte ich immer noch jemanden der mir mal ein Bsp. mit oben genannter Konfig schreibt. Wäre also toll wenn sich noch jemand finden würde.
crashT ist offline   Mit Zitat antworten
Alt 23-02-2006, 16:30   #4 (permalink)
mo#
interface.group
 
Registriert seit: Jan 2006
Beiträge: 37
ist doch schon mal super, brauchst ja nur noch die Interpretation der
Daten zu programmieren, dann steht es doch.

Hier mal ein kleiner Ansatz zur Auswertung der gelieferten
Daten. Das sollte Dir den nötigen Denkanstoss für Deine
Strukturen liefern:


PHP-Code:
function processAMFPHP_Result(rs) {
    var 
rsr rs.result;
    var 
cant rsr.length;
        
    for(var 
i=0i<canti++) {
            
//trace(rsr.getItemAt(i).Name);
            
shopCategories[rsr.getItemAt(i).Pid] = {
                
Namersr.getItemAt(i).Name 
                
idrsr.getItemAt(i).Pid,
                
Imagersr.getItemAt(i).Image
            
};
    }

Viel Erfolg



mo#
mo# ist offline   Mit Zitat antworten
Alt 24-02-2006, 09:41   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@mo

Danke für dein Codebsp. Aber könntest du das vielleicht kurz an mein Bsp. anpassen und mir mitteilen wo genau ich es hinsetzen muss? Und wie ich es in der Flash Datei zurück bekomme???

Irgendwie stehe ich im Moment ziemlich neben mir.

Ich möchte gerne verstehen wie es insgesamt funktioniert, damit ich mir so dumme Fragen in Zukunft sparen kann!

Ich habe es im Moment erst einmal so verbaut:

PHP-Code:
    function handleFrMethod(re:ResultEvent)
    {
    var 
rsr re.result
    var 
cant re.result.length
         
        for(var 
i=0i<canti++) { 
            
//trace(rsr.getItemAt(i).Name); 
            
news[rsr.getItemAt(i).Pid] = { 
                
titelrsr.getItemAt(i).titel ,  
                
inhaltrsr.getItemAt(i).inhalt
            };
        };
    } 
das ist mein erster Ansatz, muss aber gleich mal weg und komme vor Samstag Abend leider nicht wieder. Ich möchte wie schon geschrieben, verstehen was ich da tue!

Könnte mir vorstellen, das ich im FlashMovie dann ein Array news zur Verfügung habe???

beim schreiben und überlegen ist dann noch dieser Denkansatz heraus gekommen:

PHP-Code:
    function handleFrMethod(re:ResultEvent)
    {
    var 
rsr re.result
    var 
cant re.result.length
         
        for(var 
i=0i<canti++) { 
            
//trace(rsr.getItemAt(i).Name); 
            
news[rsr.getItemAt(i).content_management] = { // muss mit dem Namen aus dem mysql_query angesprochen werden
                
titelrsr.getItemAt(i).content_titel,  // hier auch mysql_query name
                
inhaltrsr.getItemAt(i).content_text,  // hier auch mysql_query name
            
};
        };
    } 
habe ich es so richtig verstanden?
crashT ist offline   Mit Zitat antworten
Alt 24-02-2006, 12:40   #6 (permalink)
mo#
interface.group
 
Registriert seit: Jan 2006
Beiträge: 37
Zitat:
habe ich es so richtig verstanden?
würde sagen ja.

Wollte Dir damit auch nur zeigen, wie Du Zugriff auf die übertragenen
Daten erhältst. Man muss die Daten nicht unbedingt noch mal in ein Array
parsen.

Mir ging es nur darum, Dir zu zeigen, wie Du mit "rs.result.getItemAt(i)"
an einen Eintrag der von Remoting gelieferten Daten kommst.


gruss


mo#
mo# ist offline   Mit Zitat antworten
Alt 26-02-2006, 17:50   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@mo

Also, erst einmal noch vielen Dank für deine Hilfe!

///

Habe trotzdem noch ein zwei Fragen.

Wofür steht das "rs" oder "re"? // = re:ResultEvent = Ergebnissvariable??? Array???

Was kommt da als result an? - ... ein Array?(Ich denke ja?!)
Sind die Werte dann Attribute oder eigenständige Arrays?

getItemAT = Attribute der ersten Arrayebene?
getItem = erste Arrayebene?

Kannst du mir da vielleicht noch helfen?

Vielen Dank crashT

Geändert von crashT (26-02-2006 um 17:52 Uhr)
crashT ist offline   Mit Zitat antworten
Alt 26-02-2006, 18:33   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@mo

habe das ganze jetzt mal kurz ausprobiert.

Wenn ich in meiner AS Datei folgendes drin habe.
PHP-Code:
    function handleFrMethod(re:ResultEvent)
    {
    var 
rsr re.result
    var 
cant re.result.length
         
        for(var 
i=0i<canti++) 
        { 
            
//trace(rsr.getItemAt(i).content_management); 
            
            
news[rsr.getItemAt(i).content_management] = 
            { 
                
titelrsr.getItemAt(i).content_titel ,  
                
inhaltrsr.getItemAt(i).content_text
            
};
        }
    } 
Und dann in der Entwicklungsumgebung von Flash in der Flash Abfragedatei folgenden Aufruf habe:
PHP-Code:
_root.app = new Xtc();
//_root.app.say('jetzt gehts!');
_root.app.frMethod() 
Kommt dort nichts mit dem Namen news an! Habe also weder ein objekt noch das erwartete array.
Wieder Denkfehler?

Geändert von crashT (27-02-2006 um 09:27 Uhr)
crashT ist offline   Mit Zitat antworten
Alt 27-02-2006, 08:32   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Zitat:
Zitat von mo#

Wollte Dir damit auch nur zeigen, wie Du Zugriff auf die übertragenen
Daten erhältst. Man muss die Daten nicht unbedingt noch mal in ein Array
parsen.

Mir ging es nur darum, Dir zu zeigen, wie Du mit "rs.result.getItemAt(i)"
an einen Eintrag der von Remoting gelieferten Daten kommst.


gruss


mo#
@mo
hallo mo, ich bekomme mit dieser Aktion leider keinen Zugriff auf die Remotedaten, es kommt bei
PHP-Code:
trace(rsr.getItemAt(i).content_management); 
immer nur undefiened.
crashT ist offline   Mit Zitat antworten
Alt 27-02-2006, 10:41   #10 (permalink)
mo#
interface.group
 
Registriert seit: Jan 2006
Beiträge: 37
und was kommt so:

PHP-Code:
rsr.getItemAt(i
Zitat:
Kommt dort nichts mit dem Namen news an! Habe also weder ein objekt noch das erwartete array.
Wieder Denkfehler?
Da Du news verm. nicht in Deiner Klasse definiert hast, existiert es auch nicht.
Versuche es mit trace. Bau in die for-Schleife traces ein, dann siehst Du besser was da geht.



gruss

mo#

Geändert von mo# (27-02-2006 um 10:48 Uhr)
mo# ist offline   Mit Zitat antworten
Alt 27-02-2006, 13:16   #11 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@mo

also ich habe lange hin und her probiert, da ich mir nicht bewußt vorstellen konnte was und wie es in dem Array steht.

Das trace, das ich vorher produz. wollte konnte nicht gehen, da es unter ".content_manager" nichts gab. Es ist der Name der Tabelle.

Im Moment komme ich in der Klasse an den Inhalt heran allerdings noch nicht in der Flash Datei, warum auch immer????

Ich möchte dir erst einmal für deine Hilfe danken, bin durch deinen Hinweis ziemlich weiter gekommen!

Mfg
crashT
crashT ist offline   Mit Zitat antworten
Alt 28-02-2006, 18:36   #12 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Question amfphp online???

@mo und auch alle anderen, habe langsam das Gefühl das es für zwei Leute etwas einsam in diesem Forum werden könnte.

Ich habe das letzte Problem erfolgreich (Dank mo's Hilfe) lösen können, bedeutet das es local alles bestens funktioniert.

Nun versuche ich natürlich solche Sachen nicht für meinen localen Spaß zu machen. Habe also meine Dateien auf einen Server geladen. Die da wären:

die fertigen swf Dateien,
den flashservices Ordner inkl. aller amfphp Dateien
-- diesen konnte ich leider nur auf gleicher Ebene wie die allgemeinen Dateien der Page laden. Wollte eigentlich eine Ebene höher.

Das Serversystem sieht ungefähr so aus:

/ 'erste Ebene'
/.configs/
/atd/
/backup/
/files/
/html/ 'hier drin liegt die erste Ebene der Page'
usw.
also =>
/html/index.php
/html/flash/test.swf
/html/flashservices/gateway.php 'da liegt die gateway.php'
-- in dieser habe ich nun als Klassenpfad folgendes eingetragen:
PHP-Code:
$gateway->setBaseClassPath("/flashservices/services/" 
habe aber auch schon mehrere Möglichkeiten ausprobiert. So z. B.
PHP-Code:
$gateway->setBaseClassPath("../flashservices/services/" 
... oder ...
PHP-Code:
$gateway->setBaseClassPath("../../flashservices/services/" 
irgendwie kann ich weder von lokalen noch von online Dateien den service ansprechen. Kommt einfach nix zurück?!

Habe natürlich den Pfad in der AS Datei angepasst.
Klappt aber nicht?!

Kann wer helfen?!

Ich verwende übrigens keinerlei Komponenten in meiner swf, ist ja wohl auch nicht nötig?! Lese nur immer wieder solche Sätze wie '... hatte vergessen die RemoteComponente auf die Bühne zu ziehen! ...' ????

Zumindest hatte ich local nicht das Gefühl das ich sie bräuchte?!

Geändert von crashT (28-02-2006 um 18:40 Uhr)
crashT ist offline   Mit Zitat antworten
Alt 28-02-2006, 20:38   #13 (permalink)
mo#
interface.group
 
Registriert seit: Jan 2006
Beiträge: 37
schon mal so probiert:
PHP-Code:
$gateway->setBaseClassPath("./services/"); 
und der include müsste theoretisch so aussehen:
PHP-Code:
include "./app/Gateway.php"
Aber ungeprüft, ich verwende da irgendwie nen anderes
Schema.


mo#
mo# ist offline   Mit Zitat antworten
Alt 02-03-2006, 10:50   #14 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@mo

... danke für deine Antwort, bin jetzt auch wieder da.

leider funktz das in deiner Form auch nicht, was für ein Schema verwendest du denn?

In einer anderen Frage hier im Forum ging es um die Rechte der flashservices Ordner, meines Wissens nach wird doch kein Schreibzugrif von aussen nötig sein?! Also stehen doch die Dateien alle auf CHMOD 755?!

Ich müsste einfach mal rausbekommen von wo die gateway.php mit ihren Pfaden ausgeht, also wie sie relativ zu was stehen müssen?!

Bisher dachte ich immer es geht vom root Ordner aus?!

Mfg
crashT

Geändert von crashT (02-03-2006 um 16:59 Uhr)
crashT ist offline   Mit Zitat antworten
Alt 04-03-2006, 12:27   #15 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
keine Verbindung zu online amfphp Service

Also ich stelle mich wahrscheinlich wieder zu blöd an?!

Aaaber, ich bekomme kein result aus meinen Service Dateien die ich online gestellt habe.

Es ist alles hochgeladen, der komplette flashservices Ordner.

Nun komme ich wahrscheinlich mit der Pfadangabe in der Gateway.php nicht ganz klar. Habe allerdings schon die neue amfphp 1.2 version ausprobiert. Bei der wird der Pfad automatisch ermittelt und übergeben.

Aber selbst dort kommt nichts zurück, es kommt nur eine Fehlermeldung wenn der Pfad in meiner AS Klassendatei nicht stimmt. Sprich wenn keine gateway.php gefunden wurde.

Ich bräuchte also ganz dringend Hilfe in dieser Sache. Möchte das Ganze nun endlich zum Ende bringen.

Mfg
crashT
crashT ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele