Form mail Flash+PHP

Actionscript per creare filmati interattivi
Autore Messaggio
 Oggetto del messaggio: Form mail Flash+PHP
MessaggioInviato: ven mag 23, 2008 9:28 pm 
Avatar utente
Non connesso
Moderatore
Moderatore

Iscritto il: lun mar 31, 2008 10:50 am
Messaggi: 144
Località: Cosenza
Se avete sempre desiderato una sezione contatti nel vostro sito web e non vi siete mai accontentati di un banale mailto, questa è la guida che fa per voi.
Vediamo come realizzare un semplice, ma funzionale form mail in Flash e PHP.
Partiamo con il fatto che Flash da solo non è in grado di inviare e-mail, per cui dobbiamo appoggiarci ad un linguaggio lato-server, come PHP. Inoltre il nostro form sarà intelligente, nel senso che rileverà che tutti i campi siano stati compilati correttamente tramite 3 variabili booleane (che possono assumere o vero "true" o falso "false") check1, check2 e check3, prima di inviare i dati al nostro file PHP.
Come al solito apriamo un nuovo File Flash (Actionscript 2.0).
Inseriamo 4 livelli.
Nel livello "actions" andiamo a inserire il codice actionscript che ci serve, nel livello "sfondo" andiamo a disegnare 3 rettangoli, di cui uno molto più alto degli altri, che saranno lo sfondo dei campi di testo che andremo ad utilizzare, con le rispettive etichette.
Nel livello "campi" inseriamo 3 campi di "Testo di input" (opzione che possiamo scegliere dal pannello proprietà) facendoli compaciare con i rettangoli del livello sfondo appena disegnati. Diamo ad essi come nome variabile e come nome istanza (opzioni raggiungibili sempre dal pannelo proprietà) rispettivamente "nome","mail" e "messaggio"; inseriamo inoltre un campo di testo dinamico, al quale diamo come nome istanza e nome variabile "output" e che posizioniamo nella parte inferiore sinistra del nostro form. Esso servirà ad interagire con l'utente tramite dei messaggi.
Nel livello "pulsanti" inseriamo 2 pulsanti che creiamo preventivamente (in sostanza due campi di testo statico, con testo "invia" e "reset" che selezioniamo e cliccando il tasto F8, convertiamo in simboli "Pulsante"). Il nome da dare a questi 2 pulsanti non è rilevante; nel nostro esempio li chiamiamo invia_btn e reset_btn per semplicità. Ecco come dovrebbe presentarsi il nostro stage dopo queste operazioni:

Immagine

Un particolare del pannelo proprietà nella creazione di un campo "Testo di input":

Immagine

Creazione di un pulsante:

Immagine

Adesso selezioniamo il fotogramma chiave del livello actions, premiamo il tasto F9 che ci apre il pannello Azioni e inseriamo come codice

Codice: Seleziona tutto
System.useCodepage=true;
//Inizializzo le variabili
nome="";
mail="";
messaggio="";
output="";


Assegnando alla proprietà useCodepage true, facciamo in modo che flash passi al file php i caratteri codificati in modo corretto. La parte restante serve ad inizializzare le variabili in gioco.
Adesso selezioniamo il pulsante invia_btn e sempre dal pannello Azioni inseriamo il seguente codice

Codice: Seleziona tutto
on(release){ //quando il pulsante viene rilasciato
if( nome eq "" )
check1=false;/*se il campo nome contiene una stringa vuota (usiamo l'operatore eq "equals" per confrontare due stringhe ), cioè non contiene nulla assegna false alla variabile check1*/
else
check1=true; /*altrimenti assegna true alla variabile check1*/
/*sul campo mail dobbiamo inserire dei controlli più avanzati, ovvero dobbiamo accertarci che l'indirizzo e-mail immesso sia valido. Lo stratagemma che usiamo è quello di verificare la presenza dei caratteri "." e "@". Usiamo il metodo lastIndexOf('carattere') che ci restituisce un intero che rappresenta l'ultimo "indice" o per semplicità l'ultima posizione di un certo carattere all'interno della stringa sulla quale richiamiamo il metodo. La condizione necessaria a superare il nostro controllo è che il numero restituitoci sia diverso da -1, il che significa che il carattere deve essere effetivamente presente nella stringa. Inoltre controlleremo che la stringa non sia vuota. Tutti questi controlli saranno concatenati dall'operatore logico or "||" che mette a paragone due espressioni e se una sola di queste è vera allora il risultato sarà vero*/
if(mail.lastIndexOf ('.') == -1 || mail.lastIndexOf ('@') == -1 || mail eq "")
check2=false; /*se l'ultima posizione dei caratteri '.' e '@' è -1 o la stringa è vuota, assegna false a check2*/
else
check2=true; /*altrimenti assegna true a check2*/
if( messaggio eq "")
check3=false;/*se il campo nome contiene una stringa vuota assegna false a check3*/
else
check3=true;/*altrimenti assegna true a check3*/
if(check1 && check2 && check3){ /*ora confrontiamo fra di loro le variabili check1,check2 e check3 tramite l'operatore and "&&" che restituisce vero solo se tutte e tre le variabili sono vere. Per cui se tutti i controlli sono andati a buon fine*/
var vars:LoadVars = new LoadVars(); /*creiamo un nuovo oggeto LoadVars con nome variabile "vars" che ci servirà ad inviare i dati al file PHP*/
/*l'oggetto vars può immagazzinare una sorta di attributi che servono da contenitore per i dati da inviare*/
vars.nome=nome;/* all'attributo nome di vars (vars.nome) assegniamo la nostra variabile nome*/ vars.mail=mail;/* all'attributo mail di vars (vars.mail) assegniamo la nostra variabile mail*/
vars.messaggio=messaggio;/*all'attributo messaggio di vars (vars.messaggio) assegniamo la nostra variabile messaggio*/
vars.sendAndLoad("invia.php",vars,"POST");/*inviamo il nostro oggetto vars con il metodo sendAndLoad('file PHP che riceverà ed elaborerà i dati, nel nostro caso "invia.PHP"','oggetto che riceverà il risultato, nel nostro caso lo stesso vars','metodo di invio, nel nostro caso POST')*/
vars.onload = function(success){ /*questa funzione viene eseguita quando si verifica l'evento onload su vars, ovvero quando il nostro oggetto vars riceve la risposta dal file "invia.PHP*/
if(success){ /*se i dati sono stati passati correttamente e se l'e-mail è stata inviata, viene mostrato un messaggio di successo e vengono resettati i campi*/
if(vars.esito=="success"){
output="Invio avvenuto correttamente";
nome="";
mail="";
messaggio="";
}
else
output="Errore invio, riprovare";/*altrimenti viene mostrato un messaggio di errore*/
}
else
output="Errore invio, riprovare";/*altrimenti viene mostrato un messaggio di errore*/
}//fine funzione
}//fine if
else
output="Compilare i campi correttamente";/*se il controllo sui campi non va a buon fine ricordiamo all'utente di compilare i campi correttamente*/
}//fine on(release)


Il codice per il pulsante invia è terminato. Usciamo dal pannello Azioni per un attimo, selezioniamo il pulsante reset_btn e vi rientriamo.
Inseriamo come codice

Codice: Seleziona tutto
nome="";
mail="";
messaggio="";
output="";


che serve appunto a resettare tutti i campi.
Per quanto riguarda la parte flash abbiamo finito. Possiamo già salvare e pubblicare il nostro form in attesa di creare il file "invia.php".
Apriamo un qualsiasi editor di testi, se supporta PHP è ancora meglio. Io ad esempio uso Dreamweaver.
Creiamo un nuovo file che chiamiamo "invia.php" e vi inseriamo il seguente codice:

Codice: Seleziona tutto
<?php
$to = "tuoindirizzo@mail.it";
$mittente = strip_tags($_POST["mail"]);
$oggetto = "Invio mail dal form";
$messaggio = "Nome: ". strip_tags($_POST["nome"]) . "\nIndirizzo: ". strip_tags($_POST ["mail"])."\nMessaggio: ". strip_tags($_POST["messaggio"]);<br />$headers = "From: <$mittente>";
if(!mail($to, $oggetto, $messaggio, $headers)) die("&esito=errore&");<br />else echo "&esito=success&";
?>


Vediamo di commentarlo un pò:

Intanto i caratteri '' indicano l'inizio e la fine di uno script php. Una variabile in php viene indicata con il simbolo dollaro '$' prima del nome.
Alla variabile $to assegniamo l'indirizzo sul quale vogliamo ricevere i messaggi, a $mittente assegniamo l'indirizzo specificato dall'utente nel campo mail del form a $oggetto appunto l'oggetto del messaggio e a messaggio concateniamo insieme "Nome:" seguito dal nome che è stato specificato dal form, "Indirizzo:" seguito dall'indirizzo specificato nel form e "Messaggio:" seguito dal messaggio specificato nel form, avendo premura di andare a capo ogni volta grazie al parametro'n'. Il metodo strip_tags() elimina alcuni tag fastidiosi che verrebbero altrimenti inviati con l'email.
Visto che il metodo di invio del form che abbiamo usato è "POST" i dati nel file php li troviamo nell'array $_POST. L'array $_POST è un array associativo, ovvero un array che ci fornisce il dato corrispondente al campo che specifichiamo. Quindi se vogliamo il nome specificato nel form, non doabbiamo fare altro che richiamare $_POST["nome"], perchè 'nome' se ricordiamo bene è il nome dell'attributo del nostro oggetto vars che contiene appunto il nome del mittente. Assegniamo ala variabile $headers (che rappresenta appunto gli headers dell'e-mail che andremo ad inviare) "From: " che servirà al nostro client di posta per riconoscere il mittente.
In seguito inviamo il messaggio e facciamo un controllo sul risultato.
if(!mail($to, $oggetto, $messaggio, $headers)) die("&esito=errore&");
L'istruzione if esegue il suo contenuto se la condizione è vera. Noi vogliamo eseguire una certa operazione se l'invio dell'e-mail non è andato a buon fine e per rendere questo risultato vero usiamo l'operatore not '!' che trasforma appunto false in true e viceversa.
Qundi se l'e-mail non è stata inviata, arresta l'esecuzione del file php con il metodo die(), che ci permette inoltre di inserire un parametro che invieremo al nostro oggetto vars e nel nostro caso "errore", che sarà catturato dalla funzione che abbiamo sepcificato nel nostro form che a sua volta mostrerà un messaggio negativo. Se invece l'e-mail è stata inviata correttamente il risultato trasmesso al form sarà "success".
Naturalmente il tutto va testato su un server che interpreti php e che consenta l'invio di e-mail, altrimenti riceveremo sempre un messaggio di errore.

Non ci resta che salvare il tutto e pubblicare i file, avendo premura di inserirli nella stessa cartella.
Questo è il risultato e qui ci sono i sorgenti.
Buon divertimento!


Attenzione, devi registrarti per poter scaricare questo allegato.

_________________
Voce di uno che grida nel deserto:"Preparate la via del Signore, raddrizzate i suoi sentieri"!


Profilo
  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: ven mag 23, 2008 10:06 pm 
Avatar utente
Non connesso
Founder
Founder

Iscritto il: gio ago 09, 2007 11:35 am
Messaggi: 1374
Località: Roma
oh ma qui andiamo sempre meglio :uz:

entro qualche giorno ci proverò a farlo !

solo una cosa mr87, che ho notato nel form da te scritto per questo sito. nel tuo foglio in php mancano gli headers, per cui avremo un mittente sconosciuto e il provider di posta non riuscirà a interpretare gran parte dei caratteri.

suggerirei di aggiungere questo :

Codice: Seleziona tutto
$from="info@miosito";
$headers = "From: $from\r\n" .
      "MIME-Version: 1.0\r\n" .
      "Content-type: text/html; charset=iso-8859-1\r\n" ;


_________________
Immagine
Immagine

Immagine


Profilo
 WWW E-mail  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: ven mag 23, 2008 10:19 pm 
Avatar utente
Non connesso
Moderatore
Moderatore

Iscritto il: lun mar 31, 2008 10:50 am
Messaggi: 144
Località: Cosenza
Supercapocc grazie per l'osservazione, effettivamente ho tentato di fare un pò il furbo.
Domani aggiungerò alla guida il codice completo. :ciao:

_________________
Voce di uno che grida nel deserto:"Preparate la via del Signore, raddrizzate i suoi sentieri"!


Profilo
  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: ven mag 23, 2008 10:25 pm 
Avatar utente
Non connesso
Founder
Founder

Iscritto il: gio ago 09, 2007 11:35 am
Messaggi: 1374
Località: Roma
grazie a te ragazzo, ottimo lavoro :ok:

_________________
Immagine
Immagine

Immagine


Profilo
 WWW E-mail  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: ven mag 23, 2008 11:25 pm 
Avatar utente
Non connesso
Moderatore
Moderatore

Iscritto il: lun mar 31, 2008 10:50 am
Messaggi: 144
Località: Cosenza
Supercapocc, dopo alcune prove ho optato per l'inserimento del solo mittente negli headers, perchè rendere l'e-mail in formato html secondo me non è necessario e poi la formattazione era disordinata. Ho aggiornato i file del tutorial.
Tu comunque modifica come meglio credi il file del sito. :ok:

_________________
Voce di uno che grida nel deserto:"Preparate la via del Signore, raddrizzate i suoi sentieri"!


Profilo
  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: sab mag 24, 2008 1:22 am 
