Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-02-2006, 16:40   #1 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Eckige Klammern in Variablenname

Hallo,

kann mir jemand verraten, wie man in einen Variablennamen eckige Klammern bekommt, so dass Flash das ganze nicht als Array auswerten will, sondern tatsächlich den Namen "Variable[123]" als Variablenname akzeptiert (notwenig für ein PHP-Skript, dass per POST mit einer solchen Variable angesprochen werden will - dort ist es dann vermutlich eine Arrayauswertung...)?
zellteilung ist offline   Mit Zitat antworten
Alt 08-02-2006, 18:11   #2 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
Zitat:
Zitat von zellteilung
kann mir jemand verraten, wie man in einen Variablennamen eckige Klammern bekommt, so dass Flash das ganze nicht als Array auswerten will, sondern tatsächlich den Namen "Variable[123]" als Variablenname akzeptiert (notwenig für ein PHP-Skript, dass per POST mit einer solchen Variable angesprochen werden will - dort ist es dann vermutlich eine Arrayauswertung...)?
gar nicht. [ und ] ist in flash zur definition von arrays vorgesehen und für nichts anderes (von strings mal abgesenen...). in welcher skriptsprache gibt's denn sowas?

ich würd' an deiner stelle lieber das php umbauen, zumal du dann sonderzeichen beim variablenaustausch minimierst...

