Come usare i form per scambiare dati
Lutilizzo più comune per uno script CGI è quello di ricevere
dati da un form, e provvedere alle azioni necessarie. Ma come funziona
questo scambio di dati? Vediamo il sorgente HTML di un form molto
semplice:
<html><body>
<form action="http://localhost/cgi-bin/script.pl" method="GET">
Nome: <input type="text" name="nome"><BR>
Cognome: <input type="text" name="cognome"><BR>
<input type="submit">
</form>
</body></html>
(se non sapete interpretare le linee precedenti, beh... questo è
il sito adatto per cercare un corso di HTML :-). Il tag più importante
è <form>, che contiene due parametri:
action="URL"
method="METHOD"
URL è l'indirizzo dello script che riceverà i dati. Può essere
un URL assoluto, come in questo caso, oppure relativo.
METHOD è il metodo, appunto, con cui verranno inviati i dati. I
due metodi che useremo sono "GET" e "POST".
Vedremo in seguito le differenze tra i due.
Dopo il tag <form>, ci interessano i due tag <input>,
ed in particolare il parametro "name": questo è il nome
con cui potremo ritrovare ciò che lutente ha scritto nei campi
di input.
Avete ancora lo script della lezione precedente, vero? Bene. Modificate
il parametro <action> in modo che punti al nostro script,
e salvate il file come "prova.html" o un nome qualunque.
Adesso fate partire IE, oppure Netscape, ed aprite il nostro file
html. Vedrete un piccolo form dove inserire il vostro nome e cognome.
Una volta inseriti, premete "Submit" e vedrete riapparire
la stessa serie di linee incomprensibili dellaltra volta.
Ma...
...ma adesso cercate la variabile QUERY_STRING. Dovrà essere qualcosa
di simile:
QUERY_STRING: nome=alfio&cognome=puglisi
REQUEST_METHOD: GET
Se non vedete il vostro nome e cognome (o qualunque cosa abbiate
scritto nel form), fermatevi, tornate indietro, riprovate e controllate
di aver scritto tutto giusto. Per poter dire che tutto sta funzionando,
DOVETE vederli.
Cosa scriveremo nel nostro script per accedere a questi dati? Esperti
di Perl come siete, vi basterebbe una piccola regexp per estrarre
tutto e il contrario di tutto... e in effetti è quello che facevo
io fino ad un po di tempo fa. Ma è molto meglio usare il modulo
CGI, che è compreso in tutte le distribuzioni Perl:
#!/usr/local/bin/perl
use CGI;
$query = new CGI;
print "Content-type: text/html\n\n";
print "<html><body>\n";
$nome = $query->param('nome');
$cognome = $query->param('cognome');
print "Nome: $nome <BR> Cognome: $cognome\n";
print "</body></html>\n";
vediamo in dettaglio le nuove istruzioni di questo script:
use CGI;
informa il Perl che useremo il modulo CGI, e si occupa di caricare
le librerie apposite
$query = new CGI;
crea un nuovo oggetto CGI, a cui ci riferiamo tramite la variabile
$query. Al momento della creazione, loggetto CGI va a vedere
la QUERY_STRING e si occupa di interpretarla al meglio.
$nome = $query->param('nome');
Qui le cose si fanno interessanti: loggetto CGI ($query) ha
già in memoria la lista dei parametri passati. Per trovare il loro
valore, non dobbiamo fare altro che chiederli con il metodo param(),
che accetta in ingresso il nome del parametro richiesto.
$cognome = $query->param('cognome');
Come sopra, chiediamo il valore del parametro "cognome".
Beh, è piuttosto facile, no? Loggetto CGI ha altre 1001 funzioni
che possono tornare utili, ma vi assicuro che nel 90% dei casi ci
limiteremo a crearlo e a fare tanti param() per prendere la lista
degli argomenti. Se siete interessati al resto, potete studiarvi
la documentazione in linea che è molto corposa. Ovviamente, quando
incontreremo dei casi particolari ve li spiegherò in dettaglio.
Ah già, vi avevo promesso di spiegarvi la differenza tra GET e POST.
Ma voglio un discorso fatto per bene, e perciò mi ci vorrà tutta
la prossima lezione.
Torna all'indice Generale del corso di Corso di CGI di Software Planet