Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Pillola] Php: Form e Form multipage *per principianti*

    Eccomi qui con la mia prima pillola(mi sento quasi cresciuto rispetto ai primi tempi in cui frequentavo questo forum e non conoscevo una mazza di niente!), inizio con una pillola semplice semplice , spero sia pubblicato soprattutto perchè sono sempre continue le richieste di aiuto da parte di utenti principianti per "costruire" un Form(o Modulo).

    Innanzitutto iniziamo col chiarire cos'è un form. Un form è un modulo messo a disposizione dal webmaster, utile all'utente per potersi registare ad un servizio(quindi inviare i dati, che successivamente, dopo verifiche, saranno inseriti nel database), o spedire una mail(per questo c'è già un altra Pillola), in ogni caso per dare la possibilità all'utente di interagire con il sito in questione tramite lo scambio di dati.
    L'uso del PHP in un form, ed indispensabile se si vuole manipolare i dati con dinamicità, e soprattutto fornire all'utente un servizio istantaneo(quindi rispondergli all'istante automaticamente, registrarlo automaticamente) e non perdere tempo prezioso().

    Procediamo con la prima pagina solitamente html, che contiene la parte esteriore del form, ovvero i campi di inserimento testo, oppure select, oppure input radio,checkbox e tutti quelli che vorremo usare. In questo caso scriviamo un semplice form con un campo text ed una textarea.

    IL FORM
    form.html
    Codice PHP:
    <form name='Test' action='modulo.php' method='POST'>
    Email: <input type='text' name='Email' id='Email'>
    Commento: <textarea name='Commento'></textarea>
    <
    input type='Submit' value='Invia' name='Test'>
    </
    form
    Su questo codice è inutile soffermarsi, dovreste conoscerne tutti il significato (altrimenti prima di procedere con l'uso di php in un form, leggetevi prima qualche buona guida html).

    Ora passiamo, alla seconda pagina "modulo.php" appunto che abbiamo scritto nell'action del form. In questa pagina estrapoleremo i dati dal form e li manipoleremo a nostro piacimento, dipende dal fine.
    modulo.php
    Codice PHP:
    //Siccome il metodo usato dal form per l'invio dei dati e di tipo POST allora le variabili con i loro contenuti assumeranno la forma $_POST['Nome_Campo'];

    //assegnamo un nome più semplice alle variabili
    $Email $_POST[Email];
    $Commento $_POST[Commento];

    //controlliamo che tutti i campi siano stati compilati
    if($Email != '' && $Commento != '') { //quelle in parentesi sono apici singole e non virgolette

    //ora possiamo inserire i dati nel database se vogliamo, oppure spedirli tramite email. Il consiglio che do però e di verificare prima il corpo del messaggio, visto che il form è lo strumento principe con cui i furbetti vogliono fare danni. Ci sono molte funzioni a disposizione, io consiglio le seguenti:

    //rendiamo il corpo del messaggio innocuo
    $Email stripslashes('$Email');
    $Commento stripslashes('$Commento');

    $Email mysql_real_escape_string('$Email');
    $Commento mysql_real_escape_string('$Commento');

    //ed infine

    $Email htmlentities('$Email');
    $Commento htmlentities('$Commento');

    //Bene. Ora possiamo procedere col manipolare i dati. Vi faccio l'esempio del caso maggiormente utilizzato, ovvero memorizzare i dati nel database.

    //facciamo una query insert. Ovviamente esistono molte forme per fare una query, io uso per abitudine questa, tenendo presente che $db è il risultato della connessione al database.
    $query "INSERT INTO Nome_Tabella (Email,Commento) VALUES ('$Email', '$Commento')";
    $result mysql_query($query$db);

    //Bene. Se avete scritto il nome della tabella ed i nomi dei campi in modo corretto, i dati verranno inseriti senza problemi nel database. Magari stampiamo una frasetta per far capire all'utente che tutto è avvenuto in modo corretto
    echo"Hai completato il form senza problemi; i tuoi dati sono stati registrati.";

    //Ora mettiamo il caso voi vorreste controllare che l'email inserita non sia già presente nel database, e quindi impedire la finalizzazione del form se così fosse. Questa parte di codice, nel caso in cui vi interessi, dovrà essere inserita prima della query precedente.

    //Facciamo una query select dalla tabella che contiene Email e Commento
    $query "SELECT Email FROM nome_tabella WHERE Email = '$Email'";
    $result mysql_query($query$db);
    $row mysql_fetch_array($result);
    //e quest'ultima riga conta se ci già Email come quella del form nella tabella
    $num1 mysql_num_rows($result);

    //ora scriviamo la condizione che impedirà o lascerà campo libero al proseguimento del form
    if($num1 == '1') { echo" L'email inserita è già presente nel database, usane una differente"; }
    else { 
    //procediamo con il continuo del form. Ovviamente ricordiamo di chiudere la parentesi }

    //ora possiamo chiudere la parentesi graffa che abbiamo aperto con tutti i campi compilati
    }
    //e scriviamo quest'altra porzione di codice in modo da non lascere l'utente beato davanti ad una pagina bianca, nel caso in cui abbia sbagliato qualcosa durante la compilazione del modulo
    else { echo"Hai lasciato uno dei campi del modulo vuoto. Ricorda che devi compilare tutti i campi."; }

    //fatto questo possiamo reindirizzare l'utente alla pagina origine.
    echo"<meta http-equiv='refresh' content='5; URL= form.html'>"
    IL FORM MULTIPAGE
    Abbiamo visto come creare un form method POST, e come gestire i dati ricavati da esso.
    Ora poniamo il caso in cui abbiamo la necessità di creare un form che si compili in più pagine.
    Non ho mai letto una guida specifica per questo caso, quindi ho sempre fatto da me; ed in base alle mie esperienze e capacità esistono 2 metodi. Il primo molto dinamico che fa uso delle Sessioni, il secondo più macchinoso fa uso dei campi hidden. Siccome questa è una pillola che consulteranno utenti principianti, che quindi hanno poca pratica con le sessioni, capiremo come funziona il secondo metodo.

    Riportiamo la prima pagina dell'esempio precedente, uguale in questo caso come prima pagina.
    Pagina1.php
    Codice PHP:
    <form name='Test' action='pagina2.php' method='POST'>
    Email: <input type='text' name='Email' id='Email'>
    Nome: <input type='text' name='Nome' id='Nome'>
    <
    input type='Submit' value='Vai alla 2° Pagina' name='Test'>
    </
    form
    Nella prima pagina quindi prendiamo i primi dati richiesti, email e nome. Ora vedremo come
    resteranno memorizzati anche nella seconda pagina.
    pagina2.php
    Codice PHP:
    //assegnamo il solito nome più breve alle variabili e controlliamo se abbiamo compilato i campi
    $Email $_POST[Email];
    $Nome $_POST[Nome];
    if(
    $Email != '' && $Nome != '') { 

    //solito lavoro di pulitura da stringhe pericolose
    $Email stripslashes('$Email');
    $Nome stripslashes('$Nome');

    $Email mysql_real_escape_string('$Email');
    $Nome mysql_real_escape_string('$Nome');

    $Email htmlentities('$Email');
    $Nome htmlentities('$Nome');

    //in questo caso il form sarà stampato da echo, poichè dobbiamo mantenerne l'invisibilità nel caso in cui la condizione non sia verificata
    echo"<form name='Test' action='pagina3.php' method='POST'>
    Età: <select name='Eta'><option value='18'>18</option><option value='19'>19</option></select>
    //ne metto solo due di option per non dilungarmi
    Residenza: <input type='text' name='Res' id='Res'>
    <input type='hidden' name='Email' value='
    $Email'>
    <input type='hidden' name='Nome' value='
    $Nome'>
    <input type='Submit' value='Vai alla 3° Pagina' name='Test'>
    </form>"

    //vediamo cosa ho fatto:
    //Ho scribacchiato il codice che mi servirà per trasportare $Email e $Nome nella prossima pagina ovvero sfruttando il campo hidden
    //il tipo hidden è un campo form "invisibile" che ha valore "value='" di quel che inseriamo noi. In //questo caso le variabili $Email e $Nome



    //Poi terminato l'echo ho chiuso la parentesi graffa e messo l'else che mi stamperà una semplice frase e non il form nel caso la condizione non sia verificata

    }
    else { echo
    "Non hai compilato tutti i campi"
    //e mettiamo il solito redirect
    echo"<meta http-equiv='refresh' content='5; URL= Pagina1.php'>";

    Benissimo, ora possiamo passare alla terza, ed in questo caso, ultima pagina del form. Ovviamente con questa tecnica voi potrete dividere il form in quante pagina vi pare e piace.
    Vediamo la pagina finale

    pagina3.php
    Codice PHP:
    //cominciamo con le solite assegnazioni di nomi variabili e le verifiche

    $Email $_POST[Email];
    $Nome $_POST[Nome];
    $Eta $_POST[Eta];
    $Res $_POST[Res];

    //la verifica in questo caso riguarderà solo le ultime due variabili, poichè se siamo giunti a questa pagina, significa che $Email e $Nome già sappiamo che sono idonee.
    if($Eta != '' && $Res != '') { 


    $Eta stripslashes('$Eta');
    $Res stripslashes('$Res');

    $Eta mysql_real_escape_string('$Eta');
    $Res mysql_real_escape_string('$Res');

    $Eta htmlentities('$Eta');
    $Res htmlentities('$Res');

    //ora abbiamo ben 4 variabili di form, recuperate da due pagine di form, che come al solito possiamo utilizzare come ci pare e piace. Esempio di query:

    echo"Modulo completato!!";
    $query "INSERT INTO nome_tabella (Nome,Email,Eta,Res) VALUES ('$Nome', $Email', '$Eta', '$Res')";
    $result mysql_query($query$db);

    //chiudiamo la parentesi graffa della condizione
    }
    else { echo
    "Non hai compilato tutti i campi";
    //ora fate molta attenzione. scrivire un semplice redirect , ci porterebbe alla pagina2.php 
    //ma con le variabili POST Email e Nome svuotate, quindi per mantenere il loro valore possiamo sia aggiungere all'url del redirect due variabili GET (es...php?Eta=$Eta&Res=$res'), 
    //ma in questo caso dovremmo aggiungere nella verifica di pagina2.php altre due condizioni ($_GET[Eta] e $_GET[Res]). 
    //Tutto questo funzionerebbe, ma non è il massimo della sicurezza. Altrimenti, invece di un redirect automatica, scriviamo un semplice bottone submit form Torna Indietro, che invii nuovamente tramite campo hidden, le variabili $_POST[Email] e $_POST[Nome].
    //In questo caso è la soluzione migliore.

    //chiudiamo nuovamente la parentesi graffa, e che Dio sia con voi :D

    Per chiarimenti, suggerimenti e opinioni postate grazie
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  2. #2
    per correttezza ora posto il metodo Session per il form multipage.
    Per quanto riguarda la conoscenza basilare delle sessioni vi rimando alla pillola di Kuarl
    http://forum.html.it/forum/showthrea...hreadid=291909
    FORM MULTIPAGE CON SESSION

    Abbiamo visto che un form multipage è molto semplice da fare, basta puntare l'action del form di ogni pagina a quella successiva, fino ad arrivare all'ultima pagina che avrà raccolto tutte le variabili $_POST con cui potrete farci quel che vi pare.
    Abbiamo visto che un modo molto "artigianale" e non del tutto consono per conservare le variabili di pagina in pagina è usare il campo invisibile "hidden". Ora vedremo un metodo molto più idoneo, flessibile ed efficace; cioè l'uso delle sessioni. Vi cito il minimo indispensabile dalla pillola in alto
    "Le sessioni sono un strumento molto efficace per tenere traccia dell'utente, e di quello che fa nelle pagine del nostro sito."

    Si richiede: php 4.1.x o superiore
    Form.php
    Codice PHP:
    //scriviamo la nostra solita prima pagina del form
    <form name='Test' action='pagina2.php' method='POST'>
    Email: <input type='text' name='Email' id='Email'>
    Commento: <textarea name='Commento'></textarea>
    <
    input type='Submit' value='Vai alla 2° pagina' name='Test'>
    </
    form
    il form punta alla pagina
    pagina2.php
    Codice PHP:
    //ora iniziamo l'uso della sessione
    <?php
    session_start
    ();
    //passiamo il contenuto della viariabile post alla variabile di sessione
    $_SESSION['Email'] = $_POST[Email];
    $_SESSION['Commento'] = $_POST[Commento];

    //abbiamo salvato le variabili che ora saranno memorizzate per sempre grazie alla sessone.
    //procediamo col nostro form, e facciamo la stessa cosa nella pagina successiva
    //e via dicendpo fino ad arrivare all'ultima pagina.
    //è importante che in ogni pagina ci sia inizialmente il session_start(); altrimenti
    //le variabili non saranno ricordate.
    //Non dimenticate di fare i solito controlli prima dei form (if(bl abla bla) altrimenti sarà tutto
    //vulnerabile!
    Come vedete è molto semplice, anzi probabilmnete più semplice del primo metodo, l'importante è che abbiate capito le sessioni ed il loro concetto.
    Basta usare un pò di fantasia per e si può fare tutto quello che si vuole. Ad esempio se non
    abbiamo un c***o da fare, potrebbo addirittura usare i files di testo.

    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  3. #3
    ciao Manuelandro
    (sono una principiante)
    ho fatto una form mail semplice che riporto di seguito, vorrei dare una risposta in automatico a chi mi scrive:
    esempio: lo STAFF ti ringrazia e ti ricontatterà al più presto
    come posso fare?
    il server dove ho collocato il sito mi fa il reidirect ma non mi da la possibilità di dare una risposta in automatico il server supporta linguaggio php e asp.
    grazie in anticipo
    ZOE

    <div id="Layer7" style="position:absolute; left:47px; top:138px; width:980px; height:39px; z-index:12" class="due">
    <form method="post" action="mailto:info@miodominio.org" enctype="text/plain">
    <input type="text" name="Nome / Cognome" size="30">
    <input type="text" name="Telefono" size="30">
    <input type="text" name="E-Mail" size="30">
    <input type="submit" value="Invia" name="submit">


    <span class="due"><font color="#FFFFFF"> </font></span>
    </form>
    </div>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.