Tutorijal: Flash+PHP, slanje forme

Tutorijal: Flash+PHP, slanje forme

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

AS2.0

Ovo pitanje je toliko puta bilo postavljano a ja sam sve vreme otezala sa ovim tutorijalom jer, moram da priznam, ne koristim ovaj nacin kombinovanja Flasha i PHPa (o amfPHP-u neki drugi put...). Fala lnenadu sto me je podsetio da i server postoji Mr. Green

No, za sve one koji bi na jednostavan nacin da ugrade u svoj flash i formular koji posetilac na sajtu popuni a vi dobijete taj feedback putem e-maila, evo kako to uraditi u nekoliko jednostavnih poteza.

Dakle, sta pravimo?
Formular u Flashu koji posetilac sajta moze da popuni, zatim klikom na "Posalji" tu poruku saljemo na server, odnosno PHPu, PHP salje nama e-mail sa tekstom poruke i zatim vraca odgovor Flashu i posetiocu da je poruka poslata kako treba (ili da nije).

Otvorite Flash Smile

-Na scenu 'izvucite' komponentu TextArea i u properties joj dajte ime poruka. Ovo ime ce se ponavljati i kasnije pa nemojte biti jako mastoviti i menjati ga Wink

Ispod tekstualnog polja izvucite komponentu Button i nazovite je u properties posalji. U parameters pod "label" upisite "Posalji".

-Frame broj 2 neka sadrzi samo poruku (tekst polje) "Poruka poslata". Ovaj frame u properties nazovite uspeh. Frame broj 3 neka sadrzi poruku "Poruka nije poslata". Ovaj frame nazovite u properties neuspeh. U oba frejma, naravno, upisite stop();


Ok, to je sve sto nam treba za pocetak od interfejsa (kasnije eksperimentisite sami ako hocete jos polja- ime, e-mail, adresa, telefon...)

Sad kod:

Napravite novi layer na timeline. Taj ce nam ugostiti kod.
Za pocetak nam trebaju dva objekta koji ce da 'nose' podatke ka serveru. Oba ce biti LoadVars tipa.

stop(); var saljem:LoadVars= new LoadVars(); var primam:LoadVars= new LoadVars();

Sada vezujemo kod za dugme "Posalji". I ovo pisemo odmah ispod prethodnog koda, dakle u prvi frame na glavnoj vremenskoj liniji.

  posalji.onRelease = function(){    saljem.poruka = poruka.text;   //dodeljujemo objektu ono sto saljemo ka serveru    saljem.sendAndLoad("http://neki-moj-sajt/forma.php", primam); }

PHP po imenom forma.php jos ne postoji, ali i to pravimo uskoro.
primam je objekat koji ce da nosi povratnu informaciju sa sajta o uspehu slanja poruke.

Sta ce se desiti u Flashu kad stigne povratna poruka sa servera?
U nastavku sledi kod:

primam.onLoad = function(){    if(this.poslatoOK){       _root.gotoAndStop("uspeh");    }else{       _root.gotoAndStop("neuspeh");    } }

Kompajliramo flash i uploadujemo na server na http://neki-moj-sajt/.

poslatoOK je promenljiva koja dolazi iz PHPa. Vrlo je zgodno da Flash prepoznaje promenljivu iz PHPa samo po imenu.

PHP:

Ceo PHP izgleda ovako:
<?php $to = "k**@gmail.com"; $subject = "Komentar"; $message= "Poruka: " .$poruka;  //ovo je ta nasa "poruka" iz txt polja u Flashu $from="Sa sajta"; $poslatoOK = mail($to,$subject,$message,$from); //poslatoOK ce biti true ili false echo "poslatoOK=" . $poslatoOK;  //ovo Flash 'vidi' ?>

Snimiti kao "forma.php".

Naravno da je dozvoljeno da ubacite vise polja, da poruka ne ode na e-mail nego u recimo bazu podataka, knjigu gostiju... sta bilo. Sta god PHP moze da radi sa nekom promenljivom, to mozete i vi sa $poruka. Ali vi sigurno bolje znate PHP od mene pa kombinujte do mile volje ovde biramo najjednostavniju varijantu.

Upload oba fajla, .swf i .php na server, pod isti direktorijum i javite da li radi!
Prijatno Razz



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Tamti, super tutorial, samo moram malo da zvocam Mr. Green forma.php nije dobro uradjena i nece uvek da radi (tj nece skoro nikad). Zasto? Zato sto (kada je REGISTER_GLOBALS iskljuceno - znaci skoro uvek) u promenljivoj $poruka nemas nista Smile i toj promenljivoj se pristupa sa $_POST['poruka'] ili $_GET['poruka'] - zavisi od toga da li formu saljes POST ili GET metodom.

A i licno ne preporucujem slanje maila f-jom mail(), zna dosta servera da prepozna takav mail kao SPAM.



offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

E, ako zvocas, onda ima i da mi pomognes Wink
Preuzmi, pliz, pa doteraj taj PHP, tu bas i nisam riba u vodi Very Happy
*trep trep*

Slanje mail() funkcijom je opcija. U stvari, sta PHP radi sa tom promenljivom je vise prica za onaj drugi deo foruma. Moje je samo da posaljem posiljku na server i primim odgovor Smile


Btw, kod mene na serveru lepo radi (a i gmail mi prima mail)

Dopuna: 22 Okt 2008 23:29

PS
Zaboravih ... za sendAndLoad nacin, koji se ovde koristi, je default POST metod.

Znaci, ovako nesto bi trebalo da radi:

<?php $to = "k**@gmail.com"; $subject = "Komentar"; $message= $_POST['poruka'];  //***izmena**** $from="Sa sajta"; $poslatoOK = mail($to,$subject,$message,$from); //poslatoOK ce biti true ili false echo "poslatoOK=" . $poslatoOK;  //ovo Flash 'vidi' ?>

PPS
Thanks, Rasta Smile

offline
  • Pridružio: 11 Maj 2007
  • Poruke: 86

Moze da radi i sa formom koju je navela Tamtitam, ali treba da se ubaci jedno parce koda.

Tamtitam najverovatnije testira na PHP verziji 4 pa joj sve radi super, a Rastafarii ima verziju 5 pa su mu prosledjene varijable prazne!?

Ovaj kod treba ubaciti odma' posle <?php
foreach($HTTP_GET_VARS as $name => $value){    $$name = $value; } foreach($HTTP_POST_VARS as $name => $value){    $$name = $value; } foreach($HTTP_COOKIE_VARS as $name => $value){    $$name = $value; }

a zatim treba dodati kod koji je Tamtitam napisala, sto znaci cela PHP skripta bi trebala da izgleda ovako:

<?php foreach($HTTP_GET_VARS as $name => $value){    $$name = $value; } foreach($HTTP_POST_VARS as $name => $value){    $$name = $value; } foreach($HTTP_COOKIE_VARS as $name => $value){    $$name = $value; } $to = "k**@gmail.com"; $subject = "Komentar"; $message= "Poruka: " .$poruka;  //ovo je ta nasa "poruka" iz txt polja u Flashu $from="Sa sajta"; $poslatoOK = mail($to,$subject,$message,$from); //poslatoOK ce biti true ili false echo "poslatoOK=" . $poslatoOK;  //ovo Flash 'vidi' ?>

i trebalo bi da funkcionise na PHP serveru verzije 4 i 5.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Darchy, nema to veze za verzijom PHP-a, vec sa podesavanjima u php.ini Smile

Rastafarii ::Zato sto (kada je REGISTER_GLOBALS iskljuceno - znaci skoro uvek) u promenljivoj $poruka nemas nista Smile

A za PHP kontakt formu... resenje sam dao pre nekih 6 meseci, ovde -> http://www.mycity.rs/PHP/PHP-Tutorijal-Kontakt-forma.html

Sa druge strane, ako pretpostavimo da kliknem na "Posalji" bez popunjavanja ijednog polja... bice šou... tj forma.php ce vratiti ovakav tekst:

Notice: Undefined variable: message in putanja/do/forma.php on line 8 poslatoOK=1

I na mail stize prazan mail... a sta ce flash da uradi sa ovakvim rezultatom, ne znam Smile

Ovo je ispravnija varijanta:

<?php $to = "k***@gmail.com"; $subject = "Komentar"; if (isset($_POST['poruka']) and !empty($poruka)) { //provera da li je polje poruka setovano $message= $_POST['poruka'];  //***izmena**** (ako jeste) } else { die("poslatoOK=0"); //ako nije, u flash vracamo gresku :) } $from="Sa sajta"; $poslatoOK = mail($to,$subject,$message,$from); //poslatoOK ce biti true ili false echo "poslatoOK=" . $poslatoOK;  //ovo Flash 'vidi' ?>

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

Citat:
I na mail stize prazan mail... a sta ce flash da uradi sa ovakvim rezultatom, ne znam


Milina jedna citati prazne mailove Smile

Znaci, ne zelimo prazno polje?
Onda nam treba jedna dodatna provera pri kliku na dugme

  posalji.onRelease = function(){ if(poruka.length>0){   //dodato**    saljem.poruka = poruka.text;   //dodeljujemo objektu ono sto saljemo ka serveru    saljem.sendAndLoad("http://neki-moj-sajt/forma.php", primam); }else{  //dodato** trace("Nista nije poslato. Evt posalji poruku korisniku da polje ne moze biti prazno "); //dodato** }//dodato** }

Jos jednom, hvala za PHP smešak

offline
  • Pridružio: 11 Maj 2007
  • Poruke: 86

A hajde probaj da u tekst polje namenjeno za poruku uneses neki niz karaktera zatim stavi dve tacke (Smile pa neki niz karaktera pa procenat (%) pa neki niz karaktera !?

Desava se nesto cudno !?
Kada stavis dve tacke, a to nije tako redak simbol, Flash ne prosledjuje nista do PHP-a, jednostavno se "zakuca"!

A kada stavis procenat (opet nije redak simbol), sve sto je napisano iza tog znaka pobrljavi, ne dobija se ispravan tekst.

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

Eh, ovde radi kako treba.
Mozes dodati neku proveru da vidis na licu mesta, u samom brauzeru, da li Flash salje sve karaktere.
Evo rezultat jednog od testova:
Test ::
Sa sajta

Poruka: \"#¤¤%&%&/N &/%&/ %%% sdf w#¤3423 : 324234



E, sad, ako je nesto do PHPa i parsinga, ti ces to bolje znati od mene Smile
Jel imas neku ideju, u cemu je problem? Rasta?

Dopuna: 26 Okt 2008 15:05

Samo jos jedna napomena.
Ovo je "lite" verzija komunikacije Flasha sa web-serverom. Takoreci, "nemasna".
Koristite je u licnim prezentacijama, manjim knjigama gostiju i uglavnom na stranama koje nisu toliko opterecene.
Ukoliko vam, pak, treba brz protok podataka izmedju Flasha i web-servera, koristite ranije spomenuti AMFPHP koji barata binarnim AMFom (Action Message Format).

Za vise informacija pogledajte http://amfphp.org/
Ako bude vremana i zdravlja, pozabavicemo se jednom i time.

Ko je trenutno na forumu
 

Ukupno su 1105 korisnika na forumu :: 49 registrovanih, 10 sakrivenih i 1046 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Andrija357, babaroga, Ben Roj, Bojan85, bojanM84, bojcistv, ccoogg123, chichabg, darkojbn, Denaya, djboj, Dorcolac, draganca, Duh sa sekirom, Džordžino, Frunze, Karla, kokodakalo, Krusarac, Krvava Devetka, Kubovac, Lubica, mean_machine, mercedesamg, Mercury, MiG-29M2, milimoj, minmatar34957, mrav pesadinac, oldtimer, operniki, opt1, panzerwaffe, Petarvu, pirke96, prle122, procesor, rasok, royst33, ruso, S2M, Shinobi, srbijaiznadsvega, styg, t84dar, vlajkox, wulfy, xpforswodniw