Avatar utente
Non connesso
Founder
Founder

Iscritto il: gio ago 09, 2007 11:35 am
Messaggi: 1374
Località: Roma
Eh si, stavo tentando di risolvere il problema della codifica dei caratteri nel testo della mail.

Il problema pare sia solo l'apostrofo, ho trovato in rete alcune argomentazioni a riguardo, in parecchi hanno questo problema. Ci torneremo sopra, promesso :uz:

_________________
Immagine
Immagine

Immagine


Profilo
 WWW E-mail  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: mar lug 08, 2008 7:56 am 
Avatar utente
Non connesso

Iscritto il: mar lug 08, 2008 7:43 am
Messaggi: 7
Salve ragazzi,
mi sono appena iscritto...
ho provato il codice da voi postato...tutto ok tranne il fatto che non riesco a visualizzare nulla in output(nel testo dinamico)

Ho testato con trace() e i messaggi vengono restituiti correttamente!!!
Dove sbaglio???
aspetto vostre notizie. grazie.
Rino

Ps questo il codice associato al pulsante:(è un po' diverso l'ho adattato alle mie esigenze)
Codice: Seleziona tutto
on (release) {
   //output = "";
   nome = _parent[_parent.fields_descriptions[1][1]];
   cognome = _parent[_parent.fields_descriptions[2][1]];
   mail = _parent[_parent.fields_descriptions[3][1]];
   user = _parent[_parent.fields_descriptions[4][1]];
   pwd = _parent[_parent.fields_descriptions[5][1]];
   if ((nome eq "Nome") || (cognome eq "Cognome") || (mail eq "E-mail") || (user eq "Username") || (pwd eq "Password")) {
      ceck1 = false;
   } else {
      ceck1 = true;
   }
   if (ceck1) {
      var vars = LoadVars=new LoadVars();
      vars.nome = nome;
      vars.cognome = cognome;
      vars.mail = mail;
      vars.user = user;
      vars.pwd = pwd;
      //trace (vars.nome+'-'+vars.cognome+'-'+vars.mail+'-'+vars.user+'-'+vars.pwd );
      a="http://localhost/barba-rossa.com/prova_form/registrazione.php";
      trace (a);
      vars.sendAndLoad(a, vars, 'POST');
      vars.onLoad = function(success) {
         trace("function(success): "+success);
         if (success) {
            trace("if(success): "+success);
            if (vars.esito == "success") {
               trace ("vars.esito: "+vars.esito);
               output = "Tutto ok";
               trace ("output: "+output);
               nome = "";
               cognome = "";
               mail = "";
               user = "";
               pwd = "";
            } else {
               trace ("vars.esito!=success: "+vars.esito);
               output = "Errore success";
               trace ("output: "+output);
            }
            
         } else {
            output = "errore function success";
            trace ("output: "+output);
         }
      }
      //fine funzione
   } else {
      trace ("ceck1:" +ceck1);
      output = "tutti i campi sono obbligatori";
      trace ("output: "+output);
   }
   //fine if
   //trace("ceck1: "+ceck1);
   //trace("success: "+success);
   //trace(nome);
   //trace(cognome);
   //trace("output: "+output);
}
//on (release)


Profilo
 E-mail  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: mar lug 08, 2008 9:50 am 
Avatar utente
Non connesso
Moderatore
Moderatore

Iscritto il: lun mar 31, 2008 10:50 am
Messaggi: 144
Località: Cosenza
Controlla di aver assegnato come nome variabile, nel campo "Var" del pannello proprietà, "output" al campo di testo dinamico.

_________________
Voce di uno che grida nel deserto:"Preparate la via del Signore, raddrizzate i suoi sentieri"!


Profilo
  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: mar lug 08, 2008 10:27 am 
Avatar utente
Non connesso

Iscritto il: mar lug 08, 2008 7:43 am
Messaggi: 7
si, ho messo come nome variabile e come nome istanza "output"...


Profilo
 E-mail  
 
 Oggetto del messaggio: Re: Form mail Flash+PHP
MessaggioInviato: mar lug 08, 2008 11:10 am 
Avatar utente
Non connesso
Moderatore
Moderatore

Iscritto il: lun mar 31, 2008 10:50 am
Messaggi: 144
Località: Cosenza
Perchè non posti il tuo file .fla così vediamo di trovare l'errore?

_________________
Voce di uno che grida nel deserto:"Preparate la via del Signore, raddrizzate i suoi sentieri"!


Profilo
  
 
Visualizza ultimi messaggi:  Ordina per  
Prossimo

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite