Strona 1 z 3
[as3] formularz kontaktowy w as3
: sob mar 15, 2008 3:58 pm
autor: argik
Mam textInputa o nazwie "od", TextInputa o nazwie "temat", TextArea o nazwie "wiadomosc", button o nazwie "reset", button o nazwie "wyslij", pole tekst dynamiczny o nazwie "komunikat1" (do wyswietlania, ze np. wpisano za krotki adres email), pole tekst dynamiczny o nazwie "komunikat2" (do wyswietlania komunikatow bledu).
Kod: Zaznacz cały
stop();
reset.addEventListener (MouseEvent.CLICK, resetnasluchiwacz);
function resetnasluchiwacz(event:MouseEvent):void
{
od.text="";
temat.text="";
wiadomosc.text="";
komunikat1.text="";
}
// IndexOf - szuka danego znaku, jesli go nie znajdzie to zwraca "-1"
wyslij.addEventListener (MouseEvent.CLICK, wyslijnasluchiwacz);
function wyslijnasluchiwacz(event:MouseEvent):void
{
if (od.text.length<5 || od.text.indexOf("@")==-1 || od.text.indexOf(".")==-1) {komunikat1.text = "Proszę wpisać poprawny email.";}
else if (temat.text.length<5) {komunikat1.text = "Proszę wpisać dłuższy temat wiadomości.";}
else if (wiadomosc.text.length<10) {komunikat1.text = "Proszę wpisać dłuższą treść wiadomości.";}
else
{
jeden.visible=false;
od.visible=false;
dwa.visible=false;
temat.visible=false;
trzy.visible=false;
wiadomosc.visible=false;
reset.visible=false;
wyslij.visible=false;
komunikat1.text="Wysyłanie wiadomości...";
//obiekt klasy LoadVars komunikujący się z PHP:
var aa:LoadVars=new LoadVars(); //zmienna do wysyłania danych z formularza do skryptu PHP
var bb:LoadVars=new LoadVars(); //zmienna do sprawdzenia odpowiedzi ze skryptu PHP
//zmienne do wysłania:
aa.p1=od.text;
aa.p2=temat.text;
aa.p3=wiadomosc.text;
//wykonaj gdy otrzymasz dane od skryptu php:
bb.onLoad=function()
{
if(this.sent=="ok") {komunikat2.text="Wysłano wiadomość."; gotoAndStop(2);}
else if(this.sent=="zle1" || this.sent=="zle2" || this.sent=="zle3")
{
jeden.visible=true;
od.visible=true;
dwa.visible=true;
temat.visible=true;
trzy.visible=true;
wiadomosc.visible=true;
reset.visible=true;
wyslij.visible=true;
if(this.sent=="zle1")
{
komunikat1.text="Proszę wpisać poprawny email.";
}
else if(this.sent=="zle2")
{
komunikat1.text="Proszę wpisać dłuższy temat wiadomości.";
}
else if(this.sent=="zle3")
{
komunikat1.text="Proszę wpisać dłuższą treść wiadomości.";
}
}
else {komunikat2.text="Nie udało się wysłać wiadomości, spróbuj później."; gotoAndStop(2);}
}
aa.sendAndLoad ("mail.php", bb, "POST"); //wyślij i pobierz dane
}
}
Klasa LoadVars została zastąpiona w AS3 przez URLLoader i URLRequest no i pare innych klas. Więc próbowałem przerobić kod na AS3, ale nie udało się więc wróciłem do początkowej wersji i zamieściłem powyżej kod - możecie mi pomóc ?
as3 send load
: sob mar 15, 2008 10:26 pm
autor: Marek_bf
Przykład przesłania dwóch zmiennych z pól tekstowych (myInputTxt1, myInputTxt2) do PHP, w dodanie ich do siebie i odczytwnie wyniku we Flashu w polu myTxt
Kod: Zaznacz cały
mc.addEventListener(MouseEvent.MOUSE_DOWN, sendData);
//
function sendData(event:MouseEvent) {
var myData:URLRequest = new URLRequest("plik.php");
myData.method = URLRequestMethod.POST;
//
var variables:URLVariables = new URLVariables();
variables.zmienna1 = myInputTxt1.text;
variables.zmienna2 = myInputTxt2.text;
myData.data = variables;
//
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, loadData);
loader.load(myData);
}
//
function loadData(event:Event) {
myTxt.text = event.target.data.wynik;
}
[php]<?php
$wynik = $_POST['zmienna1'] + $_POST['zmienna2'];
echo 'wynik='.$wynik;
?>[/php]
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 8:55 am
autor: argik
Najpierw pojawiał mi się dziwny błąd że niby trzeba coś tam zdekodować - znalazłem rozwiązanie w Internecie, że w pliku PHP już nie piszemy jak w AS2: np.echo "&sent=ok&"; tylko teraz w AS3 piszemy w pliku php: echo "sent=ok"; czyli bez "&". Jednak mam kolejny kłopot, na który nie znalazłem w Internecie rozwiązania - wyświetla się komunikat:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at kontakt_fla::formularz_2/zaladowano()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()
Mój kod:
Kod: Zaznacz cały
wyslij.addEventListener (MouseEvent.CLICK, wyslijnasluchiwacz);
function wyslijnasluchiwacz(event:MouseEvent):void
{
if (od.text.length<5 || od.text.indexOf("@")==-1 || od.text.indexOf(".")==-1) {komunikat1.text = "Proszę wpisać poprawny email.";}
else if (temat.text.length<5) {komunikat1.text = "Proszę wpisać dłuższy temat wiadomości.";}
else if (wiadomosc.text.length<10) {komunikat1.text = "Proszę wpisać dłuższą treść wiadomości.";}
else
{
jeden.visible=false;
od.visible=false;
dwa.visible=false;
temat.visible=false;
trzy.visible=false;
wiadomosc.visible=false;
reset.visible=false;
wyslij.visible=false;
komunikat1.text="Wysyłanie wiadomości...";
var zadanie:URLRequest = new URLRequest("mail.php");
zadanie.method = URLRequestMethod.POST;
var zmienne:URLVariables = new URLVariables();
zmienne.p1 = od.text;
zmienne.p2 = temat.text;
zmienne.p3 = wiadomosc.text;
zadanie.data = zmienne;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, zaladowano);
loader.load(zadanie);
}
}
function zaladowano(event:Event)
{
if(this.sent=="ok") {komunikat2.text="Wysłano wiadomość."; gotoAndStop(2);}
else if(this.sent=="zle1" || this.sent=="zle2" || this.sent=="zle3")
{
jeden.visible=true;
od.visible=true;
dwa.visible=true;
temat.visible=true;
trzy.visible=true;
wiadomosc.visible=true;
reset.visible=true;
wyslij.visible=true;
if(this.sent=="zle1")
{
komunikat1.text="Proszę wpisać poprawny email.";
}
else if(this.sent=="zle2")
{
komunikat1.text="Proszę wpisać dłuższy temat wiadomości.";
}
else if(this.sent=="zle3")
{
komunikat1.text="Proszę wpisać dłuższą treść wiadomości.";
}
}
else {komunikat2.text="Nie udało się wysłać wiadomości, spróbuj później."; gotoAndStop(2);}
}
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 12:39 pm
autor: Marek_bf
Testujesz w środowisku edycyjnym, dostęp do pliku php masz bezpośredni, plik php nie jest wykonywany. Testuj na serwerze z obsługą PHP.
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 1:21 pm
autor: argik
Na serwerze też testowałem i tam ciągle widzę komunikat "wiadomość jest wysyłana". Ale tego akurat się spodziewałem na serwerze, bo jak testuję w środowisku edycyjnym to jesli wszystko jest ok to powinienem zobaczyć komunikat "nie udało się wysłać wiadomości" a tymczasem wyskakują błędy w adobe flash podczas testowania filmu. Błąd tkwi gdzies w kodzie as 3 :/
Tylko gdzie ten błąd?