greetz, elysian.
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 08-02-2006, 18:22   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Die eckigen Klammern kann man in HTML/XHTML verwenden um Variablen via GET/POST als Array zu senden.
HTML-Code:
<input type="text" name="variable[var]" value="bla" />
Genauso per GET
Code:
http://www.domain.de/index.php?variable[var]=bla
Auch PHP akzeptiert keine Variablennamen die eckige Klammern enthalten. In PHP kann auf Variablen, die wie oben beschrieben übergeben werden, wie folgt zugegriffen werden
PHP-Code:
$_GET['variable']['var'//gibt den Wert der per GETT übergebenen Variable zurück
$_POST['variable']['var'//gibt den Wert der per POST übergebenen Variable zurück 
Warum du jetzt einen Variablennamen mit eckigen Klammern erstellen willst verstehe ich nicht so ganz. Das ganze macht so keinen Sinn. Zudem kann Flash keine Arrays an Skripte übergeben. Die Elemente des Arrays werden automatisch zu einem String zusammengefügt und mit einem "," voneinander getrennt. Die einzige Möglichkeit dieses Verfahren so beizubehalten besteht darin, die Variablen per GET zu übertragen, mit der POST Methode wirst du so keinen Erfolg haben. Ich würde dir raten deinen Ansatz nocheinmal zu überdenken.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 08-02-2006, 18:30   #4 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Das Problem ist konkret folgendes:

Ein Flashspiel soll per Formular ein vorhandenes PHP-Newsletterskript ansprechen (an das ich nicht rankomme und an dem ich nichts umstricken kann), um die Userdaten dort auf Wunsch abzulegen. Per "loadVariables" rufe ich es auf und schicke ihm per POST "email=xyz@abc.de" und "name=name". Zusätzlich soll ein Fixwert mitgeschickt werden, der vermutlich eine Newslist definiert und wie folgt aufgebaut ist "__nl[liste]=1".
Wenn ich das so schreibe, wird Flash es als Array auswerten und ich frage mich, wie sowas dann aussieht, wenn es per POST versandt wird...

Lassen sich Sonderzeichen (wie bspw. % oder []) nicht irgendwie kodieren oder per Syntax, wie [[]] oder {%} o.ä., für Variablennamen gefügig machen?
zellteilung ist offline   Mit Zitat antworten
Alt 08-02-2006, 18:38   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Das wird so nicht funktionieren. Ich könnte mir aber vorstellen, das du mit einem weiteren Skript dein Ziel erreichen kannst. Du könntest ein PHP-Skript schreiben, welches deine Variablen vom Flash empfängt und dann die entsprechenden HTTP-Header an dein Formularskript sendet.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 08-02-2006, 18:44   #6 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Aus Ermangelung umfangreicher PHP-Kennnisse: Könntest du das mal per Beispiel anskizzieren?

Das Skript heißt: "newsletter.php"
Die Variablen: name=name; __email=email; und __nl[liste]=1;
zellteilung ist offline   Mit Zitat antworten
Alt 08-02-2006, 18:50   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Ich bin jetzt erstmal ca. 90 Minuten nicht da und werd mir dann mal was einfallen lassen. Wenn also niemand anderes in der Zwischenzeit hilft, musst du dich ersteinmal gedulden...
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 08-02-2006, 19:09   #8 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Bin auch erst morgen früh wieder da. Was warten muss, muss warten...
PHP-Code:
wait[90] = 660
zellteilung ist offline   Mit Zitat antworten
Alt 08-02-2006, 21:16   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Also das Skript was die Daten von Flash empfängt könnte wie folgt aussehen
PHP-Code:
<?php

//von Flash werden via LoadVars folgende Variablen übergeben:
//name=irgend_ein_name
//email=irgend_eine_email
//liste=element1,element2,element3,...
$list explode(','$_POST['liste']);
$host "dein.host";
$port 80;
$postdata  "name=".$name;
$postdata .= "&__email=".$email;

foreach(
$list as $key => $val) {
 
$postdata .= "&__nl[".$key."]=".$val;
}

if(
$hsock fsockopen($host$port)) {
 
fputs($hsock"POST /Pfad/zum/Skript.php HTTP/1.0\n");
 
fputs($hsock"Host: ".$host."\n");
 
fputs($hsock"Content-type: application/x-www-form-urlencoded\n");
 
fputs($hsock"Content-length: ".strlen($postdata)."\n");
 
fputs($hsock"Connection: close\n\n");
 
fclose($hsock);
}

?>
Ist ungetestet aber so in etwa sollte es funktionieren .
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 09-02-2006, 09:37   #10 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Vielen Dank. Aber als PHP-Amateur hätte ich noch ein paar Fragen zum Verständnis:

Wo taucht denn die "1" für "__nl[liste]=1" auf? Es gibt auch nur das eine Element "liste" (Fixwert). In Flash hieße das dann liste=liste; statt liste=element1,element2,...;, oder versteh ich das falsch?
Wofür ist denn "host" notwendig? Das Skript liegt auf dem gleichen Server, wie das swf.
zellteilung ist offline   Mit Zitat antworten
Alt 09-02-2006, 11:37   #11 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Okay das mit der Liste hatte ich wohl flasch verstanden.
PHP-Code:
<?php 

//von Flash werden via LoadVars folgende Variablen übergeben: 
//name=irgend_ein_name 
//email=irgend_eine_email 
//liste=1 
$list explode(','$_POST['liste']); 
$host "dein.host"
$port 80
$postdata  "name=".$name
$postdata .= "&__email=".$email
$postdata .= "&__nl[liste]=".$liste

if(
$hsock fsockopen($host$port)) { 
 
fputs($hsock"POST /Pfad/zum/Skript.php HTTP/1.0\n"); 
 
fputs($hsock"Host: ".$host."\n"); 
 
fputs($hsock"Content-type: application/x-www-form-urlencoded\n"); 
 
fputs($hsock"Content-length: ".strlen($postdata)."\n"); 
 
fputs($hsock"Connection: close\n\n"); 
 
fclose($hsock); 


?>
Dann macht aber die Verwendung von __n[liste] keinen Sinn mehr. Hier würde es vollkommen ausreichen __n=1 oder liste=1 zu übergeben. Ich würde dir raten dein original Skript zu ändern so das es für das Flashformular zugeschnitten ist. Die Anpassungen und Umwege über ein zweites Skript sind nicht grad das gelbe vom Ei aber das musst du selbst entscheiden.

Nun noch ein paar Erklärungen zum Skript:
-$host enthält den Host. Dieser ist wichtig, da ja eine Verbindung mit dem Server auf dem das Skript liegt hergestellt werden muss. Ob nun das aufrufende Skript und das aufgerufene Skript auf dem selben Host liegen spielt keine Rolle. Dein Browser macht genau das selbe wie dieses Skript, wenn er die Daten eines Formulars an den Server sendet.
-in die geöffnete Verbindung werden dann die Daten geschrieben, die für das Senden von POST Daten notwendig sind. Hier wird dann auch das Skript angegeben was die Daten empfangen soll (in deinem Fall wäre das das Skipt für die Verarbeitung der Formulardaten)

Was willst du überhaupt erreichen mit der ganzen Geschichte. Das Senden von Daten aus einem Formular via PHP ist absolut kein Problem und sicher weitaus verständlicher als die Variante mit der Socket-Verbindung . Wenn du diesbezüglich Hilfe benötigst dann sag bescheid und ich kann die Hilfe leisten.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 09-02-2006, 12:00   #12 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Das Problem ist eben, dass ich ein Spiel in Flash mache, in dessen Highscore man auch einen Newsletter anfordern können soll. Prinzipiell ist das einfach: Ich schicke einfach alle Variablen der Eingabfelder an das Newsletterskript und peng-fertig. Aber leider erwartet das Newsletterskript (das auf dem Kundenserver liegt und zu einem System gehört an das ich nicht drankomme) die genannten Parameter, zu denen auch dieses "__nl[liste]" gehört. Und darauf habe ich keinen Einfluß. Es muss eben nur irgendwie zum Skript geschickt werden. Und wenn ich das als xyz[123] in Flash eingebe, wird Flash dies doch vermutlich in irgendeiner Form arraytechnisch bearbeiten und nicht in dieser Form weiterversenden, oder?
zellteilung ist offline   Mit Zitat antworten
Alt 09-02-2006, 12:14   #13 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Korrekt. Flash wird das immer als Array ansehen, da führt kein Weg dran vorbei. Mit dem Skript was ich gepostet habe sollte es aber funktionieren. Hast du das schon getestet?
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 09-02-2006, 12:22   #14 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Nee, noch nicht. Ist etwas kompliziert. Ich bekomme leider keinen Serverzugang und muss das Ganze zum Testen immer per E-Mail versenden. Ich muss aber noch ein paar andere Problemchen lösen, um eine erste komplette Version zu haben. Bin gespannt... Vielleicht lässt sich dieses Skript ja auch per GET ansprechen. Das wäre doch auch ein Weg. Dann könnte man alles in einem String zusammenpuzzeln und verschicken, oder?
zellteilung ist offline   Mit Zitat antworten
Alt 09-02-2006, 13:00   #15 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Zitat:
Korrekt. Flash wird das immer als Array ansehen, da führt kein Weg dran vorbei.
Nicht ganz...
Nur der Komplettheithalber:
ActionScript:
  1. var my_var:String = "___[liste]";
  2. var lv:LoadVars = new LoadVars();
  3. lv[escape(my_var)] = 1;
  4. lv.send("stringvar.php", "_blank", "POST");
PHP-Code:
<?php
$test 
"%255F%255F%255F%255Bliste%255D";
$weiter $_POST[urldecode($test)];
?>
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha 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 06:25 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele