I linguaggi del Web - HOEPLI.it · 4.19 Gli oggetti del browser 111 4.20 Il documento (document)...
Transcript of I linguaggi del Web - HOEPLI.it · 4.19 Gli oggetti del browser 111 4.20 Il documento (document)...
P a o lo C a m a g n iR ic c a rd o N ik o la s s y
I linguaggi del WebHTML, CSS, JavaScript,VBScript, ASP, PHP
EDITORE ULRICO HOEPLI MILANO
Copyright © Ulrico Hoepli Editore S.p.A. 2009via Hoepli 5, 20121 Milano (Italy)
tel. +39 02 864871 – fax +39 02 8052886
e-mail [email protected]
www.hoepli.it
Tutti i diritti sono riservati a norma di legge
e a norma delle convenzioni internazionali
ISBN 978-88-203-4225-8
Ristampa:
4 3 2 1 0 2009 2010 2011 2012 2013
Realizzazione editoriale
ART Servizi Editoriali S.p.A. - Bolognawww.art.bo.it
Coordinamento editoriale: Monica Monari
Redazione: Simona Sansavini
Progetto grafico: Marina Baldisserri
Impaginazione: Sonia Bertusi
Copertina: MN&CG S.r.l., Milano
Stampa: Arti Grafiche Franco Battaia S.r.l. - Zibido San Giacomo (MI)
Printed in Italy
UN TESTO PIÙ RICCO E SEMPRE AGGIORNATOAlla pagina web www.hoeplieditore.it/4225-8 sono disponibili:
• materiali didattici integrativi;
• eventuali aggiornamenti dei contenuti del testo;
• un estratto esemplificativo del volume in formato PDF che può essere
consultato, scaricato e stampato.
3
Presentazione 6
Modulo 1 - Le reti, l’HTML e i fogli di stile 7
U.A. 1 - Le reti di computer 8
1.1 Le reti di computer 8
1.2 Le topologie di rete 9
1.3 Il modello ISO/OSI e Internet 10
1.4 Il cablaggio e i dispositivi di rete 11
1.5 Gli indirizzi IP 13
1.6 I protocolli e il routing 14
1.7 La rete Internet 15
1.8 L’architettura del Web 16
1.9 I servizi di Internet 17
1.10 I domini, il DNS e la registrazione
di siti 18
1.11 Proxy 19
Esempi di laboratorio 20
Esercizi di applicazione 27
U.A. 2 - Il linguaggio HTML 28
2.1 HTML 28
2.2 Creare una pagina 29
2.3 La sintassi 30
2.4 L’intestazione di un documento 31
2.5 Il corpo del documento
(tag <BODY>) 33
2.6 I caratteri speciali 35
2.7 I paragrafi e la formattazione
del testo 36
2.8 I tag di gestione del testo
(text level) 37
2.9 La definizione del carattere 38
2.10 Le intestazioni (titoli) 40
2.11 Le immagini 41
2.12 Gli elenchi 43
2.13 Gli elenchi strutturati 44
2.14 Le tabelle 46
2.15 I collegamenti ipertestuali (link) 49
2.16 Gli oggetti multimediali 51
2.17 Inserire applet Java 52
2.18 I frame 53
2.19 I frame annidati 55
2.20 I moduli e il server web 58
2.21 Il modulo di immissione form 59
2.22 Gli elementi che compongono
i moduli (campi) 60
Esercizi di applicazione 65
U.A. 3 - I fogli di stile (CSS) 67
3.1 Gli stili, gli elementi e le proprietà 67
3.2 I fogli di stile 68
3.3 Le priorità e gli stili ripetuti 70
3.4 Le proprietà 71
3.5 Come definire le aree 75
3.6 Le classi 80
3.7 La proprietà z-index 81
3.8 Le pseudoclassi 82
3.9 Il cursore del mouse 82
Esempi di laboratorio 84
Esercizi di applicazione 86
Modulo 2 - Gli script lato client 87
U.A. 4 - Un linguaggio lato client: JavaScript 88
4.1 Le pagine dinamiche e i linguaggi
di scripting 88
4.2 Gli script lato client e lato server 89
4.3 Che cosa serve per iniziare 90
4.4 Dove inserire gli script 91
4.5 Gli script gestori di evento 91
4.6 Gli script da file esterni 93
4.7 Le finestre di dialogo 93
4.8 Scrivere nella pagina 95
4.9 Le variabili 95
4.10 Gli operatori e le funzioni
aritmetiche 96
4.11 Le conversioni di tipo 96
4.12 Le stringhe 97
4.13 I vettori 100
4.14 La selezione 101
4.15 I cicli in JavaScript 102
4.16 Le funzioni 105
4.17 Le funzioni e gli eventi 105
In d ic e
4.18 La convalida dei moduli
con JavaScript 108
4.19 Gli oggetti del browser 111
4.20 Il documento (document) 114
4.21 La barra degli indirizzi (location) 116
4.22 La cronologia del browser
(history) 116
4.23 La gestione degli eventi 117
4.24 Le immagini 119
Esempi di laboratorio 121
Esercizi di applicazione 125
U.A. 5 - Un linguaggio lato client: VBScript 126
5.1 VBScript 126
5.2 I tipi di variabili 126
5.3 Gli array 127
5.4 Le finestre in VBScript 128
5.5 La selezione 129
5.6 I cicli in VBScript 131
5.7 Le subroutine 133
5.8 Il passaggio dei parametri 134
5.9 Le funzioni 134
5.10 Le funzioni interne di VBScript 135
5.11 Associare gli eventi 139
5.12 VBScript e il browser 139
5.13 La convalida prima dell’inoltro
di un modulo 140
5.14 VBScript e i confronti tra le date 141
Esempi di laboratorio 142
Esercizi di applicazione 146
Modulo 3 - Gli script lato server 147
U.A. 6 - Gli script lato server con ASP 148
6.1 Gli script lato server 148
6.2 Le pagine dinamiche e gli script
lato server 150
6.3 La sintassi ASP 150
6.4 L’inclusione di file esterni
in pagine ASP 151
6.5 Gli oggetti di ASP 151
6.6 L’oggetto Response 154
6.7 La comunicazione client/server
e l’oggetto Request 155
6.8 L’oggetto Request 156
6.9 La collection Request.Form 157
6.10 La collection
Request.ServerVariables 158
6.11 Un esempio sull’oggetto
Request 159
6.12 L’oggetto Server 161
6.13 L’oggetto Application 163
6.14 L’oggetto Session 166
6.15 Le sessioni e il file Global.asa 167
6.16 ASP e i file di testo 169
6.17 La protezione delle pagine 170
6.18 I cookie 171
6.19 Diversi metodi a confronto
sulla “persistenza” dei dati 172
6.20 L’oggetto ASPError 173
Esempi di laboratorio 175
Esercizi di applicazione 181
U.D. 7 - L’interazione tra ASP e i database 183
7.1 I database e il Web 183
7.2 L’architettura di un’applicazione
web 184
7.3 Le tabelle di Access 185
7.4 Le interrogazioni ai dati presenti
in tabella (query) 186
7.5 La connessione DSN ad Access 190
7.6 La connessione DSN-less
ad Access 192
7.7 L’oggetto RecordSet 193
7.8 Come paginare i risultati
di un Recordset 195
7.9 Un esempio di navigazione
tra record 197
7.10 La selezione nel Recordset 202
7.11 La selezione condizionale
di un Recordset 203
7.12 Usare le relazioni in un
Recordset 205
7.13 Raggruppare i Recordset 207
7.14 L’inserimento di nuovi record
nella tabella 208
7.15 L’eliminazione di record
in una tabella 211
7.16 L’aggiornamento di record
in una tabella 215
7.17 L’esecuzione di stored procedure
Access 217
7.18 Leggere un file XML in ASP 218
Esempi di laboratorio 221
Esercizi di applicazione 232
Indice
4
Indice
5
U.D. 8 - Gli script lato server con PHP 234
8.1 La sintassi fondamentale di PHP 234
8.2 L’installazione di PHP
in ambienti diversi 234
8.3 I blocchi e i commenti 238
8.4 Gli operatori 238
8.5 I costrutti principali 239
8.6 I cicli e i controlli 241
8.7 I tipi di dati 242
8.8 Il casting 243
8.9 L’output in PHP 245
8.10 Le funzioni native particolari
di PHP 245
8.11 Le variabili e le costanti 247
8.12 Le variabili provenienti dai form 249
8.13 I cookie 250
8.14 Gli array 251
8.15 Inviare file al client con header()
e readfile() 253
8.16 Le funzioni 256
8.17 La persistenza in PHP 258
8.18 L’inclusione di file esterni 262
8.19 I file in PHP 262
Esempi di laboratorio 266
Esercizi di applicazione 271
U.D. 9 - L’interazione tra PHP e i database 272
9.1 I tipi di connessione ai database 272
9.2 La connessione ad Access DSN-less
con le funzioni COM 272
9.3 La connessione al database
con COM e ADO 273
9.4 Inserire nuovi record 273
9.5 Leggere da una tabella 274
9.6 L’aggiornamento di una tabella 274
9.7 Il flusso dei dati nella
comunicazione tra PHP e MySQL 275
9.8 MySQL 275
9.9 Le funzioni di connessione
al database MySQL 276
9.10 La funzione mysql_query() 277
9.11 Un esempio di lettura
da una tabella MySQL 277
9.12 Aggiungere dati a una tabella
MySQL 277
9.13 L’aggiornamento dei record
di una tabella MySQL 278
9.14 L’eliminazione di un record
da una tabella MySQL 278
9.15 Verificare i risultati di una query
MySQL 278
Esempi di laboratorio 281
Esercizi di applicazione 287
6
Caratteristiche generali
Questo volume è stato scritto con l’obiettivo di fornire una panoramica sulle principalitecnologie che permettono il funzionamento di Internet. Presenta e approfondisce i lin-guaggi di scripting e di marcatura maggiormente diffusi per la creazione di pagine webstatiche, dinamiche, lato client e lato server. La trattazione parte dai concetti basilari delle tecnologie di rete e si spinge sino all’inter-facciamento con i database Access e MySQL. Fornisce inoltre ampio spazio alle temati-che relative alle architetture Three-Tier, che rappresentano un modello imprescindibilenella gestione dei siti web dinamici. I linguaggi presentati sono molteplici e vanno daquelli di marcatura come HTML e CSS a quelli di scripting lato client (JavaScript e VB-Script), fino ai linguaggi di scripting lato server (ASP e PHP).Il volume raccoglie inoltre numerosi approfondimenti che riguardano argomenti correla-ti (SQL, XML, RSS) spesso presentati all’interno di esempi pratici.
Impianto didattico
Il testo è caratterizzato da una struttura modulare: gli argomenti vengono forniti conesempi di difficoltà crescente, consentendo in tal modo allo studente di acquisire le cono-scenze di base delle tematiche illustrate. Ogni Modulo presenta un macro argomento. Imoduli sono a loro volta suddivisi in Unità di apprendimento. Ciascuna Unità sviluppaun argomento specifico ed è suddivisa in paragrafi. Al termine delle Unità di apprendi-mento sono presenti due sezioni:
: una sezione per l’attività di laboratorio con esempi svolti. Gli esempi più articola-ti vengono suddivisi in fasi e presentati corredati dalle codifiche, molto ricche dicommenti;
: una sezione per la verifica delle conoscenze e competenze acquisite, suddivisa inesercizi da svolgere e domande aperte.
A chi è rivolto il volume
Il libro si rivolge prevalentemente ai trienni degli Istituti Tecnici Industriali per gli indirizzidi Informatica, Elettronica, Elettrotecnica, Telecomunicazioni, al triennio dei Licei Tecni-ci, al Liceo Scientifico Tecnologico, al Liceo Scientifico a indirizzo PNI, ai corsi di Infor-matica, Elettronica, Telecomunicazioni degli Istituti Professionali e a tutti coloro che desi-derano approfondire le tematiche riguardanti i linguaggi di programmazione per il Web.
Paolo CamagniRiccardo Nikolassy
P re s e n t a z io n e
script client
Modulo
Gli script lato client2
U.A. 4 Un linguaggio lato client: JavaScript
U.A. 5 Un linguaggio lato client: VBScript
PREREQUISITI
$ Utilizzo di un sistema operativo
$ Conoscenza dei contenuti del Modulo 1
$ Conoscenze basilari delle tecniche
di programmazione
$ Caratteristiche fondamentali di hardware
e software
COMPETENZE
$ Sapere creare semplici script lato client
in JavaScript e VBScript
$ Sapere descrivere e utilizzare gli elementi
dei linguaggi JavaScript e VBScript
$ Sapere redigere un documento HTML
contenente script
$ Sapere impostare la struttura di uno
script in JavaScript e in VBScript
per la gestione degli eventi
$ Sapere creare script lato client
per la validazione dei moduli
CONOSCENZE
$ Conoscenza delle principali tecnologie
di programmazione lato client
$ Conoscenza della sintassi e delle modalità
di utilizzo delle istruzioni per il controllo
del flusso JavaScript e VBScript
$ Conoscenza del modello a oggetti
del browser usato dagli script
lato client
$ Conoscenza della gestione dei moduli
attraverso i linguaggi di script
JavaScript e VBScript
$ Conoscenza delle tecniche di validazione
dei moduli mediante JavaScript
e VBScript
&
126
Unità di apprendimento Un linguaggio lato client: VBScript
55
5.1 VBScript
VBScript è un semplice linguaggio di scripting che esiste sia nella versione lato client sia in quella latoserver per l’implementazione di pagine ASP. Si tratta di un linguaggio che nasce come semplificazionedel noto linguaggio di programmazione Visual Basic. L’importanza di questo linguaggio si evince pro-prio dal fatto che una volta appreso diventa molto semplice sia muoversi all’interno di documenti ASPsia lavorare in Visual Basic, linguaggio molto richiesto nelle aziende informatiche. Un’altra peculiaritàdel VBScript lato client è la possibilità di creare script che interagiscono con i fogli di stile CSS. La dif-ferenza sostanziale tra JavaScript e VBScript sta nel fatto che mentre il primo è un reale linguaggioorientato agli oggetti, quindi risolve molte delle sue problematiche ricorrendo a proprietà e metodi, ilsecondo lavora molto con le funzioni predefinite.Come visto per JavaScript, anche per VBScript il codice può essere scritto direttamente all’interno del-le pagine HTML in una coppia di tag che definiscono uno script. Attenzione perché nel caso di VB-Script, contrariamente a JavaScript, la definizione del linguaggio è obbligatoria, come illustrato dall’e-sempio che segue.
<SCRIPT LANGUAGE=”VBScript”>
<!—
‘ Questo è un commento in VBScript
document.write(“Saluti a tutti da VBScript”)
—>
</SCRIPT>
5.2 I tipi di variabili
In VBScript sono disponibili i seguenti tipi di variabile:
È importante sottolineare che anche VBScript è in grado di gestire il BOM (Browser Object Model). Pertantotutti gli oggetti appartenenti al browser vengono “riflessi” all’interno degli script scritti in VBScript. È moltoimportante ricordare che in VBScript le stringhe sono sempre racchiuse tra doppi apici, in quanto gli apicisingoli si usano per i commenti.
TIPO INTERVALLO
Byte Da 0 a 255
Boolean True o false
Integer Da –32.768 a 32.767
Long Da –2.147.483.648 a 2.147.483.647
Single Da –3,402823E38 a –1,401298E–45 per i valori negativi; da 1,401298E–45 a 3,402823E38 per i valori positivi
Double Da –1,79769313486232E308 a –4,94065645841247E–324 per i valori negativi; da 4,94065645841247E–324 a 1,79769313486232E308 per i valori positivi
Currency Da –922.337.203.685.477,5808 a 922.337.203.685.477,5807
Date Dall’1 gennaio dell’anno 100 al 31 dicembre 9999, inclusi
Esistono due tipi di dichiarazione in VBScript: implicita ed esplicita, come visto per JavaScript.
La dichiarazione esplicitaAvviene mediante la parola chiave dim, per esempio:
Dim mese
mese=”Gennaio”
Dim n
n=100
La dichiarazione implicita
mese=”Gennaio”
Il concatenamento di stringhe avviene mediante l’operatore & a differenza di JavaScript. Per esempio:
mesi=”Gennaio” & “ Febbraio”
In tal modo viene semplicemente assegnato il nome alla variabile in un punto qualsiasi dello script. È tut-tavia consigliabile non adottare questo metodo per evitare errori di ortografia nel nome della variabile;inoltre, dichiarando le variabili all’inizio dello script, si rende il codice più ordinato e leggibile. È possi-bile utilizzare l’istruzione Option Explicit per richiedere la dichiarazione esplicita di tutte le varia-bili. Tale istruzione deve essere la prima dello script.I nomi delle variabili seguono le seguenti regole:
: devono iniziare con una lettera dell’alfabeto;: non possono includere punti;: non devono essere composti da più di 255 caratteri;: devono essere univoci nell’area di validità in cui la variabile è dichiarata;: VBScript non è case sensitive, a differenza di JavaScript.
5.3 Gli array
La dichiarazione di un vettore si effettua scrivendo il nome del vettore seguito da parentesi. Nell’esem-pio seguente, viene dichiarato un vettore contenente 11 elementi:
Dim vet(10)
Anche se tra parentesi è indicato il numero 10, il vettore contiene 11 elementi. In VBScript infatti gli ar-ray sono sempre in base zero e di conseguenza il numero degli elementi in essi contenuti corrispondesempre al numero indicato tra parentesi più uno. Nell’esempio seguente vengono assegnati i dati da 0 a10 ai vari elementi dell’array:
vet(0) = 256
vet(1) = 324
vet(2) = 100
...
vet(10) = 55
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
127
TIPO INTERVALLO
Object Qualsiasi riferimento a Object
String La lunghezza di stringhe di lunghezza variabile può essere compresa tra 0 e 2 miliardi di caratteri
Variant Le variabili variant possono contenere un dato di qualunque tipo ed è il tipo che viene assegnato automaticamente da VBScript quando una variabile non viene espressamente dichiarata
Gli array non sono limitati a una sola dimensione. È infatti possibile specificare fino a 60 dimensioni, an-che se nella maggior parte dei casi ne vengono specificate solo tre o quattro. Per dichiarare dimensionimultiple (matrici) è necessario separare con una virgola i valori delle dimensioni indicati tra parentesi.Nell’esempio seguente viene dichiarata la matrice mat composta da 10 righe e 10 colonne:
Dim mat(9,9)
5.4 Le finestre in VBScript
VBScript gestisce tutte le finestre di dialogo riflesse dall’oggetto window e inoltre aggiunge le poten-zialità offerte dal sistema operativo Windows. Pertanto è possibile usare le finestre mostrate sotto.
: dal BOM del browser:• alert
• confirm
• prompt
: da Windows:• MsgBox
• InputBox
La funzione MsgBox permette di visualizzare una finestra di dialogo. Possiede la sintassi seguente:
variabile = MsgBox(“Messaggio”,tipo di finestra,”Titolo”)
Il messaggio è di tipo testuale. Per andare acapo si usa la funzione Chr(13) o Chr(10). Il tipo di finestra è un numero tra i seguenti:
0 : solo il bottone OK
1 : bottoni OK e Cancel
2 : bottoni Abort, Retry e Ignore
3 : bottoni Yes, No e Cancel
4 : bottoni Yes e No
5 : bottoni Retry e Cancel
16 : icona di Critical Message
32 : icona di Warning Query
48 : icona di Warning Message
64 : icona di Information Message
Il titolo è il testo per la barra del titolo.A seconda di dove clicca l’utente, la funzionepuò restituire uno dei seguenti valori:
1 : click su OK
2 : click su Cancel
3 : click su Abort
4 : click su Retry
5 : click su Ignore
6 : click su Yes
7 : click su No
La funzione InputBox permette di visualizzare una finestra di dialogo e consente all’utente di immet-tere un dato. Possiede la sintassi seguente:
variabile = InputBox(“Messaggio”,”Titolo”)
Modulo 2 - Gli script lato client
128
Se l’utente sceglie OK o preme INVIO, la funzione InputBox restituirà il contenuto della casella ditesto. Se invece l’utente sceglie il pulsante Annulla, la funzione restituirà una stringa di lunghezza ze-ro (“”). Per esempio è possibile effettuare un ciclo di inserimento valori fintanto che l’utente non de-cide di premere Annulla. Il ciclo termina quando l’utente preme il pulsante Annulla:
document.write “<TABLE BORDER=0>”
Dim i,nome
i=1
Do
nome = InputBox (“inserisci il nome”,”Inserimento valori”)
If nome = “” Then
Exit Do
Else
document.write “<TR><TD bgcolor=’12AABB’>” & i &
“<TD bgcolor=’BBCC00’>” & nome
End If
i = i + 1
Loop While true
document.write “</TABLE>”
Dopo aver immesso i nomi, quando si fa click su Annulla si ottiene l’elenco indicato nella figura che segue.
5.5 La selezione
Il costrutto di selezione consente di scegliere se eseguire o meno alcune istruzioni (blocco) in base alvalore booleano assunto da una certa espressione condizionale verificata da un operatore relazionale. Sibasano sul concetto di verità e falsità e generano solo due diversi valori, rispettivamente ‘true’ oppu-re ‘false’. Gli operatori elencati di seguito vengono usati soltanto nelle istruzioni condizionali:
Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è maggiore del risultato del-l’espressione posta a destra.
Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è maggiore o uguale al risul-tato dell’espressione posta a destra.
Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è minore del risultato dell’e-spressione posta a destra.
Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è minore o uguale al risultatodell’espressione posta a destra.
Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è diverso del risultato dell’e-spressione posta a destra.
Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è uguale al risultato dell’e-spressione posta a destra.
=
<>
<=
<
>=
>
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
129
Gli operatori logici sono assai simili a quelli relazionali in quanto restituiscono soltanto un valore di ve-rità che può essere vero o falso (true o false). Gli operatori logici sono i seguenti:
Operatore di AND logico.
Operatore di OR logico.
La sintassi della selezione è la seguente:
If condizione Then
istruzioni ...
End If
La selezione si dice binaria se consente di scegliere quali istruzioni o blocchi di istruzioni eseguire in ba-se al valore booleano assunto da una certa espressione condizionale.
If condizione Then
istruzioni ...
Else
istruzioni ...
End If
Per esempio:
Dim a
Dim b
a = 1
b = 2
If a < b Then
document.write “a è minore di b”
Else
document.write “a è maggiore di b”
End If
La selezione multipla è un’alternativa all’uso della selezione binaria annidata. Si usa quando è necessa-rio eseguire operazioni legate a valori precisi. Mediante la selezione multipla si possono porre una seriedi condizioni da valutare in modo sequenziale.
Select Case espressione
{
Case valore
istruzioni ...
Prima di tutto è necessario chiarire che non essendoci un delimitatore di statement, co-me per esempio il punto e virgola in JavaScript, non si può scrivere tutto il codice su unariga, ma ciascuna riga possiede solo uno statement. Tuttavia, quando si scrive il codicedirettamente in un tag HTML, è possibile scrivere più righe di codice separandole tra diloro dai due punti. Per esempio:
<INPUT TYPE=”button” onclick=’window.status=”prima
istruzione”:MsgBox “seconda istruzione”’>
Cliccando sul pulsante si ottiene l’esecuzione delle due istruzioni insequenza: la prima istruzione scrive nella barra di stato della finestrae la seconda apre una finestra di dialogo.
not
Or
and
Modulo 2 - Gli script lato client
130
...
Case valore “ennesimo”
istruzioni...
Case Else
istruzioni...
End Select
Per esempio:
Dim mese
mese = Month(Date())
document.write “Questo è il mese di “
Select Case mese
Case 1 document.write “Gennaio”
Case 2 document.write “Febbraio”
Case 3 document.write “Marzo”
Case 4 document.write “Aprile”
Case 5 document.write “Maggio”
Case 6 document.write “Giugno”
Case 7 document.write “Luglio”
Case 8 document.write “Agosto”
Case 9 document.write “Settembre”
Case 10 document.write “Ottobre”
Case 11 document.write “Novembre”
Case 12 document.write “Dicembre”
End Select
5.6 I cicli in VBScript
In VBScript sono disponibili le seguenti istruzioni per l’esecuzione di cicli:
: Do...Loop: le istruzioni vengono ripetute fino a quando una condizione risulta true. : For...Next: le istruzioni vengono ripetute il numero di volte specificato da un contatore. : For Each...Next: un gruppo di istruzioni viene ripetuto per ciascun elemento incluso nell’in-
sieme di un array.
Do...LoopRipete un blocco di istruzioni fintanto che una condizione è true o fino a quando diventa true.
Do While oppure Until condizione
istruzioni...
Loop
In alternativa, è possibile utilizzare la seguente sintassi:
Do
istruzioni...
Loop While oppure Until condizione
L’esempio che segue mostra due casi di utilizzo di cicli Do. Il primo caso mostra un ciclo con controlloiniziale: il ciclo termina quando la condizione non è più verificata. Il secondo caso mostra un ciclo concontrollo finale: essendoci la parola chiave while significa che il ciclo termina quando la condizione èfalsa. Il ciclo viene ripetuto una sola volta in quanto la condizione risulta subito falsa.Il primo ciclo prende il nome di ciclo a controllo in testa mentre il secondo ciclo a controllo in coda.La differenza sta nel fatto che nel secondo tipo, anche se la condizione risultasse falsa, le istruzioni pre-senti verrebbero eseguite almeno una volta.
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
131
Il seguente esempio mostra due casi di utilizzo di cicli Do con controllo sul falso. Il primo caso mostraun ciclo a controllo iniziale che termina quando la condizione è verificata. Il secondo caso mostra inve-ce un ciclo a controllo finale.
For...Next
Consente di eseguire un blocco di istruzioni un numero specificato di volte. La sintassi è la seguente:
For contatore = valore_iniziale To valore_finale Step incremento
istruzioni...
Next
I seguenti esempi mostrano l’uso del ciclo. Il primo mostra un ciclo con passo 2 che viene eseguito per5 volte. Il secondo mostra un ciclo con passo negativo.
Modulo 2 - Gli script lato client
132
Dim c, n
c = 0
n = 10
Do While n > 5 ‘ciclo ripetuto per 5 volte
n = n – 1
c = c + 1
Loop
MsgBox “Il ciclo viene eseguito
“ & c & “ volte.”
Dim c,n
c = 0
n = 10
Do ‘ciclo ripetuto per 1 volta
n = n – 1
c = c + 1
Loop While n > 10
MsgBox “Il ciclo viene eseguito
“ & c & “ volte.
Dim c, n
c = 0
n = 10
Do Until n = 5 ‘ciclo ripetuto 5 volte
n = n – 1
c = c + 1
Loop
MsgBox “Il ciclo viene eseguito
“ & c & “ volte.”
Dim c, n
c = 0
n = 1
Do ‘ciclo ripetuto per 9 volte
n = n + 1
c = c + 1
Loop Until n = 10
MsgBox “Il ciclo viene eseguito
“ & c & “ volte
Esiste una particolare istruzione chiamata Exit Do che permette di “forzare” l’uscita dal blocco Do. Il se-guente esempio illustra l’uscita dal ciclo quando la condizione è verificata (n<10):
Dim c, n
c = 0
n = 9
Do Until n = 10
n = n – 1
c = c + 1
If n < 10 Then Exit Do
Loop
MsgBox “Il ciclo viene eseguito “ & c & “ volte
Dim i, c
For i = 2 To 10 Step 2 ‘ciclo ripetuto
‘5 volte
c = c + 1
Next
MsgBox “Il ciclo viene eseguito
“ & c & “ volte.”
Dim i, c
For i = 16 To 2 Step -2 ‘ciclo eseguito
‘8 volte
c = c + 1
Next
MsgBox “Il ciclo viene eseguito
“ & c & “ volte.”
For Each In...Next
Consente di individuare gli elementi di un array senza ricorrere all’indice numerico che li identifica. Ilseguente esempio mostra l’uso di questo ciclo per visualizzare tutti gli elementi dell’array giorni:
Dim giorni(7)
giorni(0) = “domenica”
giorni(1) = “lunedì ”
giorni(2) = “martedì ”
giorni(3) = “mercoledì ”
giorni(4) = “giovedì ”
giorni(5) = “venerdì ”
giorni(6) = “sabato”
For Each giorno In giorni
document.write( giorno & “<br />” )
Next
5.7 Le subroutine
Le subroutine vengono usate per eseguire delle azioni all’interno dello script. Il corpo della subroutineviene generalemente inserito all’inizio del documento e precisamente nella <HEAD>, in tal modo è visi-bile al resto del documento. Per richiamare la subroutine dal codice basta scrivere in nome della sub-routine stessa seguito dai parametri separati tra loro dalla virgola. Per dichiarare una subroutine è ne-cessario scrivere la parola chiave Sub seguita dal nome della subroutine e dai parametri posti tra paren-tesi e separati tra di loro dalla virgola:
‘ dichiarazione Subroutine
Sub nome_Subroutine(parametri...)
istruzioni...
End Sub
‘ Chiamata Subroutine
nome_Subroutine parametro1, parametro2, ...
Il seguente esempio mostra l’utilizzo di una subroutine che visualizza una tabella con righe e colonnepassati come parametri:
Sub Tabella(r,c)
tab=”<TABLE BORDER=1>”
For i=1 To r
tab = tab & “<TR>”
For j=1 To c
tab = tab & “<TD width=20><BR>”
Next
Next
document.write tab & “</TABLE>”
Il contatore può essere anche di tipo float. La parola chiave Steppuò essere omessa percontatori interi unitari. È infine importante ricordare che il ciclo For di VBScript incremen-ta al Next. Così all’uscita del seguente ciclo il contatore vale 6 e non 5:
Dim i
For i=1 To 5
...
Next
MsgBox “Il contatore i vale “ & i
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
133
End Sub
Tabella 3,5
Tabella 5,4
In questo esempio si notano tre variabili di tipo locale, si tratta di tab e dei contatori i e j. Tali varia-bili infatti, vengono implicitamente dichiarate all’interno della subroutine. Vi sono anche due parame-tri passati per valore che rappresentano la dimensione della tabella da creare.
5.8 Il passaggio dei parametri
VBScript consente di passare parametri per valore e per riferimento. Se nulla viene specificato nella di-chiarazione di subroutine si tratta sempre di un passaggio di parametri per valore. Per indicare se il pa-rametro viene passato per valore o per riferimento è necessario anteporre al parametro formale la paro-la chiave ByRef (riferimento) o ByVal (valore, si può omettere). Quando un parametro viene passa-to per valore, la sua modifica nella subroutine non si ripercuote nel seguito del codice che richiama laroutine. Quando invece un parametro viene passato per riferimento la modifica del parametro all’in-terno della routine si ripercuote anche nel seguito del codice di chiamata. L’esempio che segue mostrauna subroutine alla quale vengono passati due parametri, uno per valore e uno per riferimento.
Sub prova(ByRef p1,ByVal p2)
p1 = p1 / 2
p2 = p2 / 2
End Sub
Dim a,b
a=5
b=10
document.write “<P>Prima della chiamata “ & a & “ “ & b
prova a, b
document.write “</P><P>Dopo la chiamata “ & a & “ “ & b & “</P>”
5.9 Le funzioni
Le funzioni (Function) vengono usate per eseguire delle azioni all’interno dello script. La differenzacon le subroutine è che le funzioni possono restituire un valore associato alla funzione stessa. La sintas-si per la dichiarazione di una funzione prevede la parola chiave Function seguita dal nome della fun-zione e dai parametri scritti tra parentesi e separati dalla virgola:
‘Dichiarazione di una funzione
Function nome_Funzione(parametro1, parametro2, ...)
istruzioni ...
End Function
‘Chiamata di una funzione
a = nome_funzione(parametro1, parametro2, ...)
L’esempio che segue mostra l’uso di una funzione alla quale viene passato un valore che rappresenta unatemperatura in gradi Fahrenheit. La funzione elabora il risultato e lo restituisce sotto forma di tempera-tura in gradi Celsius:
Function celsius(gradi)
celsius = (gradi – 32) * 5 / 9
End Function
MsgBox celsius(20)
Per uscire anticipatamente da una funzione si usa l’istruzione Exit Function.
Modulo 2 - Gli script lato client
134
5.10 Le funzioni interne di VBScript
Vediamo una tabella riassuntiva di alcune funzioni matematiche:
Vediamo una tabella riassuntiva di alcune funzioni per la gestione delle stringhe:
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
135
FUNZIONE SIGNIFICATO ESEMPIO
Abs(numero) Valore assoluto Abs(–58)Ris: 58
Atn(numero) Arcotangente 4 * Atn(1)Ris: 3,14159265358979
Cos(numero) numero in radianti Coseno Cos(30 * 3,14 / 180)Ris: 0,866158094405463
Exp(numero) e ^ numero (e = 2,718282) Exp(2)Ris: 7,38905609893065
Fix(numero) Parte intera Fix(–7,6)Ris: 7
Int(numero) Parte intera Int(–7,6)Ris: 8
Log(numero) Logaritmo naturale Log(5)Ris: 1,6094379124341
Oct(numero) Ottale in base 10 Oct(8)Ris: 10
Rnd Numero casuale RandomizeInt(Rnd * 10)Ris: nr. casuale >= 0e < 10
Round(numero,decimali) Arrotonda al valore di decimali Round(4.515,2)Ris: 4,51Round(4.516,2)Ris: 4,52
Sin(numero) Seno Sin(30 * 3,14 / 180)Ris: 0,499770102643102
Sqr(numero) numero>0 Radice quadrata Sqr(9)Ris: 3
Tan(numero) Tangente Tan(10)Ris: 0,648360827459087
FUNZIONE SIGNIFICATO ESEMPIO
Asc Restituisce il codice ASCII di un carattere MyNumber = Asc(“A”)
Restituisce 65MyNumber = Asc(“a”)
Restituisce 97MyNumber = Asc(“Albero”)
Restituisce 65
Chr Restituisce un carattere dato MyChar = Chr(65)
il suo codice ASCII Restituisce AMyChar = Chr(97)
Restituisce aMyChar = Chr(62)
Restituisce >MyChar = Chr(37)
Restituisce %
Modulo 2 - Gli script lato client
136
FUNZIONE SIGNIFICATO ESEMPIO
Instr Restituisce la posizione di una stringa SearchString =”visulabasicscript”
in un’altra Stringa in cui eseguire la ricercaSearchChar = “i”
Esegue la ricerca della lettera “i”MyPos = Instr(4, SearchString,
SearchChar)
Confronto testuale a partire dalla posizione 4Restituisce 10
LCase Converte in minuscolo MyString = “VBSCript”
LCaseString = LCase(MyString)
Il valore di LCaseString è “vbscript”
Left Restituisce un numero di caratteri MyString = “VBSCript”
dalla sinistra di una stringa LeftString = Left(MyString, 3) ‘
Il valore di LeftString è “VBS”
Len Restituisce il numero di caratteri MyString = Len(“VBSCRIPT”) ‘
di una stringa MyString include 8 caratteri
LTrim Toglie gli spazi a sinistra MyVar = LTrim(“ vbscript “)
Il valore di MyVar è “vbscript”
Mid Restituisce un certo numero MyVar = Mid(“VB Script è
di caratteri da una stringa divertente!”, 4, 6)
Il valore di MyVar è “Script”
Replace Restituisce una data sottostringa MyString = Replace(“Linguaggio
JavaScript “, con un’altra“Java”,
“VB”)
Restituisce “VBScript”
Rigth Restituisce un numero di caratteri AnyString = “Salve gente!”
dalla destra di una stringa MyStr = Right(AnyString, 1)
Restituisce “e”MyStr = Right(AnyString, 6)
Restituisce “ gente”MyStr = Right(AnyString, 20)
Restituisce “Salve gente”
Rtrim Toglie gli spazi a destra MyVar = RTrim(“ vbscript “)
Il valore di MyVar è “vbscript”
Space Crea una stringa di spazi MyString = Space(10)
Restituisce una stringa con 10 spazi
Split Crea un array di stringhe più piccole MyString = “VBScriptXè Xdivertente!”
da una stringa MyArray = Split(MyString, “x”)
‘ Il valore di MyArray(0) è “VBScript”‘ Il valore di MyArray(1) è “è”‘ Il valore di )MyArray(2) è “divertente!”
StrComp Confronta il valore di due stringhe MyStr1 = “Cane”
MyStr2 = “Gatto”
MyStr3 = “Gatto”
MyComp = StrComp(MyStr3, MyStr2)
Restituisce 0MyComp = StrComp(MyStr1, MyStr2)
Restituisce –1MyComp = StrComp(MyStr2, MyStr1)
Restituisce 1
String Crea una stringa di un carattere ripetuto MyString = String(5, “*”)
un certo numero di volte Restituisce “*****”MyString = String(5, 42)
Restituisce “*****”MyString = String(10, “ABC”)
Restituisce “AAAAAAAAAA”
Nell’esempio seguente vengono viste alcune delle funzioni qui sopra descritte:
Dim nome,i
nome = inputbox(“Inserisci il tuo nome”)
document.write “Il tuo nome possiede “ & Len(nome) & “ caratteri<BR>”
document.write “La tua iniziale: “ & Left(nome,1) & “<BR>”
document.write “Le ultime cinque lettere sono: “ & Right(nome,5) & “<BR>”
document.write “Il tuo nome al contrario è : “ & Strreverse(nome) & “<BR>”
document.write “In minuscolo: “ & Lcase(nome) & “<BR>”
document.write “In maiuscolo: “ & Ucase(nome) & “<BR>”
document.write “Iniziale maiuscola: “ & Ucase(Left(nome,1))
& Lcase(Mid(nome,2)) & “<BR>”
For i =1 To Len(nome)
document.write Mid(nome,1,i) & “<BR>”
Next
Vediamo una tabella riassuntiva di alcune funzioni per la gestione delle date:
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
137
FUNZIONE SIGNIFICATO ESEMPIO
StrReverse Inverte una stringa MyStr = StrReverse(“VBScript”)
Il valore di MyStr è “tpircSBV”
Trim Taglia gli spazi da entrambi i lati MyVar = Trim(“ vbscript “)
di una stringa Il valore di MyVar è “vbscript”
Ucase Converte in maiuscolo MyWord = UCase(“Salve gente!”)
Restituisce “SALVE GENTE!”
FUNZIONE SIGNIFICATO ESEMPIO
Date Restituisce la data MyDate = Date
Il valore di MyDate è la data di sistema corrente
Time Restituisce l’ora MyTime = Time
Restituisce l’ora di sistema corrente
Now Restituisce la data e l’ora MyVar = Now
Il valore di MyVar è la data e l’ora corrente
DateAdd Aggiunge un intervallo di tempo La funzione DateAdd non restituisce a una data una data non valida. Nell’esempio seguente
viene aggiunto un mese alla data 31 gennaio:
NewDate = DateAdd(“m”, 1, “31-
Jan-95”)
In questo caso la funzione restituisce 28-feb-95, non 31-feb-95. Se data è 31-gen-96, viene restituito 29-feb-96 perché il 1996 è un anno bisestile
DateDiff Restituisce il tempo tra due date DiffADate = “Giorni mancanti: “
& DateDiff(“d”, Now, “1/1/2010”)
Il seguente esempio mostra l’uso di alcune funzioni di manipolazione date. La data inserita è 20/12/1976:
Dim DataNascita
Dim giorni(7)
giorni(2)=”Lunedi”
giorni(3)=”Martedi”
giorni(4)=”Mercoledi”
giorni(5)=”Giovedi”
giorni(6)=”Venerdi”
giorni(6)=”Sabato”
giorni(1)=”Domenica”
DataNascita=InputBox (“Quando sei nato (gg/mm/aaaa)?”)
document.write “Sei nato di “ & giorni(Weekday(DataNascita)) & “<BR>”
document.write “Da quando sei nato sono passati “ & Datediff(“d”,DataNascita,Now)
& “ giorni<BR>”
document.write “Da quando sei nato sono passati “ & Datediff(“m”,DataNascita,Now)
& “ mesi<BR>”
document.write “Da quando sei nato sono passati “ & Datediff(“ww”,DataNascita,Now)
& “ settimane”
Modulo 2 - Gli script lato client
138
FUNZIONE SIGNIFICATO ESEMPIO
Day Restituisce il giorno di una data MyDay = Day(“19/10/1962”)
Il valore di MyDay è 19
Month Restituisce il mese di una data MyMonth = Month(“19/10/1962”)
Il valore di MyMonth è 10
Year Restituisce l’anno di una data MyYear = Month(“19/10/1962”)
Il valore di MyYear è 1962
MonthName Restituisce il nome del mese MyMonthName =
Month(“19/10/1962”)
Il valore di MyMonthName è ottobre
WeekDay Restituisce un numero corrispondente MyWeekDay = Week
al giorno della settimana day(“19/10/1962”)
Il valore di MyWeekDay è 6 perché MyDate corrisponde a un venerdì
WeekDayName Restituisce il nome del giorno MyWeekDay = WeekdayName
della settimana (“19/10/1962”)
Il valore di MyWeekDay è venerdì
Second Restituisce i secondi MySec = Second(Now)
Il valore di MySec è un numero che rappresenta i secondi
Minute Restituisce i minuti MyVar = Minute(Now)
Il valore di MyVar è un numero che rappresenta i minuti
Hour Restituisce l’ora MyVar = Hour(Now)
Il valore di MyVar è un numero che rappresenta l’ora in formato (0-23)
FormatDateTime Restituisce la data e l’ora secondo FormatDateTime(now, 0)
un formato Restituisce 16/09/2008 13.52.08 FormatDateTime(now, 1)
Restituisce martedì 16 settembre 2008 FormatDateTime(now, 2)
Restituisce 16/09/2008 FormatDateTime(now, 3)
Restituisce 13.52.08 FormatDateTime(now, 4)
Restituisce 13.52
5.11 Associare gli eventi
Per associare del codice VBScript a eventi, è possibile procedere in due modi diversi. Un primo me-todo consiste nello scrivere una routine Sub definita come routine di eventi. Il nome della routine ècomposto da due parti separate da un carattere di sottolineatura (_): il nome dell’oggetto sul qualeopera, che deriva dall’attributo NAME e il nome dell’evento associato. Nell’esempio che segue a ogniclick sul pulsante Puls1 viene cercata ed eseguita la corrispondente routine di eventi Puls1_On-Click.
Sub Puls1_OnClick
MsgBox “Hai fatto click!!”
End Sub
Il codice HTML è il seguente:
INPUT NAME=”Puls1” TYPE=”BUTTON” VALUE=”Fai click”>
Il secondo metodo avviene invece mediante la scrittura di uno script specifico per ogni evento, che con-tiene la parola chiave EVENT seguita dal nome dell’evento e FOR seguita dal nome dell’oggetto al qua-le è associata:
<SCRIPT LANGUAGE=”VBScript” EVENT=”OnClick” FOR=”Puls1”>
MsgBox “Hai fatto click!!”
</SCRIPT>
In questo caso, dato che il tag <SCRIPT> specifica l’evento e il controllo, le istruzioni Sub e End Subnon vengono utilizzate.
5.12 VBScript e il browser
Innanzi tutto è importante tenere presente che tutti gli oggetti del browser sono riflessi all’interno degliscript VBScript come visto in precedenza per JavaScript. La notazione che si deve adottare è la dot nota-
tion. In tal modo qualunque oggetto è identificabile indicandone la gerarchia completa fino alla pro-prietà o al metodo interessato. Così se, per esempio, si vuole fare un semplice script con due pulsanti, dicui uno incrementa un valore numerico presente in una casella di testo e l’altro lo decrementa, è suffi-ciente associare all’evento del pulsante una funzione che calcoli il nuovo valore e lo scriva all’interno del-la casella di testo:
<INPUT TYPE=”button” VALUE=” – “ onclick=”dec()”>
<INPUT TYPE=”text” size=3 VALUE=0 NAME=”conta”>
<INPUT TYPE=”button” VALUE=” + “ onclick=”inc()”>
Le funzioni, che devono essere scritte prima del codice HTML, devono semplicemente incrementare odecrementare il valore del campo di nome conta.
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
139
Esiste inoltre un terzo modo: mediante Internet Explorer è possibile aggiungere brevi sezioni di codice sul-la stessa riga nel tag che definisce il controllo. Quando si fa click sul pulsante, l’azione eseguita dal tag<INPUT>, per esempio, è equivalente all’azione eseguita dal codice dell’esempio precedente:
<INPUT NAME=”Button1” TYPE=”button” VALUE=”Fare click qui”
OnClick=’MsgBox “Hai fatto click”’>
La stessa chiamata alla funzione è racchiusa tra virgolette semplici mentre la stringa della funzione MsgBoxè racchiusa tra virgolette doppie. È possibile utilizzare più istruzioni a condizione che siano separate dai duepunti (:).
Siccome questa casella di testo non è contenuta all’interno di un form, affinché lo script possa indivi-duarla all’interno della gerarchia degli oggetti del browser (BOM) è necessario scriverne il nome dopogli oggetti document.all.
Function inc()
document.all.conta.value=document.all.conta.value+1
End Function
Function dec()
document.all.conta.value=document.all.conta.value-1
End Function
5.13 La convalida prima dell’inoltro di un modulo
Con VBScript si possono eseguire le operazioni di verifica di validità dei dati presenti in un form primadell’inoltro. Il codice HTML genererà una casella di testo e un pulsante. Al form è associata, tramite l’evento On-Submit, la subroutine Verifica che accerta la validità del dato. In questo caso, attraverso la funzio-ne interna di VBScript IsNumeric, viene verificato se il campo contiene un numero; viene verificatainoltre la presenza di un numero compreso tra 0 e 100. Se le condizioni sono accertate, tramite il meto-do submit avviene l’invio del modulo al server:
<FORM NAME=”modulo” OnSubmit=”Verifica”>
Immettere un valore compreso tra 1 e 100:
<INPUT NAME=”numero” TYPE=”TEXT” SIZE=”2”>
<INPUT TYPE=”submit” VALUE=”Invia”>
</FORM>
La subroutine Verifica contiene il codice di controllo della validità:
Sub Verifica
If IsNumeric(document.modulo.numero.value) Then
If document.modulo.numero.value < 1 Or document.modulo.numero.value > 100 Then
MsgBox “Immettere un numero compreso tra 1 e 100”
Else
MsgBox “Valore corretto. Invio in corso...”
modulo.submit
End If
Else
MsgBox “Immettere un numero!”
End If
End Sub
Modulo 2 - Gli script lato client
140
Nell’esempio il valore viene verificato direttamente in base a un numero, ovvero, tramite la funzioneIsNumeric, viene verificato che la stringa inclusa nella casella di testo sia un numero. Anche se in VBScript stringhe e numeri vengono convertiti automaticamente in modo adeguato, è consigliabile con-trollare sempre il sottotipo dei valori immessi dall’utente e utilizzare, se necessario, le funzioni di con-versione. Quando si eseguono somme con i valori di caselle di testo è inoltre necessario convertire i valori in nu-meri in modo esplicito: il segno più (operatore +) rappresenta infatti sia l’addizione sia il concatenamen-to di stringhe. Se, per esempio, Text1 include “1” e Text2 include “2”, il risultato ottenuto sarà il se-guente:
A = Text1.Value + Text2.Value ‘ A è “12”
A = CDbl(Text1.Value) + Text2.Value ‘ A è 3
5.14 VBScript e i confronti tra le date
La gestione del formato “data” rappresenta in VBScript una caratteristica molto importante. Se inuno script si ha la necessità di confrontare due date tra di loro, non è possibile effettuare una condi-zione del tipo:
If “5/12/2008” < “20/12/2008” Then
Document.write “minore”
Else
Document.write “maggiore o uguale”
End If
Il confronto non viene effettuato tra date, ma tra strighe: in ordine alfabetico il 5 viene dopo il 2, quin-di il risultato è sbagliato. L’accorgimento da adottare quando si vogliono fare confronti tra date, è quel-lo di specificare che i parametri del confronto sono date con la funzione CDate:
If CDate(“5/12/2008”) < CDate(“20/12/2008”) Then
Document.write “minore”
Else
Document.write “maggiore o uguale”
End If
Una funzione che permette di fare confronti tra date è DateDiff: questa funzione restituisce i giorniintercorrenti tra le due date: pertanto 0 se le date sono uguali, un numero negativo se è la prima data èmaggiore, oppure un numero positivo se la seconda data è maggiore della prima. Il valore è espresso ingiorni, come indicato dal primo parametro (“d”), oppure può essere espresso in mesi (“m”) o anni(“yyyy”).
If DateDiff(“d”,”5/12/2008”,”20/12/2008”) > 0 Then
Document.write “minore”
Else
Document.write “maggiore o uguale”
End If
Questa funzione restituisce “minore”.
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
141
142
Modulo 2 - Gli script lato client
Unità di apprendimento 5
Esempio 1 Il File System di Windows (FSO) e la gestione di file, cartelle e dischiTutti i linguaggi di scripting lato client non consentono di accedere a database o file di testo, oppure inviare una
e-mail attraverso un server di posta elettronica o collegarsi a un altro PC sparso per il mondo alla ricerca di infor-
mazioni. Sotto il nome di ActiveX vi sono una serie di tecnologie che permettono a un software, o a una sua
parte, di interagire con altre parti esterne, indipendentemente dal linguaggio con il quale esse sono state rea-
lizzate. ActiveX, a sua volta, è un sottoinsieme delle classi COM (Component Object Model). In VBScript richia-
mare un ActiveX è estremamente semplice, mediante l’utilizzo dell’oggetto ActiveXObject. Il compito di que-
sto oggetto è quello di attivare e restituire un riferimento proprio a un componente ActiveX. La sintassi neces-
saria è la seguente:
set oggetto = CreateObject(“nomeserver.nometipo”[,”posizione”])
I parametri passati all’oggetto vanno così interpretati:
: nomeserver è il nome dell’applicazione che fornisce l’oggetto. Questo parametro è obbligatorio;: nometipo è il nome della classe dell’oggetto da attivare. Anche questo parametro è obbligatorio;: posizione indica il nome del server nella rete in cui l’oggetto deve venire creato. Questo parametro è
facoltativo.
Una volta creato un oggetto mediante l’utilizzo di ActiveXObject sarà possibile usufruire di esso utilizzando
il riferimento restituito:
oggetto.proprietà
oggetto.metodo(eventuali parametri)
L’oggetto ActiveX al quale rivolgeremo la nostra attenzione sarà Scripting.FileSystemObject, molto pro-
babilmente l’oggetto ActiveX più diffuso e utilizzato insieme a quelli della famiglia ADODB.
Scripting.FileSystemObject (FSO) estende il linguaggio di scripting utlizzato fornendolo di una sempli-
ce interfaccia utile per interagire con il File System del server. In poche parole grazie a questo ActiveX è possi-
bile leggere e scrivere file sull’hard disk del server, creare cartelle, eliminare file che non servono più, ottene-
re la lista di tutti i file contenuti in una cartella, gestire file di testo o binari e tanto altro. Inoltre, a questo og-
getto principale solo collegate anche altre classi di oggetti utili per descrivere i file, le cartelle, i drive e gli
stream. La tabella che segue mostra un elenco dei principali metodi e proprietà messi a disposizione da
Scripting.FileSystemObject:
Esempi di laboratorio
METODI
BuildPath Aggiunge un nome alla fine di un percorso esistente
CopyFile Copia uno o più file da una posizione a un’altra
CopyFolder Copia una cartella da una posizione a un’altra
CreateFolder Genera una nuova cartella
CreateTextFile Crea un file di testo e restituisce un oggetto TextStream utile per lavorare con il file creato
DeleteFile Cancella un file
DeleteFolder Cancella una cartella
DriveExists Restituisce un booleano che indica se il drive specificato esiste
FileExists Restituisce un booleano che indica se il file specificato esiste
FolderExists Restituisce un booleano che indica se la cartella specificata esiste
GetAbsolutePathName Restituisce un percorso completo a partire da uno ambiguo
GetBaseName Restituisce il nome di un file privo dell’estensione
GetDrive Restituisce un oggetto Drive relativo all’unità di un percorso specificato
143
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
Unità di apprendimento 5
Esempi di laboratorio
Come per un qualsiasi oggetto, per istanziare l’oggetto VBScript occorre una sintassi come la seguente:
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
Ora l’oggetto possiede tutte le proprietà e i metodi che gli permetteranno di settare o leggere informazioni ri-
guardanti il File System. Per esempio:
drive=”C:”
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
msgbox “Dimensione del drive C: “
& FormatNumber (oggetto.GetDrive(drive).TotalSize,0) & “ bytes”
METODI
GetDriveName Restituisce una stringa contenente il nome dell’unità di un percorso specificato
GetExtensionName Restituisce una stringa contenente l’estensione di un file specificato
GetFile Restituisce un oggetto File relativo al percorso specificato
GetFileName Restituisce l’ultimo componente del percorso specificato che non fa parte della specifica di unità
GetFolder Restituisce un oggetto Folder relativo al percorso specificato
GetParentFolderName Restituisce una stringa contenente il nome della cartella principale dell’ultimo componente del percorso specificato
GetSpecialFolder Restituisce la cartella speciale specificata. Cartelle speciali sono per esempio quelle contenenti file temporanei, file di sistema ecc.
GetTempName Restituisce un nome di file o cartella generato in modo casuale, utile per eseguire operazioni che richiedono un file o una cartella temporanea
MoveFile Sposta uno o più file in una diversa posizione
MoveFolder Sposta una cartella in una diversa posizione
OpenTextFile Apre il file specificato e restituisce un oggetto TextStream che può essere utilizzato per leggere il file, scrivere nel file o aggiungere testo alla fine del file
PROPRIETÀ
Drives Un insieme di oggetti Drive disponibili nel computer locale
Alla base della gerarchia si trova l’oggetto File-SystemObject stesso, che espone molti meto-di e una sola proprietà, Drives, che restituiscela collection di tutti i drive del sistema. L’oggettoFileSystemObject è l’unico oggetto “creabi-le” nella gerarchia, cioè l’unico oggetto che puòessere istanziato con CreateObject, come ve-dremo. Tutti gli altri oggetti sono oggetti dipen-denti che derivano da esso e vengono espostisotto forma di metodi o proprietà (figura a lato). E
FileSystemObject
Drive
Folder
File
TextStream
Drives
Folders
Files
Oggetti
Collection
144
Modulo 2 - Gli script lato client
Unità di apprendimento 5
produce il messaggio indicato nella figura a lato. E
Come si vede dall’oggetto FileSystem, è stato richiamata la proprietà dri-
ve con la sintassi oggetto.GetDrive(drive). Da questo oggetto è stata
visualizzata la proprietà TotalSize che rappresenta la dimensione del drive.
Dall’oggetto FileSystem è possibile richiamare altri oggetti come l’oggetto
cartella, l’oggetto disco e l’oggetto fileTesto:
‘ Istanza dell’oggetto FileSystem:
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
‘ Istanza dell’oggetto Drive:
Set disco = oggetto.GetDrive(“C:”)
‘ Istanza dell’oggetto Cartella:
Set cartella = oggetto.GetFolder(“C:\winnt”)
‘ Istanza dell’oggetto fileTesto
Set fileTesto = oggetto.GetFile(“C:\autoexec.bat”)
‘ Istanza dell’oggetto fileTesto
Set oggettoFileAperto = fileTesto.OpenAsTextStream(1)
Lo scopo dello script che segue è quello di visualizzare il contenuto del disco fisso. Il primo passo consiste nel
visualizzare le cartelle e i file contenuti nella directory radice:
percorso=”C:\”
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
Set cartella = oggetto.GetFolder(percorso)
‘la proprietà subfolders è a sua volta un oggetto che racchiude
‘tutte le sottocartelle contenute
Set sottoCartella = cartella.Subfolders
document.write percorso & “<BR>”
‘ciclo che visualizza tutti gli oggetti contenuti in sottoCartella
For each elemCartella in sottoCartella
document.write “<B>” & replace(lcase(elemcartella),lcase(percorso),””)
&“</B><BR>”
next
‘la proprietà files è a sua volta un oggetto che racchiude tutti
‘i file contenuti
Set file = cartella.files
For each elemFile in file
document.write “ “ & replace(lcase(elemFile),lcase(percorso),””) & “<BR>”
next
Si ottiene
Esecuzione script: Da Risorse del computer:
Esempi di laboratorio
145
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
Unità di apprendimento 5
Esempi di laboratorio
La variabile percorso contiene il nome della cartella da esaminare, in questo caso la radice del disco fisso.
Vengono creati gli oggetti cartella e sottocartella: quest’ultimo contiene tutte le directory presenti in
cartella. Per visualizzare le varie sottocartelle si sfrutta un ciclo di tipo For Each. Il nome e il percorso di
ogni singola sottocartella, attraverso la funzione stringa replace, viene “ripulito” della parte contenente il per-
corso completo. Lo stesso principio è adottato per leggere i file. Le cartelle, per distinguerle dai file, sono vi-
sualizzate in neretto. Se lo script viene inserito in una funzione che riceve come parametro il percorso di una
cartella è possibile disegnare l’albero con tutte le sottocartelle e i file. Questo script usa il tag <DIV> e la pro-
prietà innerHTML per scrivere all’interno del paragrafo di testo. Il paragrafo di testo viene individuato attraver-
so il metodo document.getElementByID(“testo”):
function cartelle(percorso)
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
Set cartella = oggetto.GetFolder(percorso)
Set sottoCartella = cartella.Subfolders
n = percorso & “<BR>”
For each elemCartella in sottoCartella
nomeCartella=replace(lcase(elemCartella),lcase(percorso),””)
n = n & “<INPUT TYPE=button value=” & nomeCartella & “
“onclick=naviga(‘“ & elemCartella & “‘)><BR>”
next
Set file = folder.files
For each elemFile in file
n = n & “ “ & replace(lcase(elemFile),lcase(percorso),””) & “<br>”
next
document.getelementbyid(“testo”).innerHTML = n
end function
Il codice della sezione <BODY> è il seguente:
<P ID=”testo” onclick=cartelle(“C:\”)>C:\</P>
L’esecuzione dello script visualizza il solo percorso C:\ facendo
click su di esso si ottiene l’elenco delle cartelle presenti nella ra-
dice del disco fisso (C:\). Facendo click sulla cartella prescelta (in
questo caso pippo) si ottiene l’elenco dei file contenuti. E
L’esempio che segue mostra come usare il FileSystemObject
per copiare un file in una cartella. Il file autoexec.bat presente
nella radice viene copiato nella cartella c:\esempio.
origine=”c:\autoexec.bat”
destinazione=”c:\esempio”
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
set file = oggetto.GetFile (origine)
file.Copy destinazione,true
document.write “Il file “ & origine & “ è stato copiato in “ & destinazione & “.”
Se invece volessimo cancellare il file dalla cartella esempio:
origine=”c:\esempio\autoexec.bat”
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
Set file = oggetto.GetFile (origine)
file.Delete
MsgBox “Il file “ & origine & “ è stato cancellato.”
146
Modulo 2 - Gli script lato client
Unità di apprendimento 5
Esercizi di applicazione
Valutazione della capacità di applicazione e di approfondimento
1 Crea uno script che dato in input il capitale C, il tasso percentuale I e il numero di anni T, calcoli e visualiz-
zi il montante attraverso la capitalizzazione semplice e la capitalizzazione composta:
: Mcapitalizzazione semplice = C(1 + inter * tempo);
: Mcapitalizzazione composta = C(1 + inter)2.
2 Crea uno script che visualizzi una tabella contenente la tavola pitagorica.
3 Crea uno script che dato in input il saldo del conto corrente in euro, lo trasformi in ducati, grana e tornesi,
sapendo che 1 ducato = 100 grana = 200 tornesi = 4,24 lire.
4 Crea uno script che visualizzi un modulo per l’inserimento dei dati di una fattura commerciale di vendita. Il
pulsante di invio riepiloga i dati in un riquadro <div> opportunamente formattato.
5 Crea uno script che permetta di trasformare un numero inserito, espresso in unità di misura europee (pe-
so, temperatura, lunghezza) in unità anglosassoni e viceversa (per es. gradi Fahrenheit in Celsius, oppure
km in miglia, kg in once ecc.). A fianco del valore numerico una select permette di scegliere l’unità di misu-
ra di partenza e sempre una select permette all’utente di scegliere l’unità che deve essere calcolata.
6 Crea uno script in grado di simulare uno scadenziario. Una serie di caselle di testo (almeno 10) contengono
delle date: il colore del bordo sarà rosso per le date date precedenti o uguali alla data odierna, bordate di
giallo se sono successive di 10 giorni alla data odierna e bordate di verde se successive di oltre 10 giorni.
7 Crea uno script che permetta all’utente di giocare al gioco dell’impiccato. Il modulo deve contenere una casel-
la password in cui inserire la parola da cercare, un campo testo in cui inserire la lettera, un campo testo in cui
appare l’andamento del gioco (lettere indovinate e asterischi) e un campo testo che memorizza gli errori. Pre-
mendo un pulsante (inizia) si richiama una funzione che pone a zero il campo errori e maschera la soluzione
parziale. Per compiere quest’ultima operazione, si utilizzano le funzioni string e len. Alla pressione di un
pulsante (prova), viene cercata la lettera proposta tra le lettere della parola; se trovata viene sostituita. Per
rendere il gioco completo fai apparire un messaggio quando la soluzione non contiene più asterischi.
8 Crea uno script che permetta di giocare con il browser. L’utente pensa a un numero minore di 1000 e il cal-
colatore genera una sequenza di numeri cercando di indovinarlo. Lo script deve sempre riuscire a indovina-
re il numero con meno di 10 tentativi, dove a ogni tentativo l’utente indica al calcolatore se il numero gene-
rato è minore o maggiore di quello da lui pensato.
9 Crea uno script con una funzione in grado di validare una casella di testo contenente un indirizzo e-mail. Per
fare questo utilizza le funzioni stringa di ricerca del carattere chiocciola.
q0 Crea uno script con una funzione in grado di validare una casella di testo contenente un codice fiscale. Per
fare questo utilizza le funzioni stringa adatte a verificarne la lunghezza e la distinzione tra caratteri numeri-
ci e alfabetici.
qa Crea uno script in grado di formattare dei numeri in formato valuta in modo che appaia il simbolo dell’euro
seguito dai numeri separati a gruppi di 3 cifre dal puntino. Per fare questo utilizza l’evento onchange sul-
la casella di testo, insieme a una funzione che verifica ogni volta la lunghezza della stringa e inserisce i ca-
ratteri nella posizione corretta.
Valutazione della conoscenza e della comprensione
1 Spiega come vengono catalogati i linguaggi di script.
2 Determina le differenze che ritieni più evidenti tra linguaggi di script lato server e lato client.
3 Spiega il ruolo del web server nello sviluppo di pagine web con tecnologia client.
4 Illustra dove e come inserire il codice VBScript in pagine web.
5 Esiste una versione di VBScript lato server? Se sì indica il tag necessario per scrivere uno script di questa
categoria.
6 Indica quali differenze riscontri tra le conversioni implicite ed esplicite.
7 Illustra le modalità con le quali vengono associati gli eventi in VBScript.