-----------------------------------
-----------------------------------
Chyba Wiem !!!!!!!!!! W klatce pierwszej w której mam formularz mam coś takiego:
Kod: Zaznacz cały
else {komunikat2.text="Nie udało się wysłać wiadomości, spróbuj później."; gotoAndStop(2);}
Pole tekstowe "komunikat2" znajduje się jednak w klatce DRUGIEJ w której mam tylko pole tekstowe "komunikat2" i przycisk "powrót" !! W AS 2 można było tak zrobić, w AS 3 nie ?
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 3:12 pm
autor: Marek_bf
Jeśli odwołujesz się 1 jakiejś klatce do obiektu którego w tej klatce nie ma to skończy się to niepowodzeniem (undefined) tak a AS1, jaki AS2 oraz AS3.
Nie możesz odwoływać się do czegoś co nie istnieje.
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 3:42 pm
autor: argik
Jak się okazuje nie dochodzą do mnie wiadomości wysłane z tego formularza opublikowanego na serwerze - widzę komunikat "W pozostałych wypadkach." - pole tekstowe z takim komunikatem mam w klatce 4, a skoro nastapilo przejscie do klatki nr 4 jak wynika z mojego kodu ponizej to znaczy, ze Flash nie odbiera wartości zmiennej "sent" od PHP. Bo w moim kodzie PHP mam, że jesli uda się wysłać emaila to: echo "sent=ok"; jesli sie nie uda to echo "sent=fail";. A jako że we Flashu nastapiło przejście do klatki 4 to świadczy o tym, że Flash nie odebrał od PHP wartości zmiennej "sent" równej "ok" ani "fail" tylko pewnie "NULL" - dlaczego ?
Kod: Zaznacz cały
wyslij.addEventListener (MouseEvent.CLICK, wyslijnasluchiwacz);
function wyslijnasluchiwacz(event:MouseEvent):void
{
if (od.text.length<5 || od.text.indexOf("@")==-1 || od.text.indexOf(".")==-1) {komunikat1.text = "Proszę wpisać poprawny email.";}
else if (temat.text.length<5) {komunikat1.text = "Proszę wpisać dłuższy temat wiadomości.";}
else if (wiadomosc.text.length<10) {komunikat1.text = "Proszę wpisać dłuższą treść wiadomości.";}
else
{
jeden.visible=false;
od.visible=false;
dwa.visible=false;
temat.visible=false;
trzy.visible=false;
wiadomosc.visible=false;
reset.visible=false;
wyslij.visible=false;
komunikat1.text="Wysyłanie wiadomości...";
var zadanie:URLRequest = new URLRequest("mail.php");
zadanie.method = URLRequestMethod.POST;
var zmienne:URLVariables = new URLVariables();
zmienne.p1 = od.text;
zmienne.p2 = temat.text;
zmienne.p3 = wiadomosc.text;
zadanie.data = zmienne;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, zaladowano);
loader.load(zadanie);
}
}
function zaladowano(event:Event)
{
if(this.sent=="ok") {gotoAndStop(3);}
else if(this.sent=="zle1" || this.sent=="zle2" || this.sent=="zle3")
{
jeden.visible=true;
od.visible=true;
dwa.visible=true;
temat.visible=true;
trzy.visible=true;
wiadomosc.visible=true;
reset.visible=true;
wyslij.visible=true;
if(this.sent=="zle1")
{
komunikat1.text="Proszę wpisać poprawny email.";
}
else if(this.sent=="zle2")
{
komunikat1.text="Proszę wpisać dłuższy temat wiadomości.";
}
else if(this.sent=="zle3")
{
komunikat1.text="Proszę wpisać dłuższą treść wiadomości.";
}
}
else if(this.sent=="fail") {gotoAndStop(2);}
else {gotoAndStop(4);}
}
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 3:50 pm
autor: Marek_bf
W takich przypadkach zawsze sprawdź czy sam skrypt PHP bez udziału Flasha wyśle email, czyli zrób w HTML te pola, co masz we Flashu i wyślij.
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 6:30 pm
autor: argik
W html i php wszystko ok mi sie wysyla. Może w AS 3 żeby odebrać wartość zmiennej z php trzeba uzyc jeszcze jakiejs klasy ?
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 8:10 pm
autor: argik
A i jeszcze dodam, bo może xle się wyraziłem - wiadomości wysłane z tych formularzy do mnie dochodzą tyle, że nie wiem dlaczego następuje przejście do klatki 4 - która wyświetla się gdy nie odebrano z php wartości zmiennej "sent".
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 9:22 pm
autor: Marek_bf
NIe sprawdzaj this.send tylko event.target.data.send
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 9:59 pm
autor: argik
Ooooo wielkie dzięki - teraz jak wyświetlam wartość "event.target.data.sent" to wartość pobrana z php jest prawidłowa. Tylko niestety wygląda na to, że w AS 3 nie można juz porównywać stringów za pomocą "==", np.
jest fałszywe
event.target.data.sent wyswietla wartość "ok", a mimo wszystko stwierdza że ta wartość jest różna od "ok". Jak w AS 3 można porównać stringi ?
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 10:15 pm
autor: Marek_bf
Twój zapis powinien działać bez problemu, sprawdź zgodność małych i wielkich liter, zobacz czy nie przesyłasz jakiegoś dodatkowego znaku, sprawdź jeszcze taki zapis:
Re: [as3] formularz kontaktowy w as3
: ndz mar 16, 2008 11:07 pm
autor: argik
Więc tak - test na dwóch serwerach:
na darmowym serwerze yoyo.pl pokazuje komunikat z klatki 2, że nie udało się wysłać wiadomosci mimo że wiadomość do mnie dochodzi oraz mimo że wyświetlenie event.target.data.sent zwraca "ok" - na tym serwerze jakoś "ok" jest różne od "ok"
na darmowym serwerze lua.pl - wszystko OK, wiadomość wysyła, pokazuje komunikat z klatki 3, że "wysłano wiadomość", na tym serwerze "ok" równa się "ok"
Dziwne - jak widać to chyba zależy od serwera.
PS. U mnie jest "sent" a nie "send"
Re: [as3] formularz kontaktowy w as3
: pn mar 17, 2008 11:56 am
autor: Marek_bf
Pokaz mi plik PHP, plik z kodem, nie sam kod.