SWiSH Forum Strona Główna SWiSH Forum
Forum użytkowników programów SWiSH

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Dziwne NIEdziałanie 'variable()' POMOCY
Autor Wiadomość
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Wto 10 Kwi, 2012 22:54   Dziwne NIEdziałanie 'variable()' POMOCY

Dlaczego sekwencja "variable(nazwa)=...'
działa na poziomie ROOT, a już z poziomu funkcji - nie.

Kod:

onSelfEvent (load)
 {var output:LoadVars=new LoadVars();
  output.Zmienna_1='To jest zmienna nr 1';     // działa
  nazwa='output.Zmienna_2';
  variable(nazwa)='To jest zmienna nr 2';      // działa
  trace('_root 1:  '+output.Zmienna_1);
  trace('_root 2:  '+output.Zmienna_2);
     
  Funkcja();
 }

function Funkcja()
 {var output:LoadVars=new LoadVars();
  output.Zmienna_1='To jest zmienna nr 1';   // działa
  nazwa='output.Zmienna_2';
  variable(nazwa)='To jest zmienna nr 2';    // NIE działa
  trace('');
  trace('Fun 1:  '+output.Zmienna_1);
  trace('Fun 2:  '+output.Zmienna_2);
 }


Skutkiem tego nie można wysłać zmiennych

output.send("send.php", "_blank", "POST");

W poprzednich wersjach Swish'a to DZIAŁAŁO, ale ...
no właśnie.
:-(
Ostatnio zmieniony przez Johanson Sro 11 Kwi, 2012 05:40, w całości zmieniany 3 razy  
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Sro 11 Kwi, 2012 00:27   

Kod:

onSelfEvent (load) {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1';
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2';
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);

Funkcja();
}

function Funkcja() {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1';
output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2';
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
}   
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Sro 11 Kwi, 2012 05:26   

no i ?
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Sro 11 Kwi, 2012 09:23   

no i działa jakbyś nie zauważył. Zamiast zmiennej 2 wyświetlało undefined, teraz się wyświetla normalnie: Fun 2:To jest Znienna nr 2.

Coś jeszcze?
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Sro 11 Kwi, 2012 12:25   

Dla niezorientowanych wyjaśniam:

Sekwencja 'variable(..)' służy (akurat w SwishMax4 przestała działać)
do ustalania wartości zmiennej o nazwie, której JESZCZE NIE ZNAMY
podczas pisania programu.

Dlatego nie interesuje mnie jawne podstawienie
(patrz globalny zasięg zmiennej 'nazwa')
Kod:
output.Zmienna_2=nazwa;

tylko konstrukcja
Kod:
variable(nazwa)='To jest zmienna nr 2';

które NIE działa.

Do tej pory w SwishMax3 można było użyć:
Kod:
output.eval (nazwa)='cokolwiek'
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Sro 11 Kwi, 2012 15:14   

Johanson napisał/a:

tylko konstrukcja
Kod:
variable(nazwa)='To jest zmienna nr 2';

które NIE działa.


Udowodniłem wyżej, że działa.
Ale skoro masz żal do wszystkich, że nie działa tak jak ty chcesz, to twoja sprawa.
Jak nie pasuje SM4 to proponuję przejść na SM3.
Dodam tylko, że w SM3 twój kod też nie działa, więc nie opowiadaj bzdur.
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Sro 11 Kwi, 2012 21:37   

A mógłbym grzecznie poprosić o ten 'dowód' ?

Nie mam ochoty na kłótnie, po prostu zależy mi na tym, żeby działało.

Z mojej strony należy się wyjaśnienie:
---------------------------------------------
W wersji '3' (20091130) działała poniższa sekwencja:
Kod:
574  licznik++;
575  zmienna='ED_b'+licznik;
576  output.eval (zmienna+'n'  )=variable('b'+i+'n');

Powyższy kod jest wyjęty wprost z DZIAŁAJĄCEGO programu,
który przekazuje do PHP metodą POST
za każdym razem inne zmienne, o różnych wartościach.
Nie mogę przewidzieć podczas pisania programu
jaka będzie nazwa zmiennej, więc muszę to robić dynamicznie.

Po wgraniu wersji '4' (20110318 , 20110620 , 20110919) pojawił się błąd:
Cytat:
Oczekiwano zapisywalna zmienna ale znalezion "output.eval (zmienna+'n' )" przed "=" w skrypcie:
Scena_::function sendOrder(h:Number, w:Number)
Scena_, linia 576: output.eval (zmienna+'n' )=variable('b'+i+'n'); // nazwa

Dlatego zacząłem kombinować, aby zaczęło działać przykładowo:
Kod:
output.eval (zmienna)='cokolwiek';
  lub
