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