I linguaggi del Web

Transcript

I linguaggi del Web
P a olo C a m a g ni
R i c c a r d o N ik o l a s s y
I linguaggi del Web
HTML, CSS, JavaScript, VBScript, ASP, PHP
EDITORE ULRICO HOEPLI MILANO
UN TESTO PIÙ RICCO E SEMPRE AGGIORNATO
Alla 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.
Copyright © Ulrico Hoepli Editore S.p.A. 2009
via 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. - Bologna
www.art.bo.it
Coordinamento editoriale:
Redazione:
Progetto grafico:
Impaginazione:
Monica Monari
Simona Sansavini
Marina Baldisserri
Sonia Bertusi
Copertina: MN&CG S.r.l., Milano
Stampa: Arti Grafiche Franco Battaia S.r.l. - Zibido San Giacomo (MI)
Printed in Italy
In dic e
Presentazione
6
Modulo 1 - Le reti, l’HTML e i fogli di stile
7
8
Le reti di computer
8
Le topologie di rete
9
Il modello ISO/OSI e Internet
10
Il cablaggio e i dispositivi di rete
11
Gli indirizzi IP
13
I protocolli e il routing
14
La rete Internet
15
L’architettura del Web
16
I servizi di Internet
17
I domini, il DNS e la registrazione
di siti
18
1.11 Proxy
19
Esempi di laboratorio
20
Esercizi di applicazione
27
U.A. 1 - Le reti di computer
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
U.A. 2 - Il linguaggio HTML
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
HTML
Creare una pagina
La sintassi
L’intestazione di un documento
Il corpo del documento
(tag <BODY>)
I caratteri speciali
I paragrafi e la formattazione
del testo
I tag di gestione del testo
(text level)
La definizione del carattere
Le intestazioni (titoli)
Le immagini
Gli elenchi
Gli elenchi strutturati
Le tabelle
I collegamenti ipertestuali (link)
Gli oggetti multimediali
Inserire applet Java
I frame
28
28
29
30
31
33
35
36
37
38
40
41
43
44
46
49
51
52
53
2.19
2.20
2.21
2.22
I frame annidati
I moduli e il server web
Il modulo di immissione form
Gli elementi che compongono
i moduli (campi)
Esercizi di applicazione
55
58
59
60
65
3.1 Gli stili, gli elementi e le proprietà
3.2 I fogli di stile
3.3 Le priorità e gli stili ripetuti
3.4 Le proprietà
3.5 Come definire le aree
3.6 Le classi
3.7 La proprietà z-index
3.8 Le pseudoclassi
3.9 Il cursore del mouse
Esempi di laboratorio
Esercizi di applicazione
67
67
68
70
71
75
80
81
82
82
84
86
Modulo 2 - Gli script lato client
87
U.A. 4 - Un linguaggio lato client: JavaScript
88
U.A. 3 - I fogli di stile (CSS)
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
Le pagine dinamiche e i linguaggi
di scripting
Gli script lato client e lato server
Che cosa serve per iniziare
Dove inserire gli script
Gli script gestori di evento
Gli script da file esterni
Le finestre di dialogo
Scrivere nella pagina
Le variabili
Gli operatori e le funzioni
aritmetiche
Le conversioni di tipo
Le stringhe
I vettori
La selezione
I cicli in JavaScript
Le funzioni
Le funzioni e gli eventi
88
89
90
91
91
93
93
95
95
96
96
97
100
101
102
105
105
3
Indice
4.18 La convalida dei moduli
con JavaScript
4.19 Gli oggetti del browser
4.20 Il documento (document)
4.21 La barra degli indirizzi (location)
4.22 La cronologia del browser
(history)
4.23 La gestione degli eventi
4.24 Le immagini
Esempi di laboratorio
Esercizi di applicazione
U.A. 5 - Un linguaggio lato client: VBScript
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
116
117
119
121
125
126
126
126
127
128
129
131
133
134
134
135
139
139
VBScript
I tipi di variabili
Gli array
Le finestre in VBScript
La selezione
I cicli in VBScript
Le subroutine
Il passaggio dei parametri
Le funzioni
Le funzioni interne di VBScript
Associare gli eventi
VBScript e il browser
La convalida prima dell’inoltro
di un modulo
5.14 VBScript e i confronti tra le date
Esempi di laboratorio
Esercizi di applicazione
140
141
142
146
Modulo 3 - Gli script lato server
147
U.A. 6 - Gli script lato server con ASP
148
148
6.1
6.2
Gli script lato server
Le pagine dinamiche e gli script
lato server
6.3 La sintassi ASP
6.4 L’inclusione di file esterni
in pagine ASP
6.5 Gli oggetti di ASP
6.6 L’oggetto Response
6.7 La comunicazione client/server
e l’oggetto Request
6.8 L’oggetto Request
6.9 La collection Request.Form
6.10 La collection
Request.ServerVariables
4
108
111
114
116
150
150
151
151
154
155
156
157
158
6.11 Un esempio sull’oggetto
Request
6.12 L’oggetto Server
6.13 L’oggetto Application
6.14 L’oggetto Session
6.15 Le sessioni e il file Global.asa
6.16 ASP e i file di testo
6.17 La protezione delle pagine
6.18 I cookie
6.19 Diversi metodi a confronto
sulla “persistenza” dei dati
6.20 L’oggetto ASPError
Esempi di laboratorio
Esercizi di applicazione
U.D. 7 - L’interazione tra ASP e i database
7.1
7.2
I database e il Web
L’architettura di un’applicazione
web
7.3 Le tabelle di Access
7.4 Le interrogazioni ai dati presenti
in tabella (query)
7.5 La connessione DSN ad Access
7.6 La connessione DSN-less
ad Access
7.7 L’oggetto RecordSet
7.8 Come paginare i risultati
di un Recordset
7.9 Un esempio di navigazione
tra record
7.10 La selezione nel Recordset
7.11 La selezione condizionale
di un Recordset
7.12 Usare le relazioni in un
Recordset
7.13 Raggruppare i Recordset
7.14 L’inserimento di nuovi record
nella tabella
7.15 L’eliminazione di record
in una tabella
7.16 L’aggiornamento di record
in una tabella
7.17 L’esecuzione di stored procedure
Access
7.18 Leggere un file XML in ASP
Esempi di laboratorio
Esercizi di applicazione
159
161
163
166
167
169
170
171
172
173
175
181
183
183
184
185
186
190
192
193
195
197
202
203
205
207
208
211
215
217
218
221
232
Indice
U.D. 8 - Gli script lato server con PHP
8.1
8.2
La sintassi fondamentale di PHP
L’installazione di PHP
in ambienti diversi
8.3 I blocchi e i commenti
8.4 Gli operatori
8.5 I costrutti principali
8.6 I cicli e i controlli
8.7 I tipi di dati
8.8 Il casting
8.9 L’output in PHP
8.10 Le funzioni native particolari
di PHP
8.11 Le variabili e le costanti
8.12 Le variabili provenienti dai form
8.13 I cookie
8.14 Gli array
8.15 Inviare file al client con header()
e readfile()
8.16 Le funzioni
8.17 La persistenza in PHP
8.18 L’inclusione di file esterni
8.19 I file in PHP
Esempi di laboratorio
Esercizi di applicazione
234
234
234
238
238
239
241
242
243
245
245
247
249
250
251
253
256
258
262
262
266
271
U.D. 9 - L’interazione tra PHP e i database
9.1
9.2
I tipi di connessione ai database
La connessione ad Access DSN-less
con le funzioni COM
9.3 La connessione al database
con COM e ADO
9.4 Inserire nuovi record
9.5 Leggere da una tabella
9.6 L’aggiornamento di una tabella
9.7 Il flusso dei dati nella
comunicazione tra PHP e MySQL
9.8 MySQL
9.9 Le funzioni di connessione
al database MySQL
9.10 La funzione mysql_query()
9.11 Un esempio di lettura
da una tabella MySQL
9.12 Aggiungere dati a una tabella
MySQL
9.13 L’aggiornamento dei record
di una tabella MySQL
9.14 L’eliminazione di un record
da una tabella MySQL
9.15 Verificare i risultati di una query
MySQL
Esempi di laboratorio
Esercizi di applicazione
272
272
272
273
273
274
274
275
275
276
277
277
277
278
278
278
281
287
5
P r e s e n t a zi o n e
Caratteristiche generali
Questo volume è stato scritto con l’obiettivo di fornire una panoramica sulle principali
tecnologie che permettono il funzionamento di Internet. Presenta e approfondisce i linguaggi di scripting e di marcatura maggiormente diffusi per la creazione di pagine web
statiche, dinamiche, lato client e lato server.
La trattazione parte dai concetti basilari delle tecnologie di rete e si spinge sino all’interfacciamento con i database Access e MySQL. Fornisce inoltre ampio spazio alle tematiche relative alle architetture Three-Tier, che rappresentano un modello imprescindibile
nella gestione dei siti web dinamici. I linguaggi presentati sono molteplici e vanno da
quelli di marcatura come HTML e CSS a quelli di scripting lato client (JavaScript e VBScript), fino ai linguaggi di scripting lato server (ASP e PHP).
Il volume raccoglie inoltre numerosi approfondimenti che riguardano argomenti correlati (SQL, XML, RSS) spesso presentati all’interno di esempi pratici.
Impianto didattico
Il testo è caratterizzato da una struttura modulare: gli argomenti vengono forniti con
esempi di difficoltà crescente, consentendo in tal modo allo studente di acquisire le conoscenze di base delle tematiche illustrate. Ogni Modulo presenta un macro argomento. I
moduli sono a loro volta suddivisi in Unità di apprendimento. Ciascuna Unità sviluppa
un argomento specifico ed è suddivisa in paragrafi. Al termine delle Unità di apprendimento 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 di
commenti;
: una sezione per la verifica delle conoscenze e competenze acquisite, suddivisa in
esercizi da svolgere e domande aperte.
A chi è rivolto il volume
Il libro si rivolge prevalentemente ai trienni degli Istituti Tecnici Industriali per gli indirizzi
di Informatica, Elettronica, Elettrotecnica, Telecomunicazioni, al triennio dei Licei Tecnici, al Liceo Scientifico Tecnologico, al Liceo Scientifico a indirizzo PNI, ai corsi di Informatica, Elettronica, Telecomunicazioni degli Istituti Professionali e a tutti coloro che desiderano approfondire le tematiche riguardanti i linguaggi di programmazione per il Web.
Paolo Camagni
Riccardo Nikolassy
6
Modulo
Gli script lato client
2
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
&
U.A. 4
U.A. 5
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
Un linguaggio lato client: JavaScript
Un linguaggio lato client: VBScript
5
Unità di apprendimento
Un linguaggio lato client: VBScript
5.1 VBScript
VBScript è un semplice linguaggio di scripting che esiste sia nella versione lato client sia in quella lato
server per l’implementazione di pagine ASP. Si tratta di un linguaggio che nasce come semplificazione
del noto linguaggio di programmazione Visual Basic. L’importanza di questo linguaggio si evince proprio dal fatto che una volta appreso diventa molto semplice sia muoversi all’interno di documenti ASP
sia 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 differenza sostanziale tra JavaScript e VBScript sta nel fatto che mentre il primo è un reale linguaggio
orientato agli oggetti, quindi risolve molte delle sue problematiche ricorrendo a proprietà e metodi, il
secondo lavora molto con le funzioni predefinite.
Come visto per JavaScript, anche per VBScript il codice può essere scritto direttamente all’interno delle pagine HTML in una coppia di tag che definiscono uno script. Attenzione perché nel caso di VBScript, contrariamente a JavaScript, la definizione del linguaggio è obbligatoria, come illustrato dall’esempio che segue.
<SCRIPT LANGUAGE=”VBScript”>
<!—
‘ Questo è un commento in VBScript
document.write(“Saluti a tutti da VBScript”)
—>
</SCRIPT>
È importante sottolineare che anche VBScript è in grado di gestire il BOM (Browser Object Model). Pertanto
tutti gli oggetti appartenenti al browser vengono “riflessi” all’interno degli script scritti in VBScript. È molto
importante ricordare che in VBScript le stringhe sono sempre racchiuse tra doppi apici, in quanto gli apici
singoli si usano per i commenti.
5.2 I tipi di variabili
In VBScript sono disponibili i seguenti tipi di variabile:
TIPO
INTERVALLO
Byte
Boolean
Integer
Long
Single
Da 0 a 255
True o false
Da –32.768 a 32.767
Da –2.147.483.648 a 2.147.483.647
Da –3,402823E38 a –1,401298E–45 per i valori negativi; da 1,401298E–45
a 3,402823E38 per i valori positivi
Da –1,79769313486232E308 a –4,94065645841247E–324 per i valori negativi;
da 4,94065645841247E–324 a 1,79769313486232E308 per i valori positivi
Da –922.337.203.685.477,5808 a 922.337.203.685.477,5807
Dall’1 gennaio dell’anno 100 al 31 dicembre 9999, inclusi
Double
Currency
Date
126
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
TIPO
INTERVALLO
Object
String
Qualsiasi riferimento a Object
La lunghezza di stringhe di lunghezza variabile può essere compresa tra 0 e 2 miliardi
di caratteri
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
Variant
Esistono due tipi di dichiarazione in VBScript: implicita ed esplicita, come visto per JavaScript.
La dichiarazione esplicita
Avviene 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. È tuttavia 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. È possibile utilizzare l’istruzione Option Explicit per richiedere la dichiarazione esplicita di tutte le variabili. 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’esempio 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 array sono sempre in base zero e di conseguenza il numero degli elementi in essi contenuti corrisponde
sempre al numero indicato tra parentesi più uno. Nell’esempio seguente vengono assegnati i dati da 0 a
10 ai vari elementi dell’array:
vet(0) = 256
vet(1) = 324
vet(2) = 100
...
vet(10) = 55
127
Modulo 2 - Gli script lato client
Gli array non sono limitati a una sola dimensione. È infatti possibile specificare fino a 60 dimensioni, anche se nella maggior parte dei casi ne vengono specificate solo tre o quattro. Per dichiarare dimensioni
multiple (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 potenzialità 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 a
capo 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 funzione
può 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 immettere un dato. Possiede la sintassi seguente:
variabile = InputBox(“Messaggio”,”Titolo”)
128
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
Se l’utente sceglie OK o preme INVIO, la funzione InputBox restituirà il contenuto della casella di
testo. Se invece l’utente sceglie il pulsante Annulla, la funzione restituirà una stringa di lunghezza zero (“”). Per esempio è possibile effettuare un ciclo di inserimento valori fintanto che l’utente non decide 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 al
valore booleano assunto da una certa espressione condizionale verificata da un operatore relazionale. Si
basano sul concetto di verità e falsità e generano solo due diversi valori, rispettivamente ‘true’ oppure ‘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 dell’espressione posta a destra.
>= Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è maggiore o uguale al risultato dell’espressione posta a destra.
< Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è minore del risultato dell’espressione posta a destra.
<= Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è minore o uguale al risultato
dell’espressione posta a destra.
<> Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è diverso del risultato dell’espressione posta a destra.
= Restituisce ‘true’ se il risultato dell’espressione posta a sinistra è uguale al risultato dell’espressione posta a destra.
129
Modulo 2 - Gli script lato client
Gli operatori logici sono assai simili a quelli relazionali in quanto restituiscono soltanto un valore di verità che può essere vero o falso (true o false). Gli operatori logici sono i seguenti:
and Operatore di AND logico.
Or Operatore di OR logico.
not
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 base al valore booleano assunto da una certa espressione condizionale.
If condizione Then
istruzioni ...
Else
istruzioni ...
End If
Prima di tutto è necessario chiarire che non essendoci un delimitatore di statement, come per esempio il punto e virgola in JavaScript, non si può scrivere tutto il codice su una
riga, ma ciascuna riga possiede solo uno statement. Tuttavia, quando si scrive il codice
direttamente in un tag HTML, è possibile scrivere più righe di codice separandole tra di
loro 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 in
sequenza: la prima istruzione scrive nella barra di stato della finestra
e la seconda apre una finestra di dialogo.
Per esempio:
Dim a
Dim b
a = 1
b = 2
If a < b Then
document.write “a è
Else
document.write “a è
End If
minore di b”
maggiore di b”
La selezione multipla è un’alternativa all’uso della selezione binaria annidata. Si usa quando è necessario eseguire operazioni legate a valori precisi. Mediante la selezione multipla si possono porre una serie
di condizioni da valutare in modo sequenziale.
Select Case espressione
{
Case valore
istruzioni ...
130
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
...
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...Loop
Ripete 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 controllo
iniziale: il ciclo termina quando la condizione non è più verificata. Il secondo caso mostra un ciclo con
controllo 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 presenti verrebbero eseguite almeno una volta.
131
Modulo 2 - Gli script lato client
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.
Il seguente esempio mostra due casi di utilizzo di cicli Do con controllo sul falso. Il primo caso mostra
un ciclo a controllo iniziale che termina quando la condizione è verificata. Il secondo caso mostra invece un ciclo a controllo finale.
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 seguente esempio illustra l’uscita dal ciclo quando la condizione è verificata (n<10):
Dim
c =
n =
Do
c, n
0
9
Until n = 10
n = n – 1
c = c + 1
If n < 10 Then Exit Do
Loop
MsgBox “Il ciclo viene eseguito “ & c & “ volte
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 per
5 volte. Il secondo mostra un ciclo con passo negativo.
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.”
132
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.”
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
Il contatore può essere anche di tipo float. La parola chiave Step può essere omessa per
contatori interi unitari. È infine importante ricordare che il ciclo For di VBScript incrementa 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
For Each In...Next
Consente di individuare gli elementi di un array senza ricorrere all’indice numerico che li identifica. Il
seguente 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 subroutine
viene generalemente inserito all’inizio del documento e precisamente nella <HEAD>, in tal modo è visibile al resto del documento. Per richiamare la subroutine dal codice basta scrivere in nome della subroutine stessa seguito dai parametri separati tra loro dalla virgola. Per dichiarare una subroutine è necessario scrivere la parola chiave Sub seguita dal nome della subroutine e dai parametri posti tra parentesi 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 colonne
passati 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>”
133
Modulo 2 - Gli script lato client
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 variabili infatti, vengono implicitamente dichiarate all’interno della subroutine. Vi sono anche due parametri 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 dichiarazione di subroutine si tratta sempre di un passaggio di parametri per valore. Per indicare se il parametro viene passato per valore o per riferimento è necessario anteporre al parametro formale la parola chiave ByRef (riferimento) o ByVal (valore, si può omettere). Quando un parametro viene passato per valore, la sua modifica nella subroutine non si ripercuote nel seguito del codice che richiama la
routine. Quando invece un parametro viene passato per riferimento la modifica del parametro all’interno della routine si ripercuote anche nel seguito del codice di chiamata. L’esempio che segue mostra
una 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 differenza
con le subroutine è che le funzioni possono restituire un valore associato alla funzione stessa. La sintassi per la dichiarazione di una funzione prevede la parola chiave Function seguita dal nome della funzione 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 una
temperatura in gradi Fahrenheit. La funzione elabora il risultato e lo restituisce sotto forma di temperatura 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.
134
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
5.10 Le funzioni interne di VBScript
Vediamo una tabella riassuntiva di alcune funzioni matematiche:
FUNZIONE
SIGNIFICATO
ESEMPIO
Abs(numero)
Valore assoluto
Atn(numero)
Arcotangente
Cos(numero) numero in radianti
Coseno
Exp(numero)
e ^ numero (e = 2,718282)
Fix(numero)
Parte intera
Int(numero)
Parte intera
Log(numero)
Logaritmo naturale
Oct(numero)
Ottale in base 10
Rnd
Numero casuale
Round(numero,decimali)
Arrotonda al valore di decimali
Sin(numero)
Seno
Sqr(numero) numero>0
Radice quadrata
Tan(numero)
Tangente
Abs(–58)
Ris: 58
4 * Atn(1)
Ris: 3,14159265358979
Cos(30 * 3,14 / 180)
Ris: 0,866158094405463
Exp(2)
Ris: 7,38905609893065
Fix(–7,6)
Ris: 7
Int(–7,6)
Ris: 8
Log(5)
Ris: 1,6094379124341
Oct(8)
Ris: 10
Randomize
Int(Rnd * 10)
Ris: nr. casuale >= 0
e < 10
Round(4.515,2)
Ris: 4,51
Round(4.516,2)
Ris: 4,52
Sin(30 * 3,14 / 180)
Ris: 0,499770102643102
Sqr(9)
Ris: 3
Tan(10)
Ris: 0,648360827459087
Vediamo una tabella riassuntiva di alcune funzioni per la gestione delle stringhe:
FUNZIONE
SIGNIFICATO
ESEMPIO
Asc
Restituisce il codice ASCII di un carattere
Chr
Restituisce un carattere dato
il suo codice ASCII
MyNumber = Asc(“A”)
Restituisce 65
MyNumber = Asc(“a”)
Restituisce 97
MyNumber = Asc(“Albero”)
Restituisce 65
MyChar = Chr(65)
Restituisce A
MyChar = Chr(97)
Restituisce a
MyChar = Chr(62)
Restituisce >
MyChar = Chr(37)
Restituisce %
135
Modulo 2 - Gli script lato client
FUNZIONE
SIGNIFICATO
ESEMPIO
Instr
Restituisce la posizione di una stringa
in un’altra
LCase
Converte in minuscolo
Left
Restituisce un numero di caratteri
dalla sinistra di una stringa
Len
Restituisce il numero di caratteri
di una stringa
Toglie gli spazi a sinistra
SearchString =”visulabasicscript”
Stringa in cui eseguire la ricerca
SearchChar = “i”
Esegue la ricerca della lettera “i”
MyPos = Instr(4, SearchString,
SearchChar)
Confronto testuale a partire dalla posizione 4
Restituisce 10
MyString = “VBSCript”
LCaseString = LCase(MyString)
Il valore di LCaseString è “vbscript”
MyString = “VBSCript”
LeftString = Left(MyString, 3) ‘
Il valore di LeftString è “VBS”
MyString = Len(“VBSCRIPT”) ‘
MyString include 8 caratteri
MyVar = LTrim(“
vbscript
“)
Il valore di MyVar è “vbscript”
MyVar = Mid(“VB Script è
divertente!”, 4, 6)
Il valore di MyVar è “Script”
MyString = Replace(“Linguaggio
JavaScript “, con un’altra“Java”,
“VB”)
Restituisce “VBScript”
AnyString = “Salve gente!”
MyStr = Right(AnyString, 1)
Restituisce “e”
MyStr = Right(AnyString, 6)
Restituisce “ gente”
MyStr = Right(AnyString, 20)
Restituisce “Salve gente”
MyVar = RTrim(“
vbscript
“)
Il valore di MyVar è “vbscript”
MyString = Space(10)
Restituisce una stringa con 10 spazi
MyString = “VBScriptXè Xdivertente!”
MyArray = Split(MyString, “x”)
‘ Il valore di MyArray(0) è “VBScript”
‘ Il valore di MyArray(1) è “è”
‘ Il valore di )MyArray(2) è “divertente!”
MyStr1 = “Cane”
MyStr2 = “Gatto”
MyStr3 = “Gatto”
MyComp = StrComp(MyStr3, MyStr2)
Restituisce 0
MyComp = StrComp(MyStr1, MyStr2)
Restituisce –1
MyComp = StrComp(MyStr2, MyStr1)
Restituisce 1
MyString = String(5, “*”)
Restituisce “*****”
MyString = String(5, 42)
Restituisce “*****”
MyString = String(10, “ABC”)
Restituisce “AAAAAAAAAA”
LTrim
Mid
Restituisce un certo numero
di caratteri da una stringa
Replace
Restituisce una data sottostringa
Rigth
Restituisce un numero di caratteri
dalla destra di una stringa
Rtrim
Toglie gli spazi a destra
Space
Crea una stringa di spazi
Split
Crea un array di stringhe più piccole
da una stringa
StrComp
Confronta il valore di due stringhe
String
Crea una stringa di un carattere ripetuto
un certo numero di volte
136
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
FUNZIONE
SIGNIFICATO
StrReverse Inverte una stringa
Trim
Ucase
Taglia gli spazi da entrambi i lati
di una stringa
Converte in maiuscolo
ESEMPIO
MyStr = StrReverse(“VBScript”)
Il valore di MyStr è “tpircSBV”
MyVar = Trim(“
vbscript
“)
Il valore di MyVar è “vbscript”
MyWord = UCase(“Salve gente!”)
Restituisce “SALVE GENTE!”
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:
FUNZIONE
SIGNIFICATO
ESEMPIO
Date
Restituisce la data
Time
Restituisce l’ora
Now
Restituisce la data e l’ora
DateAdd
Aggiunge un intervallo di tempo
a una data
MyDate = Date
Il valore di MyDate è la data di sistema
corrente
MyTime = Time
Restituisce l’ora di sistema corrente
MyVar = Now
Il valore di MyVar è la data e l’ora corrente
La funzione DateAdd non restituisce
una data non valida. Nell’esempio seguente
viene aggiunto un mese alla data
31 gennaio:
NewDate = DateAdd(“m”, 1, “31Jan-95”)
DateDiff
Restituisce il tempo tra due date
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
DiffADate = “Giorni mancanti: “
& DateDiff(“d”, Now, “1/1/2010”)
137
Modulo 2 - Gli script lato client
FUNZIONE
SIGNIFICATO
ESEMPIO
Day
Restituisce il giorno di una data
Month
Restituisce il mese di una data
Year
Restituisce l’anno di una data
MonthName
Restituisce il nome del mese
WeekDay
Restituisce un numero corrispondente
al giorno della settimana
WeekDayName
Restituisce il nome del giorno
della settimana
Second
Restituisce i secondi
Minute
Restituisce i minuti
Hour
Restituisce l’ora
MyDay = Day(“19/10/1962”)
Il valore di MyDay è 19
MyMonth = Month(“19/10/1962”)
Il valore di MyMonth è 10
MyYear = Month(“19/10/1962”)
Il valore di MyYear è 1962
MyMonthName =
Month(“19/10/1962”)
Il valore di MyMonthName è ottobre
MyWeekDay = Week
day(“19/10/1962”)
Il valore di MyWeekDay è 6 perché MyDate
corrisponde a un venerdì
MyWeekDay = WeekdayName
(“19/10/1962”)
Il valore di MyWeekDay è venerdì
MySec = Second(Now)
Il valore di MySec è un numero
che rappresenta i secondi
MyVar = Minute(Now)
Il valore di MyVar è un numero
che rappresenta i minuti
MyVar = Hour(Now)
Il valore di MyVar è un numero
che rappresenta l’ora in formato (0-23)
FormatDateTime(now, 0)
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
FormatDateTime Restituisce la data e l’ora secondo
un formato
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
document.write “Sei nato di “
document.write “Da quando sei
& “ giorni<BR>”
document.write “Da quando sei
& “ mesi<BR>”
document.write “Da quando sei
& “ settimane”
138
sei nato (gg/mm/aaaa)?”)
& giorni(Weekday(DataNascita)) & “<BR>”
nato sono passati “ & Datediff(“d”,DataNascita,Now)
nato sono passati “ & Datediff(“m”,DataNascita,Now)
nato sono passati “ & Datediff(“ww”,DataNascita,Now)
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
5.11 Associare gli eventi
Per associare del codice VBScript a eventi, è possibile procedere in due modi diversi. Un primo metodo 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 quale
opera, che deriva dall’attributo NAME e il nome dell’evento associato. Nell’esempio che segue a ogni
click sul pulsante Puls1 viene cercata ed eseguita la corrispondente routine di eventi Puls1_OnClick.
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 contiene la parola chiave EVENT seguita dal nome dell’evento e FOR seguita dal nome dell’oggetto al quale è 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 Sub
non vengono utilizzate.
Esiste inoltre un terzo modo: mediante Internet Explorer è possibile aggiungere brevi sezioni di codice sulla 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 due
punti (:).
5.12 VBScript e il browser
Innanzi tutto è importante tenere presente che tutti gli oggetti del browser sono riflessi all’interno degli
script VBScript come visto in precedenza per JavaScript. La notazione che si deve adottare è la dot notation. In tal modo qualunque oggetto è identificabile indicandone la gerarchia completa fino alla proprietà o al metodo interessato. Così se, per esempio, si vuole fare un semplice script con due pulsanti, di
cui uno incrementa un valore numerico presente in una casella di testo e l’altro lo decrementa, è sufficiente associare all’evento del pulsante una funzione che calcoli il nuovo valore e lo scriva all’interno della 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 o
decrementare il valore del campo di nome conta.
139
Modulo 2 - Gli script lato client
Siccome questa casella di testo non è contenuta all’interno di un form, affinché lo script possa individuarla all’interno della gerarchia degli oggetti del browser (BOM) è necessario scriverne il nome dopo
gli 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 prima
dell’inoltro.
Il codice HTML genererà una casella di testo e un pulsante. Al form è associata, tramite l’evento OnSubmit, la subroutine Verifica che accerta la validità del dato. In questo caso, attraverso la funzione interna di VBScript IsNumeric, viene verificato se il campo contiene un numero; viene verificata
inoltre la presenza di un numero compreso tra 0 e 100. Se le condizioni sono accertate, tramite il metodo 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
Nell’esempio il valore viene verificato direttamente in base a un numero, ovvero, tramite la funzione
IsNumeric, viene verificato che la stringa inclusa nella casella di testo sia un numero. Anche se in
VBScript stringhe e numeri vengono conver titi automaticamente in modo adeguato, è consigliabile controllare sempre il sottotipo dei valori immessi dall’utente e utilizzare, se necessario, le funzioni di conversione.
Quando si eseguono somme con i valori di caselle di testo è inoltre necessario conver tire i valori in numeri in modo esplicito: il segno più (operatore +) rappresenta infatti sia l’addizione sia il concatenamento di stringhe. Se, per esempio, Text1 include “1” e Text2 include “2”, il risultato ottenuto sarà il seguente:
A = Text1.Value + Text2.Value
A = CDbl(Text1.Value) + Text2.Value
140
‘ A è
‘ A è
“12”
3
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
5.14 VBScript e i confronti tra le date
La gestione del formato “data” rappresenta in VBScript una caratteristica molto importante. Se in
uno script si ha la necessità di confrontare due date tra di loro, non è possibile effettuare una condizione 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, quindi il risultato è sbagliato. L’accorgimento da adottare quando si vogliono fare confronti tra date, è quello 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 giorni
intercorrenti 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 in
giorni, 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”.
141
Modulo 2 - Gli script lato client
Esempi di laboratorio
Unità di apprendimento 5
Esempio 1
Il File System di Windows (FSO) e la gestione di file, cartelle e dischi
Tutti 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 informazioni. 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 realizzate. ActiveX, a sua volta, è un sottoinsieme delle classi COM (Component Object Model). In VBScript richiamare un ActiveX è estremamente semplice, mediante l’utilizzo dell’oggetto ActiveXObject. Il compito di questo oggetto è quello di attivare e restituire un riferimento proprio a un componente ActiveX. La sintassi necessaria è 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 probabilmente 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 semplice interfaccia utile per interagire con il File System del server. In poche parole grazie a questo ActiveX è possibile leggere e scrivere file sull’hard disk del server, creare cartelle, eliminare file che non servono più, ottenere la lista di tutti i file contenuti in una cartella, gestire file di testo o binari e tanto altro. Inoltre, a questo oggetto 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:
METODI
BuildPath
CopyFile
CopyFolder
CreateFolder
CreateTextFile
DeleteFile
DeleteFolder
DriveExists
FileExists
FolderExists
GetAbsolutePathName
GetBaseName
GetDrive
142
Aggiunge un nome alla fine di un percorso esistente
Copia uno o più file da una posizione a un’altra
Copia una cartella da una posizione a un’altra
Genera una nuova cartella
Crea un file di testo e restituisce un oggetto TextStream utile per lavorare
con il file creato
Cancella un file
Cancella una cartella
Restituisce un booleano che indica se il drive specificato esiste
Restituisce un booleano che indica se il file specificato esiste
Restituisce un booleano che indica se la cartella specificata esiste
Restituisce un percorso completo a partire da uno ambiguo
Restituisce il nome di un file privo dell’estensione
Restituisce un oggetto Drive relativo all’unità di un percorso specificato
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
Esempi di laboratorio
Unità di apprendimento 5
METODI
GetDriveName
GetExtensionName
GetFile
GetFileName
GetFolder
GetParentFolderName
GetSpecialFolder
GetTempName
MoveFile
MoveFolder
OpenTextFile
Restituisce una stringa contenente il nome dell’unità di un percorso
specificato
Restituisce una stringa contenente l’estensione di un file specificato
Restituisce un oggetto File relativo al percorso specificato
Restituisce l’ultimo componente del percorso specificato che non fa parte
della specifica di unità
Restituisce un oggetto Folder relativo al percorso specificato
Restituisce una stringa contenente il nome della cartella principale
dell’ultimo componente del percorso specificato
Restituisce la cartella speciale specificata. Cartelle speciali sono
per esempio quelle contenenti file temporanei, file di sistema ecc.
Restituisce un nome di file o cartella generato in modo casuale, utile
per eseguire operazioni che richiedono un file o una cartella temporanea
Sposta uno o più file in una diversa posizione
Sposta una cartella in una diversa posizione
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 FileSystemObject stesso, che espone molti metodi e una sola proprietà, Drives, che restituisce
la collection di tutti i drive del sistema. L’oggetto
FileSystemObject è l’unico oggetto “creabile” nella gerarchia, cioè l’unico oggetto che può
essere istanziato con CreateObject, come vedremo. Tutti gli altri oggetti sono oggetti dipendenti che derivano da esso e vengono esposti
sotto forma di metodi o proprietà (figura a lato). E
Oggetti
FileSystemObject
Collection
Drives
Drive
Folders
Folder
Files
File
TextStream
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 riguardanti il File System. Per esempio:
drive=”C:”
Set oggetto = CreateObject(“Scripting.FileSystemObject”)
msgbox “Dimensione del drive C: “
& FormatNumber (oggetto.GetDrive(drive).TotalSize,0) & “ bytes”
143
Modulo 2 - Gli script lato client
Esempi di laboratorio
Unità di apprendimento 5
produce il messaggio indicato nella figura a lato. E
Come si vede dall’oggetto FileSystem, è stato richiamata la proprietà drive 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:
144
Da Risorse del computer:
Unità di apprendimento 5 - Un linguaggio lato client: VBScript
Esempi di laboratorio
Unità di apprendimento 5
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 percorso completo. Lo stesso principio è adottato per leggere i file. Le cartelle, per distinguerle dai file, sono visualizzate 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 proprietà innerHTML per scrivere all’interno del paragrafo di testo. Il paragrafo di testo viene individuato attraverso 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 radice 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.”
145
Modulo 2 - Gli script lato client
Esercizi di applicazione
Unità di apprendimento 5
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 visualizzi 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-
6
7
8
9
q0
qa
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 misura di partenza e sempre una select permette all’utente di scegliere l’unità che deve essere calcolata.
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.
Crea uno script che permetta all’utente di giocare al gioco dell’impiccato. Il modulo deve contenere una casella 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. Premendo 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.
Crea uno script che permetta di giocare con il browser. L’utente pensa a un numero minore di 1000 e il calcolatore genera una sequenza di numeri cercando di indovinarlo. Lo script deve sempre riuscire a indovinare il numero con meno di 10 tentativi, dove a ogni tentativo l’utente indica al calcolatore se il numero generato è minore o maggiore di quello da lui pensato.
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.
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 numerici e alfabetici.
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 sulla casella di testo, insieme a una funzione che verifica ogni volta la lunghezza della stringa e inserisce i caratteri 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.
146

Documenti analoghi

Tutorial VBScript - Storace e il PON 2007/2013

Tutorial VBScript - Storace e il PON 2007/2013 Quando la pagina HTML arriva al browser, questo interpreta il codice compreso nel tag