variable('output.+nazwa)='cokolwiek';

Żaden z nich nie działa (fakt, że skopiowałem do netu tylko drugą wersję
i twierdziłem, że ona działała w wersji '3' - za co przepraszam).
Prawidłowo chodziła pierwsza wersja (ta z VAL), co sytuacji nie zmienia.


Jeśli "Espe1" twierdzi, że
Kod:
variable(nazwa)='To jest zmienna nr 2';

działa, to niech zakomentarzuje wcześniejszą linię kodu, tzn.
Kod:
// output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2';

i ... sprawdzi efekt - NIE DZIAŁA.

Pytanie ostateczne:
Może istnieje jednak metoda wysyłania zmiennych do PHP
z wykorzystaniem makrorozwinięcia (jak zwał, tak zwał);
w każdym razie nie w postaci jawnej.
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Sro 11 Kwi, 2012 23:43   

Twoja wersja:
Kod:

onSelfEvent (load)
 {var output:LoadVars=new LoadVars();
  output.Zmienna_1='To jest zmienna nr 1';     // działa
  nazwa='output.Zmienna_2';
  variable(nazwa)='To jest zmienna nr 2';      // działa
  trace('_root 1:  '+output.Zmienna_1);
  trace('_root 2:  '+output.Zmienna_2);
     
  Funkcja();
 }

function Funkcja()
 {var output:LoadVars=new LoadVars();
  output.Zmienna_1='To jest zmienna nr 1';   // działa
  nazwa='output.Zmienna_2';
  variable(nazwa)='To jest zmienna nr 2';    // NIE działa
  trace('');
  trace('Fun 1:  '+output.Zmienna_1);
  trace('Fun 2:  '+output.Zmienna_2);
 }

/*
debug:
_root 1:  To jest zmienna nr 1
_root 2:  To jest zmienna nr 2

Fun 1:  To jest zmienna nr 1
Fun 2:  undefined                     <== nie działa, wywala undefined
*/


Moja wersja:

Kod:

onSelfEvent (load) {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1';  // działa
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2';    // działa
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);

Funkcja();
}

function Funkcja(){
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1';   // działa
output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2';    // działa
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);


/*
debug:
_root 1: To jest zmienna nr 1
_root 2: To jest zmienna nr 2
Fun 1: To jest zmienna nr 1
Fun 2: To jest zmienna nr 2     <== działa
*/


co do wysyłania zmiennych do php:
Kod:

output.sendAndLoad("plik.php", output, "POST");


Wstawiłeś kod z bykiem i pytasz dlaczego nie działa, poprawiłem kod, a ty dalej swoje.
Jeszcze wprowadzasz ludzi w błąd, że w swish 3 działało. Sprawdziłem, też wywala undefined. Masz więc do wyboru: mój kod, albo "niedziałanie".
Ostatnio zmieniony przez espe1 Sro 11 Kwi, 2012 23:58, w całości zmieniany 1 raz  
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Sro 11 Kwi, 2012 23:54   

Czy mógłybyś zakomentarzować linię, o której mówiłem i zobaczyć efekt?

Proszę czytać ze zrozumieniem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Czw 12 Kwi, 2012 00:03   

Johanson napisał/a:
Czy mógłybyś zakomentarzować linię, o której mówiłem i zobaczyć efekt?

Proszę czytać ze zrozumieniem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


a niby dlaczego chcesz wywalić to co poprawiłem??? Przecież po to poprawiłem żeby działo.

Człowieku, skąd ty się urwałeś?

Najlepiej zakomentarzuj sobie całość
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Czw 12 Kwi, 2012 00:13   

Ok
Urwałem sie ?? ?
W taki razie: nie komentarzuj.
Sprawdź poniższe:
Kod:

onSelfEvent (load) {
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1  w ROOT';
nazwa='output.Zmienna_2';
variable(nazwa)='To jest zmienna nr 2  w ROOT';
trace('_root 1: '+output.Zmienna_1);
trace('_root 2: '+output.Zmienna_2);

Funkcja();
}

function Funkcja(){
var output:LoadVars=new LoadVars();
output.Zmienna_1='To jest zmienna nr 1  w FUN';
output.Zmienna_2=nazwa;
variable(nazwa)='To jest zmienna nr 2  w FUN';
trace('Fun 1: '+output.Zmienna_1);
trace('Fun 2: '+output.Zmienna_2);
}


Dla jasności:
Do Twojej wersji kodu dodałem tylko 'w ROOT', oraz 'w FUN',
co ma unaocznić Twoje niezrozumienie!!

To, że w funkcji jes widoczna 'Zmienna_2' wynika
z wcześniejszego JAWNEGO podstawienia zmiennej w ROOT.
Kwestia zasięgu!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Czw 12 Kwi, 2012 00:23   

