• User Attivo

    FINALMENTE FUNZIONA form in flash con php

    Ragazzi, finalmente ci sono riuscito, il mio benedetto form funziona perfettamente, o quasi, e voglio condividere con voi il mio entusiasmo ed il mio form.
    Devo solo eliminare un difettuccio, se nei campi di testo scrivo dei caratteri accentati questi mi vengono inviati sotto forma di altri codici del tipo è ì e cose simili, credo però che qualcuno di voi saprà trovare la soluzione.

    Dunque, ho realizzato il mio form in flash sul primo fotogramma, ho dato dei nomi istanza a vari campi di testo di imput, nome, cognome, cit, ragsol, evitando di inserire accenti spazi e caratteri speciali, poi su un un altro livello, ma sempre sul primo fotogramma ho inserito un clip filmato chiamato pulsanteinvia contenente il pulsante a cui ho dato il nome di istanza invia, ho fatto così per semplificare il tutto e dare un'animazione al pulsante.
    Infine ho inserito un campo di testo dinamico dando come nome della variabile controllo, questo l'ho impostato come non selezionabile.
    Fate attenzione alla sequenza di creazione dei campi di testo, sarà quella a dare la priorità di selezione ai vostri campi, per essere più chiari, quando siete nel form e premete il tasto tab si selezionerà il campo di testo che in fase di creazione avrete creato dopo il quello in vi trovate.

    A questo punto si passa ad inserire il codice ActionScript nel primo fotogramma, io l'ho inserito su di un'altro livello, il codice è il seguente.

    stop();
    _root.pulsanteinvia.invia.onRelease = function() {//carico il pulsante invia presente nel clip filmato pulsanteinvia e gli assegno la funzione onRelease
    var sendMail:LoadVars = new LoadVars();//creo la mia variabile che conterrà i valori dei campi di testo
    sendMail.nome = nome.text;//assegno ad ogni campo una variabile
    sendMail.cognome = cognome.text;
    sendMail.ragsol = ragsol.text;
    sendMail.naz = naz.text;
    sendMail.cit = cit.text;
    sendMail.cap = cap.text;
    sendMail.ind = ind.text;
    sendMail.tel = tel.text;
    sendMail.cell = cell.text;
    sendMail.fax = fax.text;
    sendMail.email = email.text;
    sendMail.testomail = testomail.text;
    sendMail.destinatario = '[email protected]'; //qui inserisco la mai a cui voglio inviare i dati
    sendMail.onLoad = function(success) {//controllo se la funzione onLoad ha avuto successo
    if (success) {//se ha successo si visualizzerà nel campo di testo dinamico chiamato controllo il messaggio contenuto nella variabile risposta, questa variabile viene prelevata dal file php
    controllo = this.risposta;
    } else {//se non ha successo la funzione onLoad uscirà un messaggio di errore
    controllo = "problema connessione";//qui inserite il messaggio di errore
    }//end if
    };//end function onLoad
    sendMail.sendAndLoad('Flash/mail.php', sendMail, 'POST');//invio i dati al file mail.php, da notare che il mio file si trova all'interno della cartella flash questo perché io ho iserito sia il file swf che il file pho in questa cartella ma non il file html contenente il file swf
    };//end function onRelease

    Ok adesso si passa al file php, creamo un file di testo e rinominiamolo mail.php
    se avete un editor tipo dreamweaver usate pure quello ma quando create il nuovo progetto dovete selezionare pagina dinamica php

    in questo file inserite il seguente codice

    <?
    $destinatario = stripslashes($_POST['destinatario']);//carica la variabile che contiene l'email di destinazione dal file swf
    $nome = stripslashes($_POST['nome']);//carica la variabile nome corrispondente al campo nome del file swf
    $cognome = stripslashes($_POST['cognome']);//carica la variabile cognome corrispondente al campo cognome del file swf
    $cit = stripslashes($_POST['cit']);//carica la variabile cit corrispondente al campo città del file swf
    $email = stripslashes($POST['email']);//carica la variabile email corrispondente al campo email del file swf
    if ($nome != '') {$valore = 5;} else {$valore = 1;}//controlla se il campo nome è pieno
    if ($valore == 5) {if ($cognome != '') {$valore = 5;} else {$valore = 2;}}//controlla se il campo cognome è pieno
    if ($valore == 5) {if ($cit != '') {$valore = 5;} else {$valore = 3;}}//controlla se il campo città è pieno
    if ($valore == 5) {if ($email != '') {$valore = 5;} else {$valore = 4;}}//controlla se il campo email è pieno
    switch ($valore) {
    case 1://se il campo nome non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $errorenome = 'il campo nome è vuoto';//messaggio che si vuole inviare
    $risposta = "&risposta=".$errorenome;
    echo utf8_encode($risposta);
    break;
    case 2://se il campo cognome non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $errorecognome = 'il campo cognome è vuoto';//messaggio che si vuole inviare
    $risposta = "&risposta=".$errorecognome;
    echo utf8_encode($risposta);
    break;
    case 3://se il campo città non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $errorecit = 'il campo città è vuoto';//messaggio che si vuole inviare
    $risposta = "&risposta=".$errorecit;
    echo utf8_encode($risposta);
    break;
    case 4://se il campo email non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $erroremailvuota = 'il campo email è vuoto';//messaggio che si vuole inviare
    $risposta = "&risposta=".$erroremailvuota;
    echo utf8_encode($risposta);
    break;
    case 5://se tutti i campi sono pieni si esegue il controllo dell'indirizzo e-mail
    if (!eregi("^[a-z0-9][
    .a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $email))// Controlla i caratteri che compongono l'e-mail
    {//le tre linee seguenti inviano un messaggio di errore se l'indirizzo e-mail non è corretto
    $erroremail = 'email non valida';//messaggio che si vuole inviare
    $risposta = "&risposta=".$erroremail;
    echo utf8_encode($risposta);
    }//end if
    else {//altrimenti tutti i dati inviati dal form flash vengono inviati all'indirizzo presente nella variabile destinatario
    if ( isset($HTTP_POST_VARS))
    if (mail("$destinatario","NUOVO CONTATTO","Nome: $_POST[nome] \nCognome: $_POST[cognome] \nRagione Sociale: $_POST[ragsol] \nNazione: $_POST[naz] \nCittà: $_POST[cit] \nCAP: $_POST[cap] \nIndirizzo: $_POST[ind] \nTel.: $_POST[tel] \nCell.: $_POST[cell] \nFax: $_POST[fax] \ne-mail: $_POST[email] \nTesto: $_POST[testomail]","From: $_POST[email]"))
    {//una voltsa inviata la mail viene inviata al file swf una variabile &risposta con il messaggio email inviata
    $esitook = 'email inviata';//messaggio che si vuole inviare
    $risposta = "&risposta=".$esitook;
    echo utf8_encode($risposta);
    }//end if
    }//end else
    }//end switch
    ?>

    a questo punto tutto dovrebbe funzionare, avrete solo un problema che è quello che ho io a cui vorrei dare una soluzione, se notate quando inviate una mail ed iserite nei campi di testo delle lettere accentate nella mail ricevuta le ritroverete sostituite da altri simboli, credo sia solo un problema di codici, questo problema infatti lo ritrovavo quando provavo ad inviare le variabili a flash, ecco il perché dell'istruzione utf8_encode, questa mi ha risolto il problema, ora devo solo capire come usarla per correggere il testo inviato.
    Se qualcuno di voi sa come fare mi può dare una mano?
    Grazie e spero che dopo aver assillato tutti con le mie domande possa essere io a dare una mano a voi.


  • User Attivo

    Ho trovato un errore che influiva sull'esecuzione del file swf se aperto con internet explorer.
    Anziché creare i campi, il pulsante e la grafica sulla root io avevo fatto solo il pulsante in un clip filmato, è invece necessario realizzare il tutto in un clip filmato posto sul primo fotogramma della nostra timeline, all'interno di questo inserite l'altro clip filmato contenente il pulsante, di conseguenza per rintracciare il pulsante il codice sarà

    _root.form.pulsanteinvia.invia.

    anziché _root.pulsanteinvia.invia.

    form è il nome istanza del clip filmato contenente il tutto
    ovviamente anche per raggiungere i campi di testo sarà necessario impostare un percorso, per es.
    _root.form.nome.text;

    io ho preferito dare un nome di istanza anche al campo controllo, quello dove devono apparire i messaggi
    se date un nome di istanza anche a questo ricordate di eliminare dalle proprietà dello stesso la variabile controllo
    anche in questo caso il percorso per raggiungerlo cambia

    _root.form.controllo.text = this.risposta;

    e

    _root.form.controllo.text = "problema connessione";

    Ok tutto qui, appena capisco come risolvere anche il problema relativo ai caratteri vi farò sapere. :ciauz:


  • User Attivo

    Non credevo ci fosse bisogno di aprire un nuovo post, neavevamo uno in corso dove abbiamo discusse del this["risposta"], ricordi...?
    E' praticamente identico al this.risposta, sono metodi per recuperare un attributo dell'oggetto this.
    Complimenti, per i caratteri ci sarà sicuramente una soluzione semplice,
    Momino


  • User Attivo

    Ho fatto un nuovo post perché volevo mettere in evidenza uno script che finalmente funziona, se ho esagerato mi scuso.
    Ora sul mio sito lo sto rendendo più complesso di quello che ho postato, sinceramente per ora ho tralasciato il problema dei caratteri. Nella nuova versione anziché inviare dal file php un valore che restituiva direttametente un messaggio di errore da stampare nel campo di testo dinamico ho iserito dei valori, in base a quiesti valori tramite il metodo switch porto l'esecuzione del filmato a vari clip filmato che visualizzano il messaggio in un modo graficamente più carino, che volte sono pignolo, in ogni caso sto avendo problemi perché il clip filmato richiamato va in loop, sto cercando di capire il perché, forse dipende dalla variabile risposta che non si azzera, booo
    hai qualche idea?


  • User Attivo

    Fammi capire:
    nel file php scrivi qualcosa del tipo:
    [php]echo "&risposta=benvenuto";[/php]e nella funzione onLoad hai una cosa del tipo:

    if (this.risposta == "benvenuto") {gotoAndStop(2); }
    

    Ora il filmato ti riparte dal fotogramma 2 ma va in loop... giusto?
    Prova semplicemente a mettere uno stop(); nell'actionscript relativa al fotogramma 2... Dovrebbe essere semplice se ho capito bene...
    Facci sapere!!


  • User Attivo

    scusa se non ti ho risposto subito ma oggi non ero in casa, sono andato a fissare la data del mio matrimoniooooooo, mi sposoooo.
    Comunque + o meno si, anche se uso switch e non if, in pratica il codice principale è contenunto nella funzione onRelease che è sul primo fotogramma della root, poi in un clip filmato ho il form con i campi di testo, al secondo fotogramma del clip filmato ho il primo messaggio di errore, e così via, fino al messaggio di invio avvenuto. ogni fotogramma contenente il messaggio di errore contiene a sua volta una animazione che dopo pochi secondi richiama il primo fotogramma della root per ricominciare da capo ad inserire i messaggi.
    Ti copnfesso che ora, mentre scrivo mi è venuto un dubbio, può essere che i singoli messaggi vanno in loop perché sono delle semplici interpolazioni di tipo grafico e non dei clip filmato veri e propri? Forse il problema è solo quello, se è così sono davvero uno stupido a non averci pensato prima, faccio una prova e poi vi do la risposta.


  • User Attivo

    Peccato, non era quello il problema, ho provato realizzando il tutto come clip filmato ma non va, stesso identico problema, il clip richiamato va in loop, anche se è presente uno stop sul suo fotogramma, forse devo usare una funzione tempo che al termine di questo mi riporta al primo fotogramma della _root anche se credo non cambierebbe nulla.
    Che ne pensi?


  • User Attivo

    Penso che se alleghi il .fla ne capirei di più....:sbonk:
    Prima di risponderti vorrei fare un riepilogo:

    Fotogramma 1: hai un clip filmato con dentro:
    Fotogramma 1.1: il form per inserire i dati;
    Fotogramma 1.2: il messaggio di errore per l'email (esempio);
    Fotogramma 1.3: il messaggio di errore per la password (esempio);
    .....
    Fotogramma 1.x: il messaggio di benvenuto.

    Ogni fotogramma 1.y (1<y<x) contiene un'altro clip filmato con dentro un'animazione interpolata, giusto...?

    e quindi andrà dal fotogramma 1.y.1 al fotogramma 1.y.z, interpolando una forma o un movimento da 1 a z.

    la domanda mia è questa: hai messo lo stop() sul fotogramma 1.y.z?

    L'ho scritta in questi termini perchè è davvero difficile andare così a fondo solo con la parola scritta, davvero difficile... Questi termini matematici aiutano a rendere univoche le definizioni e non lasciano spazio a doppie interpretazioni. Mi dispiace tirare così a lungo il tuo problema...

    P.S. Auguri sposo!!! :smiley32:


  • User Attivo

    mi spiace ma non riesco ad inviarti il file fla perché anche se compresso occupa più del consentito, questo comunque è il codice nel primo fotogramma, poi è come hai detto tu, ho il clip filmato con nome istanza form che contiene sul primo fotogramma il form con tutti i campi di testo, questi sono presenti anche sotto i fotogrammi successivi, il pulsante invece è presente solo sul primo fotogramma. Come ultimo livello del **form **ne ho inserito uno dove inserisco solo gli stop, ad ogni fotogramma corrisponde uno stop. Come vedi in questo codice io richiamo il nome del fotogramma non il numero ma questo solo per comodità, ho visto che non cambia assolutamente nulla.
    Nel secondo fotogramma, per intenderci quello chiamato **err1 **vi è il primo clip filmato contenente l'animazione che mi interessa, alla fine di questa vi è un _root.gotoAndStop (1); stessa cosa per gli altri clip.
    Ora proverò a fare un'altra cosa, anziché portarmi al fotogramma contenente il clip filmato mi porto direttamente al su interno, forse così funzionerà, spero:x

    stop();
    _root.form.pulsanteinvia.invia.onRelease = function() {
    var sendMail:LoadVars = new LoadVars();
    sendMail.nome = _root.form.nome.text;
    sendMail.cognome = _root.form.cognome.text;
    sendMail.ragsol = _root.form.ragsol.text;
    sendMail.naz = _root.form.naz.text;
    sendMail.cit = _root.form.cit.text;
    sendMail.cap = _root.form.cap.text;
    sendMail.ind = _root.form.ind.text;
    sendMail.tel = _root.form.tel.text;
    sendMail.cell = _root.form.cell.text;
    sendMail.fax = _root.form.fax.text;
    sendMail.email = _root.form.email.text;
    sendMail.testomail = _root.form.testomail.text;
    sendMail.destinatario = '[email protected]';
    sendMail.onLoad = function(success) {
    if (success) {
    switch (this.risposta) {
    case "A" :
    _root.form.gotoAndStop("err1");
    break;
    case "B" :
    _root.form.gotoAndStop("err2");
    break;
    case "C" :
    _root.form.gotoAndStop("err3");
    break;
    case "D" :
    gotoAndStop._root.form("err4");
    break;
    case "E" :
    gotoAndStop._root.form("err5");
    break;
    case "F" :
    gotoAndStop._root.form("err6");
    default :
    _root.form.controllo.text = this.risposta;
    }
    } else {
    _root.form.controllo.text = "problema connessione";
    }
    //end if
    };
    //end function onLoad
    sendMail.sendAndLoad('Flash/mail.php', sendMail, 'POST');
    };
    //end function onRelease


  • User Attivo

    Una cosa non mi è chiara ancora:
    cosa ti va in loop, i vari clip filmato "err1", "err2", ecc oppure tutta l'esecuzione, nel senso ke riparte dal form e ti fa tutti i cliè filmato "err"...?
    Se ti va il loop solo "err1" per esempio, prima di mettere "_root.gotoAndStop(1)" prova a mettere uno "stop()"; oppure posta il codice AS di questi "err", ok?
    Momino


  • User Attivo

    ho messo il file zip sul mio server, lo puoi scaricare direttamente da li
    http://www.jumboscreen.it/nuovosito/Form_Flash_PHP.zip


  • User Attivo

    controlla il link perchè non funge...


  • User Attivo

    scusa, avevo provato a modificare il link direttamente modificando la discussione ma non funziona, rimane quello vecchio
    così dovrebbe andare
    http://www.jumboscreen.it/nuovosito/Form_Flash_PHP.zip


  • User Attivo

    Una cosa non mi è chiara ancora:
    cosa ti va in loop, i vari clip filmato "err1", "err2", ecc oppure tutta l'esecuzione, nel senso ke riparte dal form e ti fa tutti i cliè filmato "err"...?
    Se ti va il loop solo "err1" per esempio, prima di mettere "_root.gotoAndStop(1)" prova a mettere uno "stop()"; oppure posta il codice AS di questi "err", ok?
    Momino

    mi vanno in loop i clip presenti nei target, non tutto, in pratica non viene ricaricato il primo fotogramma come dovrebbe. guarda il file fla


  • User Attivo

    se volessi usare il metodo attachMovie (); per caricare il clip filmato direttamente dalla libreria, come dovrei fare?
    Forse in questo modo risolvo il problema del loop, ho letto la guida di flash ma non riesco a capirlo bene, sarò stupido io ma proprio non ci riesco, sembra che devo prima creare un duplicato del clip e poi richiamarlo, ma non capisco bene come, chi mi da ancora una mano?


  • User Attivo

    Allora,
    ci sono un bel pò di cose che ho dovuto rettificare, ma alla fine il loop scompare:

    • il tuo "_root" ha un solo frame, perchè usavi "_root.gotoAndStop(1)"? E' per questo che andava in loop il messaggio di errore. Il messaggio di errore sta nel clip filmato "form", per questo è "form" che deve ripartire dal primo fotogramma, e non "_root", usando "_root.form.gotoAndStop(1)".
    • per quale strana ragione hai definito la funzione "onRelease" del bottone "invia" nel primo fotogramma della "_root"? così facendo, anche se il loop non compare, il pulsante non funziona più, perchè perde l'azione "onRelease". Copia e incolla il codice nel bottone sotto l'evento "on(Release)".
    • vedi bene il campo delle email, perchè se rimane vuoto non da errore, al contrario degli altri 3 (nome, cognome, città).Le prime due modifiche le ho testate e sono funzionanti, puoi provare su http://decatrade.ilbello.com/form2.swf, se vuoi posso mandarti anche il file .fla per risparmiare tempo, dimmi tu...

    Controlla e fammi sapere,
    Momino


  • User Attivo

    this.attachMovie("id", "newName", depth:Number, [initObject:Object]);

    Vediamo di capirci qualcosa, :mmm:
    Prima di tutto è scritta bene la stringa?
    Se si

    id = È il nome immesso nel campo Identificatore nella finestra di dialogo Proprietà del concatenamento del clip filmato che ho in libreria?

    newName = È il nome d'istanza del clip filmato che voglio creare o di quello che voglio richiamare dalla libreria?

    depth:Number = "Un numero intero che specifica il livello di profondità in cui viene inserito il file SWF." Questo è quello che dice la guida di flash, ma che significa esattamente?

    [initObject:Object] = OPZIONALE, sono le proprietà del filmato che voglio creare o di quello presente nella libreria? Che tipo di proprietà posso inserire? Nel caso possa inserire le coordinate di posizionamento del nuovo clip come devo fare?

    Sempre pieno di domande, credo che se la guida di flash era scritta più semplicemente ne avrei meno, scusatemi.


  • User Attivo

    sto provando a caricare il link che mi hai dato ma non funziona, rimane in attesa di risposta dal server.
    Dunque ti rispondo alla domanda (per quale strana ragione hai definito la funzione "onRelease" del bottone "invia" nel primo fotogramma della "_root"?)
    L'ho fatto perché prima avevo messo tutto sullo stage e non all'interno di un clip filmato, questo mi dava un problema su internet explorer, ovvero la prima volta che andava in esecuzione il file swf non avevo problemi ma se aggiornavo la pagina o vi ritornavo, il play andava prima al secondo fotogramma e poi tornava al primo, facendo così avevo risolto quel problema.
    Se ho capito bene tu vuoi mettere il codice direttamente nel codice del pulsante senza usare una funzione?
    Per quel che riguarda gli altri errori, non avendo ancora risolto il problema loop non sono andato avanti nella realizzazione degli altri eventi, mi stavo concentrando solo sul primo.


  • User Attivo

    id = È il nome immesso nel campo Identificatore nella finestra di dialogo Proprietà del concatenamento del clip filmato che ho in libreria?

    Corretto

    newName = È il nome d'istanza del clip filmato che voglio creare o di quello che voglio richiamare dalla libreria?
    E' il nome del clip filmato a cui vuoi attaccare quello della libreria.
    depth:Number = "Un numero intero che specifica il livello di profondità in cui viene inserito il file SWF." Questo è quello che dice la guida di flash, ma che significa esattamente?
    E' difficile usare Flash (e le applicazioni grafiche in generale, vedi Photoshop) senza avere il concetto di profondità. Come sai, il Flash è organizzato in livelli, i quali si sovrappongono l'uno all'alto a partire dal primo, quindi il primo livello verrà visualizzato "sopra" il secondo, che verrà visualizzato sopra il terzo, ecc...
    Anche all'interno dello stesso livello esistono diverse profondità, in quanto esistono diversi elementi. Il concetto è sempre quello, per trovare la prossima profondità si usa "_root.getNextHighestDepth()", che sicuramente avrai trovato nella guida di Flash, ce ne sono a milioni... 😄
    Con questa funzione, trovi il prossimo livello di profondità per visualizzare un elemento sovrapposto a tutti gli altri, quindi fai attenzione a come organizzi i livelli...;)
    L'opzionale serve a definire i parametri del clip filmato che ATTACCHI, infatti quello a cui attaccarlo deve essere già presente sullo stage oppure creato con "createEmptyMovieClip()", quindi fa attenzione a questo...
    E' complicatuccia come cosa, ma esercitandoti non avrai grosse difficoltà...
    Momino


  • User Attivo

    Boh, riprova così, ma indubbiamente il link funziona...
    http://decatrade.ilbello.com/form.zip