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
Quando la pagina HTML arriva al browser, questo interpreta il codice compreso nel tag