No i wyświetla prawidłowo w debug (trace):

Kod:


_root 1: To jest zmienna nr 1  w ROOT
_root 2: To jest zmienna nr 2  w ROOT
Fun 1: To jest zmienna nr 1  w FUN
Fun 2: To jest zmienna nr 2  w FUN
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Czw 12 Kwi, 2012 00:48   

Coś mi się wydaje, że moje (a być może i Twoje) nerwy
niepotrzebnie są szarpane przez producenta SwishMax'a.

Otóż sprawa powoli zaczyna się wyjaśniać:
W poziomie ROOT można dowolnie wykorzystywać 'variable(..)',
zaś na poziomie funkcji trzeba NAJPIERW daną (konkretną) zmienną ZAINICJOWAĆ
w postaci jawnej.

Wystarczy sprawdzić:
Kod:

function Funkcja(){
  var output:LoadVars=new LoadVars();
  output.Zmienna_1='To jest zmienna nr 1  w FUN';
  output.Zmienna_2='dupa';    // <---------------------------------------
  variable(nazwa)='To jest zmienna nr 2  w FUN';
  trace('Fun 1: '+output.Zmienna_1);
  trace('Fun 2: '+output.Zmienna_2);
}

lub
Kod:

function Funkcja(){
  var output:LoadVars=new LoadVars();
  output.Zmienna_1='To jest zmienna nr 1  w FUN';
  output.Zmienna_2='';   // < ------------------------------------------
  variable(nazwa)='To jest zmienna nr 2  w FUN';
  trace('Fun 1: '+output.Zmienna_1);
  trace('Fun 2: '+output.Zmienna_2);
}

Tyle, że ... co mi z tego, że muszę jawnie podstawiać,
skoro mi właśnie zależy na uniwersalności.

Ostatecznie chodzi o stworzenie funkcji:
Wyslij(zmiennaNazwa,zmiennaWartosc),
która przecież nie może wiedzieć w momencie jej tworzenia
jaka będzie nazwa zmiennej, więc nie może jej zainicjować.
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Czw 12 Kwi, 2012 10:38   

o wysyłaniu danych do php było całkiem niedawno,

tutorial i pliki źródłowe:

http://flashblog.swish.pl...unikacja-z-php/
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Czw 12 Kwi, 2012 11:16   

OK
Poddaje się.
Nic nie poradzę na Twoje niezrozumienie tematu.
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Czw 12 Kwi, 2012 12:28   

opisz dokładnie co chcesz wysłać, wrzuć plik swi i php, bo coś mi się wydaje, że do niczego ci to nie jest potrzebne
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Pią 13 Kwi, 2012 17:37   

Chcę, żeby z programu SwishMax były przesyłane zmienne z ich wartościami
do PHP via POST:

Swish
Kod:
  . . .
  Wyslij('parametrA','czerwony');
  . . .
  Wyslij('upust',25);
  . . .
  Wyslij('Nazwisko','Abacki');
  . . .
  Wyslij('cecha_623','BGP-34/34');
  . . .


a w PHP można było wydrukować
Kod:
  . . .
  print_r(POST);
  . . .


Podreślam:
NIE JESTEM W STANIE PODAĆ ANI ILOŚCI ZMIENNYCH,
ANI ICH NAZW !! !

Do czego to jest potrzebne?
Bez komentarza
Ostatnio zmieniony przez Johanson Pią 13 Kwi, 2012 17:42, w całości zmieniany 1 raz  
 
     
espe1
Profesjonalista


Pomógł: 16 razy
Dołączył: 02 Lis 2011
Posty: 175
Skąd: łódzkie
Wysłany: Pią 13 Kwi, 2012 17:41   

http://flashblog.swish.pl...unikacja-z-php/

lub:
http://www.swish-designs.co.uk/index.php?pageid=48
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Pią 13 Kwi, 2012 17:44   

Proponujesz w pierwszym wariancie wysyłkę 'myVars',
w którym są konkretne zmienne: 'Name', 'Email', 'Message',
zaś wariant drugi wysyła wszystko z ROOT'a.

Otóż przyjmij do wiadomości, że program obsługujący zamówienia
działa od przeszło dwu lat (moduł główny w wersji '3')
i radzi sobie zupełnie nieźle na gruncie SWISH-PHP-mySQL

Do tej pory to działa !!
Tyle, że w wersji '3'

Przyszła wersja '4' i zmieniła się obsługa
funkcji 'E V A L' oraz 'V A R I A B L E',
której to zmiany nie przyjmujesz do wiadomości.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.35 sekundy. Zapytań do SQL: 14