WebDeveloper ASP. Proseguiamo il filone aperto. 1 Da sito statico a dinamico. 1 a lezione. A scuola con PC Open IL CALENDARIO DELLE LEZIONI

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "WebDeveloper ASP. Proseguiamo il filone aperto. 1 Da sito statico a dinamico. 1 a lezione. A scuola con PC Open IL CALENDARIO DELLE LEZIONI"

Transcript

1 1 a lezione A scuola con PC Open WebDeveloper ASP 1 Da sito statico a dinamico Proseguiamo il filone aperto a inizio d'anno con il corso Webmaster per affrontare questa volta la progettazione di pagine e siti dinamici realizzati con tecnologia Microsoft. Il corso, che si articola in quattro puntate, vi spiegherà tutti gli elementi essenziali per realizzare un progetto completo, inclusa l'integrazione con un database esterno. HTML è, come abbiamo approfondito nelle puntate del corso Webmaster, un linguaggio utilizzato per la costruzione di pagine Web di natura statica. Con statico in questo contesto intendiamo prevedibile: una pagina realizzata con solo codice HTML produce lo stesso risultato per ogni visitatore che vi accede. Se la realizzazione di siti Web si fermasse a un sito statico, però, quasi tutto quello che siamo abituati a vedere oggi in Internet (forum, servizi di home banking, chat) non sarebbe possibile. Da statico a dinamico Per dinamico si intende un sito in grado di interagire con l utente, così da rispondere in modo attivo e diverso caso per caso, per esempio riportando Lezione 1: Da sito statico a dinamico Da sito statico a dinamico Come realizzare siti dinamici Una prima pagina ASP Anatomia di una pagina ASP Rendere il codice leggibile e facile da modificare: gli include ASP in cima alla pagina il nome dell utente registrato o addirittura, come succede ad esempio per MyYahoo ( yahoo.com/), personalizzando i contenuti. Ma quando vale la pena di realizzare un sito dinamico? La risposta dipende da molti fattori, come ad esempio la dimensione del sito stesso, la frequenza di aggiornamento e la necessità di aggiungere o modificare diverse sezioni in tempi brevi. Se l unico scopo del sito è di ospitare il vostro curriculum vitae, pubblicare qualche foto delle vacanze o pubblicizzare in poche pagine l attività della vostra società, probabilmente potete accontentarvi delle possibilità offerte da un sito statico. In questo caso realizzerete tante pagine HTML quante sono le pagine del sito, ad esempio 10 pagine contenenti ognuna 5 foto delle vostre vacanze. Ponete ora il caso che al posto di sole 10 pagine ne abbiate via via aggiunte delle altre nel corso delle stagioni: vi troverete ben presto ad ospitare sul vostro sito qualche centinaio di pagine. Nessun problema fino a quando non dovete IL CALENDARIO DELLE LEZIONI Le prossime puntate Lezione 2: Portare il sito sul server Lezione 3: ASP e i database Lezione 4: Uso avanzato dei database apportare delle modifiche, ma pensate se un domani volete spostare la didascalia da sotto la foto a sopra, magari aumentando le dimensioni del carattere per simulare un titolo: non avete alcuna altra scelta se non di ripassare una per una le pagine. Realizzando un sito dinamico, invece, sarebbe sufficiente realizzare una sola pagina tipo (detta in gergo template), che assomiglia in tutto per tutto alle pagine realizzate precedentemente, solo che contiene testo e immagini fittizi. A questo punto è possibile sostituire al testo e all immagine alcune istruzioni scritte in un linguaggio di programmazione, in modo da interagire con una base di dati, cioè un contenitore (ne parleremo approfonditamente nella terza puntata) di didascalie e foto. Quando l utente del nostro sito richiama la pagina con le foto, gli viene servito sempre lo stesso template, ma il contenuto prelevato dalla base di dati cambierà di volta in volta (le foto di Parigi, di Londra, e così via). Il vantaggio in termini di manutenzione è evidente, perché la pagina da aggiornare è solo una, ma c è di più. Se i dati sono ospitati in un sito dinamico, è possibile realizzare funzioni di ricerca che permettono al visitatore di recuperare le informazioni di interesse, in questo caso di accedere alle foto volute senza doverle scorrere tutte. Ad esempio pon.com/foto.asp contiene elenchi generati in modo del tutto dinamico ed è possibile effettuare un buon numero di ricerche. Alla fine del presente corso saremo in grado di costruire una pagina simile a questa. di Antonio Volpon Come installare gli esercizi Vediamo come configurare Internet Information Services su Windows XP Professional per poter utilizzare gli esempi del corso 1 - Aprite il Control Panel dal menu Start / Settings Start e da qui selezionate Add or Remove Programs. A questo punto cliccate la voce Add / Remove Windows Components dalla barra laterale sinistra. Assicuratevi che IIS sia installato, oppure procedete all installazione spuntando la relativa voce. Chiudete tutte le finestre, ad eccezione del Control Panel 2 - Andate sul sito di PC Open (sezione Guide pratiche) e scaricate i file del corso in una cartella del vostro disco fisso 3 - Dal Control Panel selezionate Administrative Tools 4 - Nella lista dei programmi di amministrazione selezionate Internet Information Services e apritelo 5 - A questo punto siete ai comandi dei server. Non vi resta che configurarlo perché prenda gli esempi dalla cartella che avete creato sopra. Per farlo, selezionate la voce Default Web Site con il tasto destro e aprite la finestra delle proprietà 6 - A questo punto procedete alla linguetta Home Directory e scrivete il percorso della cartella nella quale avete salvato i file (alternativamente potete sfogliare nel disco servendovi del pulsante Browse) 7 - A questo punto potete chiudere tutte le finestre, aprire un browser e digitare l indirizzo di una pagina di esempio, Localhost è il nome del vostro server locale, che potete usare non solo per eseguire i nostri esempi, ma per sperimentare dal vivo il mondo ASP 1/97

2 1 a lezione 2 Come realizzare siti dinamici Per dotare la pagina Web di dinamicità, in modo che il risultato prodotto dipenda da alcuni fattori, primo fra tutti l interazione degli utenti con il sito, è necessario arricchire il codice HTML con le potenzialità date dalle piattaforme lato server. Nella settima lezione del corso Webmaster sono stati presentati alcuni approcci per la realizzazione di pagine dinamiche, con particolare riferimento a CGI (Common Gateway Interface). In queste 3 puntate affrontiamo invece lo studio di ASP (acronimo di Active Server Pages), la piattaforma Microsoft che in questi ultimi anni ha riscosso parecchio successo per diverse ragioni, prima fra tutte la relativa semplicità di apprendimento che ne ha diffuso l utilizzo ben al di fuori dalla ristretta cerchia dei programmatori. L idea che sta alla base di questo tipo di soluzioni è molto semplice: nel codice HTML è inserita una serie di istruzioni che il Web server è in grado di interpretare e la pagina viene salvata con una particolare estensione, normalmente ASP. Quando l utente, utilizzando il proprio browser, accede a una pagina con questa estensione, il Web server non la preleva dal disco fisso per inviarla immediatamente al richiedente, ma la analizza alla ricerca di eventuali parti di codice ASP. Il server Web si compone di diverse componenti software, dette librerie, ognuna specializzata in un particolare compito, tra cui ce n è una (asp.dll) che riceve dal server il codice da eseguire. Questa libreria è responsabile di interpretare ed eseguire il codice ASP e di restituire di nuovo al server il risultato dell elaborazione (tipicamente dati provenienti da un database). Il server sostituisce quindi il codice ASP all interno della pagina con il codice HTML prodotto dalla libreria (l elenco dei movimenti di un conto bancario, ad esempio) e invia il risultato finale al browser dell utente. È quindi importante sottolineare come il codice ASP non arrivi mai al browser dell utente, ma venga eseguito esclusivamente sul lato server. Questo ha delle importanti ripercussioni sulla sicurezza di una pagina: se l utente fosse in grado di leggere nel sorgente di una pagina il codice ASP, potrebbe impossessarsi di informazioni riservate, come ad esempio le password di accesso a un database, o risalire alla configurazione delle macchine che ospitano il sito. Da quanto abbiamo detto è anche chiara la differenza tra un linguaggio server side, come per l appunto sono quelli della piattaforma ASP, e un linguaggio client side, come è invece Javascript. Nel caso di Javascript è direttamente il browser ad eseguire il codice, e proprio per questo le potenzialità e funzionalità di questo tipo di linguaggi sono esigue se paragonate a quelle di un linguaggio interpretato direttamente dal server. Active Server Pages e Internet Information Services ASP vuol dire Microsoft e il server Web d eccellenza di casa Microsoft è IIS (Internet Information Services), disponibile come componente gratuito in Windows 2000, XP e naturalmente Windows Server Ma il supporto per ASP può anche essere installato su Windows NT, come parte del Windows NT 4.0 Option Pack e perfino su macchine Windows 95/98, in questo caso utilizzando il Personal Web Server (una versione leggera, ma che svolge gli stessi compiti di IIS). Possono essere scaricati entrambi da Internet [[ P]]. Anche se ASP è una tecnologia Microsoft, alcune società si sono sforzare di portare questa piattaforma in altre realtà, come ad esempio Sun ONE Active Server Pages [ sun.com/ software/chilisoft/ index.html], che consente di far girare applicazioni ASP sui server Sun. Per i dettagli sull installazione e configurazione di ASP e IIS vi rimandiamo alla settima puntata del corso di Webmaster. Se invece state cercando qualche provider che vi dia la possibilità di sperimentare gli esercizi del corso senza dover configurare il vostro PC, date un occhiata a quelli presenti in /ASP/freeasphost.ASP, molti dei quali gratuiti. Tenete comunque conto che normalmente è più comodo lavorare in locale fino a quando le pagine sembrano funzionare correttamente senza errori macroscopici, e portare successivamente l applicazione nelle cartelle messe a disposizione dal provider. ASP e i linguaggi di scripting ASP non è un linguaggio, ma una piattaforma, un insieme di oggetti e funzionalità. Questo vuol dire che per realizzare pagine ASP potete utilizzare diversi linguaggi, e l adozione di uno o dell altro dipende semplicemente da quello con il quale vi sentite più a vostro agio. Se conoscete Visual Basic, ad esempio, la scelta ideale è rappresentata da Visual Basic Script, mentre se realizzate pagine HTML con codice Javascript, potreste preferire Jscript. Indipendentemente dal linguaggio utilizzato, comunque, i risultati non cambiano minimamente. L unica accortezza che vi suggeriamo di adottare è di non usare, anche se è tecnicamente possibile, linguaggi diversi in una pagina ASP, per evitare di sprecare importanti risorse, visto che ASP deve caricare in memoria un interprete diverso per ogni tipo di linguaggio utilizzato. Visual Basic Script (abbreviato spesso con VBScript) è I principali oggetti ASP Application: consente di definire dati e informazioni comuni a tutta l applicazione Web. Il copyright del sito, che sarà comune a tutte le pagine, potrebbe essere definito grazie a questo oggetto AspError: in caso di errore, dà al programmatore la possibilità di accedere ai dettagli dell ultimo errore che si è verificato ObjectContext: viene impiegato per creare pagine Web che sfruttano le transazioni, e il suo uso va al di fuori dello scopo di questo corso. Basti sapere che una transazione è utilizzata per raggruppare al suo interno più operazioni atomiche ed è impiegata, nel caso di errori o situazioni non attese, per riportare l applicazione allo stato precedente Request: quando l utente interagisce con la pagine ASP, le informazioni inviate passano per l oggetto Request, che viene interrogato per ottenere i dati inviati dal browser verso il server Response: può essere considerato l antagonista dell oggetto request. Se quest ultimo si preoccupa di ospitare i dati inviati dagli utenti, response invia informazioni dal server al browser, un po come la funzione print del Basic stampa caratteri a video Server: svolge alcune funzioni di utilità, come ad esempio definire il tempo massimo di esecuzione di uno script (prima di andare in timeout per preservare risorse) e porta con sé alcune informazioni relative al browser dell utente e al sito di provenienza Session: consente al programmatore di salvare e recuperare informazioni di un particolare utente nel corso della sua navigazione. Diversamente dall oggetto Application, che contiene informazioni comuni a tutta l applicazione, Session contiene quelle di un solo utente. Si presta quindi molto bene per ospitare dati come gli elementi di un carrello elettronico, il nome e cognome del visitatore, e così via. 2/97

3 1 a lezione un sottoinsieme di Visual Basic del quale eredita diverse funzionalità, ma si differenzia per alcuni importanti aspetti, prima di tutto per il fatto che si tratta di un linguaggio completamente interpretato, e quindi dalle prestazioni di esecuzione decisamente inferiori. In questa sede utilizzeremo proprio VBScript per realizzare pagine ASP. Sia Visual Basic, sia VBScript sono linguaggi case insensitive, il che vuol dire che potete scrivere le parole chiave del linguaggio, i nomi delle variabili e le espressioni indifferentemente in maiuscolo, minuscolo o una combinazione dei due: non fa alcuna differenza. Scrivere pagine ASP Come per le pagine HTML, anche per scrivere pagine ASP avete due scelte: utilizzare un semplice editor di testo oppure affidarvi a qualche programma più evoluto, che evidenzi le parole chiave del linguaggio o vi aiuti addirittura nella stesura del codice, come Visual Interdev di Microsoft [ microsoft.com/ vinterdev/default.asp] (da qualche tempo incluso in Visual Studio.NET). La soluzione migliore è forse quella di utilizzare uno strumento che consenta sia di sviluppare codice HTML, sia di integrarlo con codice ASP. Tra i prodotti sul mercato vale la pena di ricordare Dreamweaver MX di Macromedia [ dia.com/software/dreamwea ver/] e l ultima versione di TopStyle [ com/topstyle/], entrambi scaricabili in versione di prova. Per svolgere gli esempi di questo corso, comunque, un semplice editor di testo è più che sufficiente. Gli esempi del corso Cercheremo di accompagnare con diversi esempi il nostro viaggio nel mondo della tecnologia ASP, così da mettervi subito in condizione di capire quali sono i vantaggi di questa piattaforma rispetto alle semplici pagine HTML, e per fornirvi qualche spunto nel realizzare i vostri prossimi progetti. Al termine delle tre puntate avremo realizzato la struttura di un semplice sito fittizio per il signor Mario Rossi, composto da Home Page, elenco delle foto delle vacanze (prelevate da database) e possibilità di inviare commenti a Mario con un form. Nel corso delle puntate non ci preoccuperemo della resa visiva delle pagine, cioè di creare pagine belle da vedere. Preferiamo concentrarci sul codice nudo e crudo, per rendere gli esempi più semplici da capire e mirati, data anche la facilità con cui il numero di righe in una pagina ASP tende ad aumentare con l inserimento di tag HTML. Lasciamo al lettore la possibilità di personalizzare ed estendere quanto riportato su queste pagine. Dobbiamo però cominciare con ordine, e introdurre per prima cosa qualche concetto di base, visto che realizzare pagine ASP, per quanto si tratti di una tecnologia semplice e al tempo stesso potente, è in realtà costruire dei veri e propri programmi. 3 Una prima pagina ASP Prima di entrare nel dettaglio delle funzionalità di VBScript, vediamo un primo esempio di pagina ASP che ci servirà per gli esempi futuri (listato 1). L1 Questo semplice esempio (che ha solo scopo didattico), produce una pagina HTML con un elenco di frasi del tipo Sono arrivato a... da 1 a 10. Nulla di eccezionale, ma che comunque ci introduce al mondo della programmazione. Nel codice della pagina, infatti, è presente una sola frase Sono arrivato a, mentre nella finestra del browser il testo viene ripetuto 10 volte, cosa impossibile se avessimo realizzato una semplice pagina HTML. Il codice ASP vero e proprio si trova racchiuso tra e. Il processore ASP, nell incontrare questi tag, sa che il loro contenuto non è un semplice codice HTML, da restituire così com è alla pagina, ma una serie di istruzioni da eseguire. Non c è limite al numero di volte in cui inserire i tag, ma sempre per motivi di prestazione è buona norma isolare il più possibile il codice ASP dal resto della pagina HTML. Non solo, così facendo il codice risulta notevolmente più chiaro da leggere e modificare, soprattutto se chi realizza la pagina HTML non è la stessa persona che programma anche il codice ASP. Per realizzare esempi più complessi, e soprattutto più utili rispetto al precedente, è ora necessario analizzare più da vicino le potenzialità di VB- Script. Fondamenti di VBScript Abbiamo detto che una pagina ASP è un insieme di HTML con righe di codice interpretate, e che in questo corso utilizzeremo VBScript quale linguaggio per costruire la nostra applicazione.vediamo allora le principali strutture messe a disposizione da VBScript, e come vengono utilizzate per costruire pagine ASP. Nel costruire pagine dinamiche, per quanto una sia diversa dall altra, un programmatore ha normalmente alcune esigenze ricorrenti. Se ripensiamo all elenco di foto delle vacanze, realizzate con un unico template, chi sviluppa ha bisogno di: 1. memorizzare il titolo della foto prelevato dalla base di dati (per poi compilare il template) 2. ripetere più volte il template (cioè, ciclare per tutte le foto di interesse) 3. decidere, in base all input dell utente, quali foto visualizzare VBScript, come molti linguaggi di programmazione, rende disponibili una serie di funzionalità che il programmatore può adottare per queste necessità. Una variabile, come vedremo tra poco, viene utilizzata proprio allo scopo di salvare informazioni di volta in volta diverse, come il titolo della foto nel nostro caso. Per ripetere un template sono impiegati i cicli, cioè dei costrutti (un costrutto è una serie di istruzioni, che solitamente hanno senso solo nella loro complessità) che ripetono una serie di istruzioni fino al verificarsi di una condizione limite. Per decidere come proseguire in seguito all input dell utente, infine, sono impiegate le espressioni condizionali. Vediamo nel dettaglio l uso di queste strutture di programma. Variabili Una variabile, così come un documento salvato sul computer, è un contenitore di informazioni. Se realizzate un documento Word e lo salvate su disco fisso, questo è composto da due dati: il nome con cui avete salvato il documento, e il suo contenuto (ad esempio telefoni.doc è un documento che contiene l elenco dei numeri telefonici dei vostri amici). Allo stesso modo, una variabile è l unione di due elementi: un nome e un contenuto. Un istruzione di questo tipo, ad esempio: telefono = definisce una variabile, il cui nome è telefono, e il cui contenuto è la stringa (ovvero, l insieme di caratteri) (prestate anche attenzione al fatto che i doppi apici non sono parte del contenuto, ma servono da delimitatore). Le variabili sono un elemento fondamentale dei linguaggi 3/97

4 1 a lezione di programmazione, e il motivo è evidente: sono utilizzate per memorizzare valori che dipendono dall input dell utente. Pensate a un programma che richiede d'inserire un numero, e lo moltiplica per due. Poiché non è dato sapere a priori il valore inserito dall utente, useremo una variabile, ed effettueremo le operazioni con essa (vedi l'esempio 1). E1 riabile è un contenitore di valori, e che è possibile eseguire operazioni tra variabili. Tali operazioni, il cui risultato viene anch'esso assegnato a una variabile, sono dette espressioni, e sono composte da valori (come 2, ), variabili (come telefono) e operatori (+, *). Il risultato di un espressione dipende però dal tipo di dato con il quale opera, e in dipendenza di esso i risultati possono essere diversi. L'espressione riportata nell'esempio 3 assegna alla va- una variabile, come nell esempio del sito con foto, dove è necessario ospitare più titoli e descrizioni. In questo caso si parla di array, e la dichiarazione è del tutto simile a quella di una variabile, come nell'esempio 6. E6 si è deciso di visualizzare 5 foto per pagina, un espressione condizionale potrebbe venire impiegata per stabilire quando è il momento di spostarsi su una nuova pagina, con qualcosa del tipo elencato nel listato 4. L4 Anche se vedremo più avanti come riconoscere il valore inserito dall utente, l esempio precedente ci fa capire che è anche possibile assegnare a una variabile il risultato di un operazione che coinvolge altre variabili. Tornando all esempio di sito con foto, useremo alcune variabili che di volta in volta contengono il titolo della foto e la didascalia. Ci sono due modi per creare una variabile in VBScript. Il primo è chiamato dichiarazione implicita, e consiste nell usare direttamente la variabile, ad esempio strsaluto = Hello world È anche possibile dichiarare esplicitamente la variabile prima dell uso, con una forma del tipo riportata nell'esempio 2. E2 Questa seconda modalità è preferibile perché, quando viene utilizzata insieme alla direttiva Option Explicit, limita i problemi se digitate erroneamente i nomi delle variabili (come ad esempio strsluto al posto di strsaluto). Nel caso di dichiarazione implicita, infatti, le variabili vengono create automaticamente, ed è così più difficile accorgersi di aver commesso un errore, in quanto l esecuzione della pagina non viene interrotta. Con Option Explicit, una direttiva che è possibile inserire in testa ad ogni pagina ASP, ogni variabile deve invece essere dichiarata, pena la non esecuzione della pagina. Tipi di dato e operatori Abbiamo detto che una va- E3 E4 riabile c il valore 5. L'espressione invece riportata nell'esempio 4 produce come risultato 23, l unione di 2 e 3. La differenza sta nel tipo di dato delle variabili. Nel primo caso si tratta di numeri, nel secondo caso, che utilizza stringhe (si distinguono grazie alla presenza dei doppi apici), è stata eseguita una concatenazione (ne riparleremo tra breve). Solitamente, ogni linguaggio di programmazione dispone di un certo numero di tipi di dato che è possibile e necessario impiegare nella costruzione dei programmi, ma in VBScript, e questa è un altra differenza rispetto a Visual Basic, esiste un solo tipo Variant, ossia un tipo di dato particolare, nel senso che di volta in volta può rappresentare una stringa, un intero, una data, eccetera, in base al contesto nel quale viene utilizzato. Nell'esempio 5 il tipo E5 di dato è sempre Variant, ma rappresenta una data. Array Negli esempi precedenti, a ogni variabile è stato associato un solo valore. Capita però che sia utile assegnare più valori a Espressioni condizionali Capita spesso che l esecuzione di una riga di codice del programma dipenda dalla verifica di una condizione. Pensate a un sistema Bancomat: se il codice inserito è corretto, il sistema procede con il menu delle operazioni, altrimenti avverte dell errore e richiede nuovamente l inserimento del codice. Lo stesso si verifica in una pagina Web: in uno dei prossimi esempi vedremo come far cambiare l aspetto di una voce di menu in dipendenza della scelta dell utente. Anche in VBScript, come in quasi tutti i linguaggi, è possibile accertarsi del risultato di una condizione per proseguire in un modo o in un altro il flusso del programma. L'espressione riportata nel listato 2 verifica L2 quale tra le due variabili x e y ha un valore maggiore, e assegna di conseguenza la variabile strrisultato a uno solo dei due possibili valori. Se le condizioni da verificare sono più di due, è possibile impiegare una versione estesa rispetto a if...then...else, che prende il nome di if...then...elseif come indicato nel listato 3. L3 Nel caso del sito con l elenco di foto delle vacanze, in cui Cicli Immaginate di acquistare alcuni testi da una libreria on line, come ad esempio Amazon. La procedura di acquisto termina normalmente con un riepilogo del vostro ordine, e molto probabilmente vi troverete in una pagina che presenta una tabella con l elenco dei libri scelti. La pagina deve essere in grado, in dipendenza del numero di libri, di allungarsi e di accorciarsi secondo le esigenze (c è chi acquista un solo prodotto, chi ne approfitta per rimpinguare l intera biblioteca). Il programmatore che ha realizzato la pagina si è quindi preoccupato di ripetere un operazione per più di una volta, fino al verificarsi di una condizione limite. In questo caso entrano in gioco i cicli, che in VB- Script possono essere realizzati ricorrendo ai costrutti for...next, do...while o while...wend. Con il ciclo riportato nell'esempio 7 la variabile y vale E7 1,3,6,10,15... Il significato del ciclo è: incrementa la variabile i di una unità fino a che raggiunge il limite di 10. Nel caso riportato nell'esempio 8 il ciclo viene eseguito fintantoché la variabile i è inferiore o uguale a 5. E8 4/97

5 1 a lezione Se estendiamo questo esempio, lo possiamo utilizzare per il nostro sito di foto on line, che prevede di suddividere le foto in pagine che ne contengono 5. Anche se ci manca qualche nozione sui database per poter scrivere il codice completo, questo avrà una forma simile a quanto riportato nell'esempio 9. zione. Per concatenare una stringa si utilizza l operatore &, come nell esempio 10. E10 E12 E9 Concatenare le stringhe Un operazione spesso usata nel costruire pagine ASP con VBScript è la concatenazione di stringhe, ossia produrre una variabile stringa che è il risultato dell unione di altre stringhe (o meglio, come dicevamo, di altre variabili di tipo Variant). Pensate al nostro esempio di foto on line. In testa alla pagina potreste voler visualizzare un testo in questa forma: foto scattata a seguito di volta in volta da un dato proveniente dalla base di dati. Per farlo avete bisogno di costruire una stringa composta da due parti, una fissa e una ogni volta diversa. Questa operazione prende il nome di concatena- Abbiamo per prima cosa definito due array, e abbiamo popolato il primo con l elenco di città. Successivamente abbiamo valorizzato delle stringhe concatenando a un testo fisso il nome delle due città. Poiché il codice ASP è ospitato in HTML, nulla ci vieta di costruire stringhe che contengano tag, come nell esempio seguente 11. E11 Per il browser non c è nessun problema nel ricevere questa stringa, in quanto l interprete ASP ha precedentemente risolto l istruzione e l ha convertita nel corrispettivo codice HTML, in modo del tutto trasparente per il client. Procedure Come gran parte dei linguaggi, anche VBScript dà allo sviluppatore la possibilità di accorpare più istruzioni in procedure, così da rendere il codice maggiormente leggibile e soprattutto riutilizzabile. Ne esistono di due tipi: Sub e Function. La prima è una procedura che, al termine dell esecuzione, non restituisce un valore frutto dell elaborazione, ma si limita a restituire il controllo al codice chiamante. Nel prossimo esempio vediamo invece la procedura Function che in questo caso accetta in input due stringhe e ne restituisce la concatenazione, come appare nell'esempio 12. Commenti Come per quasi tutti i linguaggi, anche VBScript prevede la possibilità d'inserire commenti nel codice. Per farlo esistono due sintassi equivalenti, la prima prevedere l uso dell apice singolo, la seconda della parola chiave rem, entrambi inseriti all inizio della riga da commentare (vedi l'esempio 13). E13 Questa veloce introduzione al mondo di VBScript è sufficiente per questo corso ASP. Vi consigliamo però di scaricare dal sito Microsoft il file di riferimento del linguaggio, totalmente gratuito, che vi aiuterà più di una volta mentre realizzate le vostre applicazioni. Lo potete trovare partendo da questo indirizzo: msdn.microsoft.com/scrip ting/. 4 Anatomia di una pagina ASP Mettiamo in pratica quanto appreso fino a qui e costruiamo un secondo, semplice esempio di pagina ASP (vedi il listato 5). Lo scopo di questa pagina è visualizzare la data e ora attuali. La direttiva language, che compare in testa alla pagina, istruisce il server Web relativamente al linguaggio utilizzato in questa pagina, in questo caso VBScript. Abbiamo già introdotto il ruolo della direttiva Option Explicit, un comodo controllo che possiamo inserire per cautelarci da eventuali errori di ortografia, così da utilizzare correttamente i nomi delle variabili in tutto il codice che scriviamo. Dim è la parola chiave utilizzata per definire le variabili che vengono utilizzare poco sotto, L5 e che ospitano il mese, l anno, il giorno, le ore e i minuti correnti. Poco sotto sono infatti utilizzate alcune funzioni che operano sulle date: la prima, now(), restituisce la data e ora corrente, mentre tutte le altre ne estraggono una parte (l anno, il mese, il giorno e l ora). La riga che ha il compito di visualizzare (write) una stringa composta dalla data e l ora è quella composta dall istruzione response.write, che vedremo meglio più avanti. Il risultato della pagina inviata al browser è quello presentato nella figura 1. Come dicevamo precedentemente, il server si occupa di eseguire il codice della pagina ASP e di restituire al browser il risultato dell operazione. In effetti, se guardiamo il codice HTML giunto al browser (cosa che è possibile fare in Internet Explorer 6 dal menu Visualizza - Sorgente), otteniamo il listato 6. Come vedete, il codice ASP è sparito. In realtà, è il server ad aver interpretato e sostituito le parti comprese tra e. Esiste un altro modo per aprire e chiudere una parentesi F1 5/97

6 1a lezione di codice all interno della pagi- na, e si ottiene utilizzando i tag <script></script> insieme all attributo runat= server. Vediamo come cambia l esempio utilizzando i costrutti elencati nel listato 7. Attenzione però: benché il risultato sulla pagina sia simile a quello che si otterrebbe utilizzando i tag e, in realtà il codice racchiuso tra <script> e </script> viene interpretato alla fine della pagina, il che vuol dire dopo che è stato chiuso il tag <html>. Per questo motivo il tag <script> viene di norma utilizzato per racchiudere la definizione di procedure (sia sub, sia function) a loro volta richiamate da codice racchiuso da e. È possibile includere diverse sezioni di codice all interno di una pagina, per esempio la presenza di tag HTML con codice di programma. Supponiamo di dover decidere, in base all ora di visita dell utente, se salutarlo con un buongiorno, oppure con un buonasera. In questo caso sfruttiamo il contenuto del listato 8. Una piattaforma orientata agli oggetti ASP è una piattaforma che funziona secondo un modello a oggetti a cui il programmatore fa riferimento nella costruzione delle pagine. Un oggetto, nel caso di ASP, è una struttura software definita all interno di una pagina, che permette di svolgere particolari compiti, come estrarre i dati inviati dall utente, inviare stringhe di testo al browser o mantenere informazioni in memoria; re- L8 sponse, che abbiamo incontrato nell esempio poco fa, è un oggetto ASP. Interagire con l utente Affrontiamo ora una problematica comune a tutti i siti dinamici: come scambiare informazioni con i visitatori del sito. Possiamo impiegare un form HTML, che consente di realizzare una pagina con campi che l utente può compilare e inviare. In particolare, nell esempio del nostro corso, si vuol dare la possibilità ai visitatori di inviare commenti e che forniscano una descrizione di loro stessi. Per il momento ci limiteremo a stampare i dati a video, ma nella terza puntata vedremo come è possibile memorizzare queste informazioni in un database. Costruiamo un semplice form per inserire il nome e cognome dell utente, senza preoccuparci della resa visiva, e quindi senza adottare tabelle di layout o fogli di stile, ma cercando invece di rendere il codice leggibile. Per prima cosa proviamo a farlo in HTML, così da ottenere qualcosa di simile alla figura 2 Il codice HTML del form è riportato nel listato 9. Nell esempio sono state inserite due caselle di testo (tag input di tipo text) per contenere il nome e cognome della persona. Prestate particolare atl6 tenzione al valore dell attributo name (txt_nome e txt_cognome), utilizzato dal codice ASP allo scopo di estrarre i valori inseriti dall utente. È inoltre presente un tag input di tipo submit, che viene rappresentato sulla pagina come un pulsante da premere per inviare i dati inseriti. In questa pagina non è necessario inserire nessuna riga dere come è stata realizzata consultando il listato 10. Dopo aver dichiarato due variabili per contenere il nome e cognome del visitatore, queste sono valorizzate utilizzando l oggetto request, che come abbiamo visto poco fa consente al programmatore ASP di accedere ai dati inseriti dagli utenti. Estrarre il nome e cognome è davvero semplice, L9 L10 di codice ASP. Essa si limita infatti ad accettare il nome e cognome del visitatore, ma demanda a un altra pagina le operazioni da eseguire sui dati (nel nostro caso, è sufficiente visualizzarli da qualche parte). Per capire quale pagina si occupa di ciò, basta guardare il valore dell attributo action presente nella prima riga del form, che indica a chi passare il controllo insieme alle informazioni inserite. Nel nostro caso la pagina si chiama visnomecognome.asp e non ci resta che ve- poiché si utilizza una sintassi del tipo request.form (nome_controllo), dove nome_controllo è il valore dell attributo name del campo presente nel form. Il risultato finale è presentato nella figura 3. F3 L7 F2 Post e get Esistono due possibilità per inviare i dati a una pagina Web. Il primo, che abbiamo visto nell esempio precedente, si chia- 6/97

7 1 a lezione ma post e si realizza utilizzando un form il cui attributo method ha come valore post. Una seconda possibilità è di utilizzare il metodo get, valorizzando di conseguenza l attributo method. Ma in cosa differiscono le due possibilità? Con get, i dati vengono non solo inviati alla seconda pagina, ma anche visualizzati nella barra indirizzi del browser, un po quello che succede quando utilizziamo Google per effettuare una ricerca (figura 4). Il vantaggio, in questo caso, è che possiamo aggiungere la pagina ai preferiti e ritornarci in futuro senza dover reinserire il termine di ricerca. Visti i vantaggi dati dal metodo get, sembrerebbe inutile poter disporre di un ulteriore modalità. In realtà, il metodo get presenta due importanti limitazioni: è possibile inviare solo 1 o 2 Kbyte, visualizzare in chiaro dei dati sulla barra degli indirizzi non è accettabile per informazioni sensibili. Quando s inviano password o codici utente, perciò, è molto meglio impiegare il metodo post, che non ha limiti di lunghezza e che non lascia alcuna traccia. Se si utilizza il metodo get, la sintassi da utilizzare è request.querystring(nome_campo). Altri controlli HTML nei form L esempio che abbiamo realizzato fino a qui è alquanto semplice, ma basta poco di più per realizzare form completi, utilizzando non solo caselle di testo, ma anche caselle di selezione, checkbox e radio button. Poiché si tratta di elementi HTML, vi rimandiamo al corso Webmaster per una descrizione approfondita (vedi la settima lezione pubblicata sul numero di maggio e riportata in PDF sul numero di settembre). Esistono inoltre diverse risorse on line dedicate all argomento, F4 Inviare dati alla pagina: l oggetto response L oggetto L11 come ad esempio questo tutorial in inglese [ o questo in italiano [ Cerchiamo quindi di estendere l attuale form, includendo la possibilità di specificare l età, il sesso, gli hobby e alcune note. Il risultato è visibile in figura 5. Analizziamo il codice della pagina di risposta, nel listato 11, mentre tralasciamo il codice del form, del tutto simile all esempio precedente. L unica novità è introdotta dai checkbox relativi agli hobby, che prevedono la possibilità di una selezione multipla. In questo caso non è più sufficiente estrarre il valore del campo, che diventa infatti una collezione di valori, ed è opportuno ricorrere al costrutto for each, che consente di iterare tra tutte le corrispondenze degli hobby scelti dal visitatore e di visualizzarli su linee diverse della pagina. Poiché for each lavora con oggetti di tipo collezione, e poiché l intero form può essere considerato una collezione di valori, è possibile sfruttare lo stesso costrutto per estrarre tutti i valori di un form. Vediamo il listato 12. In questo caso viene estratto per prima cosa il nome del campo del form, seguito dal valore. Scriviamo request.form (campo) e non, request.form ( campo ), in quanto non vogliamo accedere al contenuto dell elemento campo del form (che non esiste), ma piuttosto al valore che la variabile campo contiene a ogni iterazione. response visualizza sulla pagina il risultato delle operazioni di elaborazione. Il metodo più usato dell oggetto response è effettivamente write, che invia al client una stringa di caratteri. Visto che è una delle operazioni più diffuse in una pagina ASP, esiste anche un modo più veloce per inviare dati al client, e consiste nell utilizzare il costrutto =espressione. In particolare, le 2 righe di codice mostrate nell'esempio 14 sono del tutto equivalenti. Attenzione però, nel secondo caso è impossibile inserire più linee di codice all interno di =. In questo corso ne presentiamo un altro che si rivela spesso molto utile, il metodo redirect. Response.redirect invia invece il browser L12 L13 dell utente a un altra pagina, magari in base alla selezione della lingua preferenziale. Per farlo è sufficiente una porzione di codice simile a quanto riportato nel listato 13. Per ogni lingua sono state create delle cartelle che ospitano le pagine ASP e, in base alla selezione dall utente, il browser viene indirizzato nella directory corretta. Abbiamo introdotto un nuovo costrutto, select case, molto utile quando si vuole confrontare il valore di una variabile con un elenco di possibilità. L alternativa sarebbe stata quella di utilizzare una lunga, e poco chiara, lista di if, elseif, end if. F5 E14 7/97

8 1 a lezione 5 Rendere il codice leggibile e facile da modificare: gli include ASP F6 Pensate a una problematica concreta: volete aggiungere al sito che stiamo sviluppando per Mario Rossi una barra che contenga alcune voci di menu con l elenco delle sezioni principali. Non siete però certi che il numero delle sezioni rimanga invariato nel tempo, magari perché non sapete quali avranno più successo e quali, invece, abbandonare in futuro. Se nel frattempo avete realizzato diverse pagine, e inserito in ciascuna il menu, il lavoro di aggiornamento diventerà ogni giorno più impegnativo. Per evitare tale genere di problematiche, potete realizzare file che contengono parti di codice o di pagina da riutilizzare in più punti, e includerli secondo necessità. Tutto ciò sarebbe possibile anche senza ricorrere a IIS, utilizzando i file di tipo SSI (Server Side Include), ma in questo modo potete non solo riutilizzare il codice HTML, ma intere porzioni di codice. Proviamo allora a costruire una pagina che includa codice proveniente da una seconda, al solo scopo di visualizzare la data corrente. Ecco per prima cosa la pagina da includere, che chiameremo copyright.asp, come illustrato nel listato 14. A questo punto proviamo a costruire una semplice pagina che includa copyright.asp, come riportato nel listato 15. Se provate a eseguire la pagina, otterrete il risultato di figura 6. Come vedete, oltre al contenuto della pagina chiamata direttamente, è stato eseguito il codice di copyright. asp, nel punto in cui è stata inserita la direttiva #include file. Esistono due tipologie di inclusioni. La prima, quella riportata nell esempio, cerca il documento da includere rispetto alla posizione del file chiamante. In tal caso, quindi, il file chiamante e copyright.asp si trovano nella stessa cartella. Se l include avesse invece avuto una forma del tipo <!- - #include file="car tella/copyright.asp"--> il file chiamante si sarebbe trovato allo stesso livello della directory cartella. La seconda tipologia di inclusione prevede l utilizzo della direttiva: <!- - #include virtual="copyright.asp"- -> con virtual al posto di file. In tal caso, al momento di includere il file, IIS non si basa sulla directory corrente, ma bensì sulla root directory del sito. La root directory è la cartella principale che contiene i file della vostra applicazione Web, indipendentemente dal fatto che abbiate creato altre sottocartelle. Un uso accorto ed efficace della tecnica degli include vi permette di risparmiare un bel po di lavoro ed è utile, non appena avete finito di costruire il template HTML della pagina, spendere un po di tempo per capire dove sia meglio effettuare i tagli che diventeranno include, così da rendere il codice più leggibile e riutilizzarlo più volte in contesti diversi. Ricordatevi che gli include possono L15 F7 contenere non solo il codice HTML, ma quasi sempre anche codice ASP. Per tale motivo, parti di pagina che potrebbero non sembrare candidate a diventare un include, spesso lo sono. Ritornando all esempio del menu, come ci comportiamo se l esigenza è di evidenziare la voce di menu con la sezione corrente, e lasciare le altre voci invariate? La soluzione più semplice potrebbe sembrare quella di realizzare include diversi per ogni sezione, ognuna con la voce di sezione di un colore diverso. Tale soluzione aggiunge pochi vantaggi, in quanto è comunque necessario gestire e aggiornare tanti include quante sono le sezioni. In realtà, è possibile utilizzare un solo include e sfruttare alcune righe di codice VBScript. Il risultato finale è quello della figura 7. Si tratta di realizzare un include per il menu a sinistra sulla pagina che evidenzi in grassetto la sezione corrente (vedi il listato 16).Notate come sono stati costruiti i link per ogni sezione: oltre al nome della pagina ASP di destinazione compare un parametro, il cui valore indica la sezione di destinazione. In questo modo, quando il visitatore clicca su un link del menu, oltre a richiedere il caricamento della pagina corrispondente, invia un parametro con il nome della sezione. A questo punto, L14 utilizzando una condizione, il codice ASP dell include verifica se il parametro passato (salvato nella variabile strsezione) corrisponde a quello della sezione che sta per essere visualizzata. In caso affermativo, la sezione compare in grassetto e senza link (non serve metterlo, visto che siamo già al suo interno). L'intestazione, i piè di pagina, i menu, la casella di ricerca e il logo sono ottimi candidati per diventare include. Per concludere l esempio, copiamo il codice del form nella pagina scrivimi.asp la cui unica funzione consiste nel visualizzare i dati inseriti. Per il momento il sito di Mario Rossi offre poche possibilità: una home page e la navigazione tra le diverse sezioni. Lo abbiamo però costruito in modo che sia facile modificarlo ed estenderlo. Nella prossima puntata vedremo come. L16 8/97

9 Web Developer ASP - Lezione 1 esempio 1 numero = <valore inserito dall utente> moltiplicazione = numero * 2 esempio 2 Dim strsaluto strsaluto = Hello world esempio 3 a = 2 b = 3 c = a+b esempio 4 a = 2 b = 3 c = a+b esempio 5 Dim datoggi datoggi = now() esempio 6 dim foto(3) foto(0) = Foto di Parigi foto(1) = Foto di Londra foto(2) = Foto di Roma esempio 7 y = 0 For i = 1 to 10 y = y + i Next i esempio 8 i = 0 while i <= 5 i = i + 1 wend esempio 9 i = 0 while i <= 5...qui va il codice che visualizza la foto... i = i + 1 wend 9/97

10 esempio 10 Dim foto(2), luogo(2) luogo(0)= Venezia luogo(1)= Firenze stringa(0) = Foto scattata a & luogo(0) stringa(1) = Foto scattata a & luogo(1) esempio 11 stringa = <b>questo testo è in grassetto</b> esempio 12 Function ConcatenaStringhe(stringa1 as String, stringa2 as String) ConcatenaStringhe=stringa1 & stringa2 End Function Una riga di codice che richiama questa funzione potrebbe agire come segue: Dim strstringa1, strstringa2, strcontatenata strstringa1 = Pc strstringa2 = Open strconcatenata = ConcatenaStringhe(strStringa1,strStringa2) esempio 13 Questa riga è stata commentata esempio 14 response.write Gentile & nomeutente, hai concluso l operazione con successo = Gentile & nomeutente, hai concluso l operazione con successo 10/97

11 Cliccate qui per accedere alla versione elettronica dei listati. Si aprirà una pagina Web con i link ai listati delle quattro puntate del corso. Cliccate sul link desiderato e selezionate "Salva" dalla finestra visualizzata da Internet Explorer per indicare dove volete salvarli. Gli esempi sono in formato ASP e perciò non direttamente visualizzabili nel browser a meno di avere installato o attivato il servizio di Internet Information Server sul vostro PC, nella versione per client Windows XP. Listato 1 primapagina.asp <html> <head><title>la mia prima pagina ASP</title></head> <body> Questo testo non è codice <br> for i = 1 to 10 response.write "Sono arrivato a " & i & "<br>" next </body> </html> 11/97

12 Listato 2 If x > y then strrisultato = x è maggiore di y else strrisultato = y è maggiore o uguale a x end if 12/97

13 Listato 3 If x > y then strrisultato = x è maggiore di y elseif x = y then strrisultato = y è uguale a x else strrisultato = y è maggiore di x end if 13/97

14 Listato 4 If numerofotopagina <= 5 then... <qui va il codice per visualizzare l elenco delle foto>... else... <cambia pagina>... end if 14/97

15 Listato 5 language="vbscript" Option Explicit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>la mia prima pagina ASP</title></head> <body> Dim anno,mese,giorno,data,ore,minuti anno = year(now()) mese = month(now()) giorno = day(now()) ore = hour(now()) minuti = minute(now()) response.write ("Oggi è il " & giorno & "/" & mese & "/" & anno & ", ore " & ore & ":" & minuti) </body> </html> 15/97

16 Listato 6 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>la mia prima pagina ASP</title></head> <body> Oggi è il 18/8/2003, ore 23:38 </body> </html> 16/97

17 Listato 7 language="vbscript" option explicit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>la mia prima pagina ASP</title></head> <body> <script language="vbscript" runat="server"> Dim anno,mese,giorno,data,ore,minuti anno = year(now()) mese = month(now()) giorno = day(now()) ore = hour(now()) minuti = minute(now()) response.write ("Oggi è il " & giorno & "/" & mese & "/" & anno & ", ore " & ore & ":" & minuti) </script> </body> </html> 17/97

18 Listato 8 DATAUTENTE.ASP if hour(now()) < 16 Then <b>buongiorno!</b> else <b>buonasera!</b> end if 18/97

19 Listato 9 NOMECOGNOME.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>un form</title> </head> <body> <b>inserisci il tuo nome e cognome</b> <form action="visnomecognome.asp" method="post"> Nome: <input type="text" name="txt_nome"> <br> Cognome: <input type="text" name="txt_cognome"> <br> <input type="submit" value="invia"> </form> </body> </html> 19/97

20 Listato 10 language="vbscript" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>il risultato del form</title></head> <body> Dim nome, cognome nome = request.form("txt_nome") cognome = request.form("txt_cognome") response.write ("Ciao <b>" & nome & " " & cognome & "</b>!") </body> </html> 20/97

21 Listato 11 language="vbscript" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>il risultato del form</title></head> <body> Dim nome, cognome, sesso, eta, hobby, note nome = request.form("txt_nome") cognome = request.form("txt_cognome") sesso = request.form("rad_sesso") eta = request.form("sel_eta") note = request.form("txa_note") response.write ("Nome: " & nome & "<br>") response.write ("Cognome: " & cognome & "<br>") response.write ("Sesso: " & sesso & "<br>") response.write ("Età: " & eta & "<br>") For Each hobby in request.form("chk_hobby") response.write ("Hobby: " & hobby & "<br>") Next response.write ("Note: " & note & "<br>") </body> </html> 21/97

22 Listato 12 language="vbscript" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>il risultato del form</title></head> <body> Dim campo For Each campo in request.form response.write (campo & ": " & request.form(campo) & "<br>") Next </body> </html> 22/97

23 Listato 13 language="vbscript" option explicit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>response.redirect</title></head> <body> Dim strlingua strlingua=request.querystring("lingua") select case strlingua case "it" response.redirect "/it/default.asp" case "fr" response.redirect "/fr/default.asp" case else response.redirect "/en/default.asp" end select </body> </html> 23/97

24 Listato 14 COPYRIGHT.ASP = "Copyright 2003 Mario Rossi - Oggi è il " & day(now()) & "/" & month(now()) & "/" & year(now()) 24/97

25 Listato 15 language="vbscript" option explicit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>il sito di Mario Rossi</title></head> <body> <h3>questo è il sito di Mario Rossi</h3> <h4>ci trovate alcune foto e il mio weblog</h4> <!--#include file="copyright.asp"--> </body> </html> 25/97

26 Listato 16 INCLUDEMENU.ASP Dim strsezione strsezione = request.querystring("sezione") <table width="100"> <tr> <td><h3>menù</h3></td> </tr> <tr> <td> If strsezione = "" Then <b>home</b> Else <a href="menuasp.asp">home</a> End If </td> </tr> <tr> <td> If strsezione = "foto" Then <b>foto</b> Else <a href="foto.asp?sezione=foto">foto</a> End If </td> </tr> <tr> <td> If strsezione = "scrivimi" Then <b>scrivimi</b> Else <a href="scrivimi.asp?sezione=scrivimi">scrivimi</a> End If </td> </tr> </table> 26/97

27 2 a lezione A scuola con PC Open WebDeveloper ASP 1 La natura senza stato del Web La scorsa puntata ci siamo lasciati dopo aver imparato perché è utile costruire i siti Web ricorrendo ad un linguaggio lato server, e abbiamo cominciato ad esplorare il mondo di ASP, la piattaforma Microsoft per lo sviluppo di siti dinamici. Lo scopo della nostra esplorazione, e più in generale di questo corso, è quella di aiutare Mario Rossi a costruire un proprio sito personale, un insieme di pagine con la presentazione dell autore, una sezione con le foto e la possibilità di inviare qualche commento. La versione del sito finora realizzata è allo stato embrionale, ma va detto che ci siamo concentrati più che altro sulle basi di Visual Basic Script, il linguaggio che utilizziamo per costruire pagine ASP. Abbiamo poi introdotto il ruolo di alcuni oggetti, punti cardine per poter interagire con i dati inseriti dagli utenti: l oggetto request e response. In questa puntata, partendo dagli esempi già visti, introdurremo il ruolo di altri importanti oggetti, come application e session, fondamentali quando è necessario memorizzare le informazioni per tutto il tempo di comunicazione con l utente. Lezione 1: Da sito statico a dinamico Lezione 2: Portare il sito sul server La natura senza stato del Web I cookie Dai cookie alle sessioni L oggetto application La comunicazione fra il browser e il server Per introdurre i concetti di questa puntata è necessario che ci soffermiamo ad analizzare da vicino il funzionamento della comunicazione tra un browser e il server Web che ospita le pagine ASP. Se ricordate quello che abbiamo detto la scorsa puntata, il browser, su richiesta dell utente, contatta il server Web, il quale verifica l esistenza della pagina richiesta, la esegue, e restituisce il risultato al browser. La comunicazione tra il browser e il server inizia con la richiesta della pagina e termina con la ricezione dell ultimo carattere della risposta. Supponete ora che lo stesso utente richieda una seconda pagina allo stesso server Web. La probabilità che questo si verifichi è in effetti elevata (difficilmente navighiamo in Internet visitando solo la home page dei siti). La situazione non cambia. Anche in questo caso la comunicazione è di tipo mordi e fuggi : inizia con la richiesta e termina con la sua esecuzione. Questo tipo di connessione si chiama per l appunto stateless (senza stato) in quanto il server e il client ristabiliscono IL CALENDARIO DELLE LEZIONI La durata delle sessioni e delle applicazioni La gestione degli errori Le prossime puntate Lezione 3: ASP e i database Lezione 4: Uso avanzato dei database ogni volta la comunicazione. Il fatto che la connessione tra il browser e il server Web duri solo per lo stretto necessario ha delle importanti conseguenze, prima fra tutte l incapacità del server di sapere che lo stesso utente sta richiedendo pagine diverse. Immaginate di dover acquistare un libro on line. Difficilmente riuscirete a completare questa operazione in un unica pagina, molto più probabile che vi capiti di scegliere il libro da un elenco, lo aggiungiate al carrello, procediate all acquisto inserendo i vostri dati e il numero di carta di credito e riceviate conferma del buon esito dell operazione. Ma se il server chiude la comunicazione ogni volta, com è possibile che si ricordi di voi, e soprattutto dello stato con il quale vi eravate lasciati? In effetti sono state sviluppate alcune metodologie per cercare di arginare i problemi derivati dalla mancanza di stato della connessione, e ne analizziamo ora i due principali. Campi nascosti in un form In uno degli esempi della scorsa puntata l utente del sito di Mario Rossi aveva la possibilità di comunicare le proprie impressioni riguardanti il sito utilizzando un form, simile a quello di figura 1. Immaginate che l invio dei dati non sia l ultima interazione che l utente svolge con il sito, ma che vogliate successivamente chiedergli, nel caso selezioni come di Antonio Volpon Hobby la voce musica, qual è il cantautore preferito. In questo modo, al pari dell acquisto su internet, l interazione tra il browser e il server non avviene più su di un unica pagina, ma con due pagine distinte. Poiché la comunicazione viene ogni volta interrotta, dobbiamo far sì che il browser ricordi al server come era terminata la comunicazione precedente, così che i dati già inseriti non vengano perduti. Per farlo integriamo la seconda pagina con alcuni campi nascosti nel form, che compileremo con i dati già inseriti (listato 1 contenuto nel CD Guida). Come possiamo vedere dal listato, per primo è inserito un controllo che verifica il contenuto della collezione degli hobby selezionati dall utente. In particolare, poiché è possibile selezionare più di hobby, vengono man mano verificati tutti quelli selezionati: se uno di questi è Musica, il valore di una variabile di supporto pas- I listati citati nell articolo sono nel CD Guida nella sezione Corsi Open Master 1 27/97

28 2 a lezione sa da false (falso) a true (vero). A questo punto la pagina visualizza due elementi diversi, a seconda della selezione. Nel caso non sia stata selezionata la voce Musica, la condizione è false e all utente viene presen- 2 tata una semplice risposta. Se invece l utente ha espresso il suo interesse per la musica viene presentato un altro form, nel quale si chiedono ulteriori informazioni, ad esempio il nome del gruppo o del cantante preferiti. Come abbiamo detto prima, però, questa pagina è slegata dalla precedente, e il server Web non è in grado di mantenere la comunicazione. Senza prendere degli opportuni provvedimenti, non siamo in grado di sapere a quale utente del sito appartiene la preferenza per un cantante o un gruppo. Per ovviare a questa problematica nel sorgente della pagina sono stati inseriti dei campi input, come quelli normalmente utilizzati per richiedere informazioni all utente. In questo caso l attributo type è però valorizzato con hidden, ad indicare che nella pagina questi controlli non saranno visibili. A prima vista potrebbe sembrare che controlli non visibili siano di poca utilità, ma il nostro scopo è semplicemente di usarli e completarli con i dati che l utente ha inserito nella pagina precedente. Ce ne rendiamo conto se osserviamo il sorgente della pagina inviata al browser, simile a quello presente nel listato 2. Il funzionamento di un campo nascosto è del tutto simile a quello di un campo usato per effettuare una selezione. Quando l utente indica il nome del cantante o del gruppo e preme Invia, al server non viene inviata solo quest ultima informazione, ma anche i dati relativi all utente precedentemente compilati. Ecco perché la pagina di risposta (figura 2) è in grado di elencare tutte queste informazioni. 2 I cookie Impiegando i campi nascosti abbiamo aggirato il limite della comunicazione Web senza stato, ma anche questa soluzione porta con sé alcune problematiche. Nel caso della libreria on line di cui parlavamo precedentemente, utilizzare dei campi nascosti potrebbe rivelarsi una soluzione poco pratica, perché sono molte le informazioni da memorizzare nel corso delle selezioni. L ultima pagina, quella di acquisto effettivo, dovrebbe contenere tanti campi nascosti quante sono le informazioni da salvare, con il rischio di commettere qualche errore nella costruzione del codice e soprattutto di appesantire inutilmente la pagina. Per questo motivo esiste una diversa soluzione a questo problema, a cui si ricorre utilizzando le sessioni e i cookie. Vediamo di capire come operano. Ogni browser Web (a meno che l utente non decida di limitare questa funzionalità modificando le opzioni del browser) ha la possibilità di salvare sul computer dell utente alcune informazioni (chiamate cookie) su richiesta del server. Si tratta di un semplice file nel quale gli sviluppatori del sito possono memorizzare alcune informazioni, ad esempio il nome dell utente. Poniamo che Giorgio visiti il sito di Mario Rossi, e che compili il form indicando il suo nome. La pagina di risposta di Mario Rossi potrebbe richiedere al browser di memorizzare il nome di Giorgio. Le successive pagine del sito di Mario Rossi sono in grado di interrogare il browser di Giorgio chiedendo di verificare se per caso, in passato, sia stato memorizzato il nome dell utente, e in caso affermativo di inviare questa informazione al server. Il cookie rappresenta quindi un tipo di informazione che non si perde ogni volta che viene chiusa la comunicazione tra browser e server, poiché viene memorizzata nella macchina dell utente e inviata ogni volta che il server ne faccia richiesta. Per vedere come cambia l esempio precedente se decidiamo di utilizzare un cookie al posto dei campi nascosti potete osservare l esempio del listato 3. In questo caso i campi nascosti sono sostituiti dall istruzione response.cookie(variabile) = valore, che ha lo scopo di far memorizzare al browser una variabile e il relativo contenuto. Nella pagina di risposta (listato 4), vediamo invece che la semplice istruzione request.cookie(variabile) serve per estrarre il contenuto della variabile. Cookie temporanei e a scadenza Il tipo di cookie che abbiamo utilizzato nell esempio precedente è di tipo temporaneo: il contenuto delle variabili viene perduto quando l utente chiude il browser. Ad ogni cookie è però possibile associare una data di scadenza, che indica il La privacy e gli utenti Da quello che abbiamo appena visto è facile capire come i cookie siano un ottimo strumento per memorizzare e successivamente reperire informazioni circa i nostri utenti. Va però detto che nel corso degli anni ai cookie è stata associata una nomea poco edificante, tutto questo proprio perché sono usati per memorizzare le preferenze degli utenti, oltre che dati personali e sensibili. Cercate quindi di limitare l uso dei cookie per le tempo per il quale il browser memorizza (tipicamente su disco fisso) questa informazione. Questo tipo di cookie è utile in situazioni in cui il loro impiego faciliti realmente la navigazione dell utente, ed evitate di memorizzare dati che possano in qualche modo lederne la privacy. Ricordate inoltre che ogni browser che si rispetti dà all utente la possibilità di disabilitare i cookie (figura 3), per cui non fate affidamento sul fatto che sia sempre possibile salvarli sul computer del visitatore: un sito che si rispetti deve poter funzionare anche senza ricorrere ai cookie. 3 28/97

29 2 a lezione situazioni in cui l utente visita spesso un sito e non vuole inserire ogni volta alcuni dati ricorrenti, come ad esempio quelli di autenticazione. Un altra situazione è data dai siti che riescono in questo modo a capire quante volte ogni singolo utente torna a visitare il loro sito. Si tratta di un informazione molto interessante in termini di marketing Web, perché misura non solo il numero di pagine visitate, ma fornisce una stima molto verosimile legata al singolo visitatore. Il caso del nostro Mario Rossi è però molto più semplice: a Mario interessa semplice- 4 mente presentare una scritta sulla home page che saluti il visitatore affezionato, come vediamo in figura 4. Il listato 5 affronta questa problematica. Abbiamo introdotto una modifica alla home page del sito di Mario Rossi, così che distingua l utente alla prima visita rispetto all utente abituale. Come prima cosa verifichiamo se è stato salvato un cookie chiamato numerovisite. Se così non è, prepariamo una stringa contenente il messaggio per il nuovo visitatore. Se è un utente abituale questo ha un cookie memorizzato sul computer e ne estraiamo il valore, cioè il numero di volte che l utente ha visitato questa pagina. In ognuno dei due casi salviamo una copia del cookie sulla macchina dell utente incrementando di 1 il valore corrente. Subito dopo, con il metodo Expired della collezione cookies andiamo ad indicare la data di scadenza del cookie, in notazione inglese (e quindi il 31 dicembre del 2004). Dopo questa data il cookie sarà cancellato definitivamente dalla macchina. Per provare il funzionamento visualizzate la pagina sul vostro browser e ricaricatela per alcune volte: vedrete aumentare il contatore. Adesso chiudete tranquillamente il browser e successivamente provate a caricare nuovamente la pagina: vi accorgerete che l informazione sul numero di visite non riparte da zero, ma dall ultimo valore salvato. È evidente che il cookie è stato memorizzato nel vostro computer e non è andato perso con la chiusura del browser. 3 Dai cookie alle sessioni Finora abbiamo parlato della mancanza di stato nella comunicazione tra server e client e di quali accorgimenti è possibile adottare per superare questo limite (campi nascosti in un form e cookie). La tecnologia ASP, insieme a IIS (Internet Information Services) rende disponibile un altra interessante possibilità, che si basa sull uso di cookie temporanei: le sessioni. Di norma, quando un utente richiede la prima pagina di un sito realizzato in ASP, il server IIS tenta di inviare un cookie di sessione. Il contenuto del cookie non è nient altro che una lunga stringa generata dal server in modo casuale, in modo da limitare al massimo la possibilità che due utenti del sito utilizzino contemporaneamente la stessa stringa. A questo punto il server ha la possibilità di salvare in una propria area di memoria quelle informazioni riguardanti l utente che è comodo avere sempre a disposizione (come il suo nome utente, il carrello elettronico e così via). Etichetta questa area di memoria con la stessa stringa che ha inviato all utente. Ogni volta che l utente richiede una pagina del sito il server interroga il browser e riceve il contenuto del cookie (chiamato cookie di sessione), ed estrae le informazioni che sono state etichettate con la stessa stringa. È un po come se l utente disponesse dell unica chiave in grado di aprire la serratura di un lucchetto che custodisce i proprio dati. Il vantaggio di usare le sessioni invece dei soli cookie temporanei è che le informazioni non sono salvate sul computer dell utente, dove esistono dei limiti di dimensioni per i dati che è possibile memorizzare, ma direttamente sul server, soluzione che migliorare le prestazioni. L unica informazione che il browser dell utente deve recepire è la stringa generata casualmente, e nient altro. Le sessioni in ASP Ma come si usano le sessioni in ASP? Vediamo un esempio, che trovate nella cartella cookie degli esempi inclusi nel CD Guida che accompagna la rivista. Si tratta di una variazione della pagina che finora abbiamo realizzato per Mario Rossi. In particolare, se eseguite il file personalizza.asp (riportato nel listato 6), vi trovate di fronte ad un form per modificare il colore di sfondo dell intero sito (il form lo abbiamo riportato in figura 5). Selezionate a questo punto un colore e inviate i dati: come era lecito aspettarsi, il colore di sfondo è stato variato secondo la vostra scelta. Non solo: se selezionate altre sezioni dalla barra di navigazione posta sulla sinistra (in figura 6 presentiamo la sezione che conterrà le foto di Mario Rossi), il colore selezionato viene mantenuto. Passiamo ad analizzare il codice di personalizza.asp per capire come è stata realizzata. Lasciamo stare per un attimo cosa succede all inizio della pagina e concentriamoci sul codice che segue l inclusione di includemenu.asp. Qui è presente un form contenente l elenco dei colori disponibili. La action del form, che come abbiamo visto la scorsa puntata serve per indicare la pagina a cui dirigersi una volta premuto il pulsante di invio, contiene una particolarità. L action corrisponde infatti alla stessa pagina personalizza.asp, il che vuol dire che dopo aver inviato i dati del form viene ricaricata la stessa pagina. Potrebbe a prima vista sembrare che questa operazione vanifichi tutti i propositi di estrarre il colore selezionato, ma non è così. Se guardate quello che succede proprio prima del form, noterete la presenza di una condizione, la quale si preoccupa di verificare in quale dei due possibili stati (prima di inviare il form, dopo aver inviato il form) si trova la pagina. Viene in particolare estratto il valore del campo colore: se il contenuto è una stringa vuota vuol dire che la pagina è stata selezionata digitandone il link nella barra degli indirizzi del browser o semplicemente selezionando un link dal menu sulla sinistra, altrimenti è caricata do /97

30 po aver inviato il form. Nel primo caso si invita l utente a selezionare il colore (Seleziona un colore di sfondo), nel secondo caso lo avvertiamo della selezione compiuta (Ho cambiato il colore di sfondo di tutte le sezioni secondo la tua scelta). La tecnica che abbiamo appena visto, dove la pagina di partenza e di destinazione di un form è la medesima, viene spesso usata da chi sviluppa siti Web. I vantaggi di questo tipo di soluzione sono diversi. Per prima cosa la pagina da gestire è unica: se un domani volete aggiungere un nuovo campo, dovete aggiornare una sola pagina. Non solo: se avete necessità di controllare i dati inseriti dall utente, e questo commette qualche errore, potete agevolmente presentare dopo l elenco degli errori il form di partenza, come tra l altro succede nel nostro caso (anche se con un include avreste probabilmente potuto ottenere lo stes- 7 so risultato). Rimane a questo punto da vedere come viene memorizzato il valore del colore per tutte le pagine del sito. In testa alla pagina, poco dopo il titolo, viene replicata la stessa condizione. In questo caso lo scopo è diverso: abbiamo utilizzato un cookie, che viene memorizzato poco dopo aver cambiato il colore di sfondo. La sintassi d uso è semplicissima: si tratta di indicare un nome da passare all oggetto Session e di specificare un valore (come nell esempio, dove viene utilizzato Session( colore ) = valore). Dopo aver compilato il form, il valore della variabile colore memorizzata nella sessione viene utilizzato per modificare l attributo bgcolor del tag body, così da cambiare il colore di sfondo della pagina. Tutte le altre pagine del sito non devono far altro che includere la stessa porzione di codice poiché la sessione viene ereditata da tutte le pagine di navigazione dell utente. La durata delle sessioni Come sappiamo, non appena è stata inviata all utente la pagina richiesta, la comunicazione termina. Quando l utente richiede una seconda pagina, il meccanismo non cambia. Se il server mantiene in sessione i dati dell utente, deve però aver modo di liberare la memoria riservata quando l utente ha richiesto l ultima pagina del sito, per esempio chiudendo il browser o proseguendo la navigazione in un altro sito. In realtà il server non ha modo di sapere l ultima pagina che l utente richiederà, ma si comporta in un altro modo. Se non riceve richieste dal browser per un po di tempo ipotizza che l utente abbia abbandonato il sito, e di conseguenza elimina la sessione (timeout). Il tempo durante il quale il server aspetta un ulteriore richiesta è configurabile sia come parametro da script (con l istruzione session.timeout = minuti), sia come voce nella maschera di Internet Information Services (figura 7). Da questo ne consegue che se l utente non utilizza il sito per un certo lasso di tempo (diciamo che va a prendersi un caffé, oppure sta compilando un form che gli richiede di ricercare alcuni dati integrativi), al suo ritorno la sessione potrebbe essere scaduta, e tutte le informazioni memorizzate sono di conseguenza perse. Per questo motivo, in base al tipo di sito e soprattutto alla complessità delle pagina, il tempo di timeout delle sessioni deve essere attentamente valutato. Più aumenta la complessità di compilazione delle pagine e più tolleranti è necessario essere nei confronti dei nostri visitatori. 4 L oggetto application Abbiamo appena visto che l oggetto session è un ottimo aiuto quando vogliamo memorizzare informazioni sulla navigazione e sulle scelte dell utente. Per ogni visitatore del sito viene salvata una copia delle variabili usate per la sessione, sincronizzate con il browser dell utente per mezzo della stringa casuale. Ma dove possiamo invece salvare e recuperare alcune informazioni comuni a tutti gli utenti del sito, come ad esempio il copyright, piuttosto che i parametri di connessione a una base di dati, oppure alcune costanti da usare in tutte le pagine? Per questi scopi esiste un altro oggetto, simile in tutto e per tutto all oggetto session, ma che si occupa di memorizzare informazioni condivise: l oggetto application. Supponiamo che non vogliate dare a tutti la possibilità di modificare il colore di sfondo delle pagine, ma solo ad alcuni utenti registrati. Modifichiamo allora la pagina di personalizzazione perché richieda un nome utente ed una password. Come per tutti gli altri esempi, trovate i file di questo esercizio nel CD allegato, sotto la cartella Application. Aprite con il browser l indirizzo del file menuasp.asp, la pagina di partenza dell esercizio. La situazione dovrebbe essere quella di figura 8. Nulla sembra cambiato rispetto agli esempi precedenti, ma se provate a selezionare la voce Personalizza dal menu di sinistra, noterete che a questo punto vi viene chiesto di inserire un nome utente e password per l autenticazione (figura 9). Se provare ad inserire alcuni valori casuali e procedete, il sistema nega l accesso alla pagina di configurazione. Adesso tor- 30/97

31 2 a lezione nate con il browser alla pagina di menù e riprovate a selezionare la voce Personalizza, ma questa volta inserite i valori corretti per poter procedere: Mario con nome utente e foo come password (senza le doppie virgole). A questo punto avete accesso alla pagina di personalizzazione e potete, analogamente all esempio precedente, modificare il colore di sfondo che vi accompagnerà per tutta la navigazione di questo piccolo sito. L analisi del codice Analizziamo il codice che rende possibile tutto questo. Per prima cosa verifichiamo il contenuto di menuasp.asp, la prima pagina che visualizzia- 8 mo nella finestra del browser (listato 7). L unica piccola, ma fondamentale modifica è data dall uso in testa alla pagina di due variabili di applicazione: semplicissima, che non contiene alcuna nuova linea di codice rispetto a quello che già sappiamo realizzare. Diamo solo un occhiata all attributo action del 9 utente e passwordce form, che condu- alla pagina per- Lo scopo di queste due variabili è contenere gli unici valori per i quali sarà garantito l accesso alla pagina di configurazione. Poiché le variabili di applicazione sono disponibili a tutte le pagine del sito e a tutti gli utenti, una volta che le abbiamo definite in questa pagina, ogni altra pagina del sito è in grado di accedere al loro contenuto. Non è la situazione ottimale, ma vedremo in seguito come migliorarla. Passiamo adesso alle altre pagine. È bene notare che il link alla voce personalizza presente nel menu di sinistra non conduce più, come nell esempio precedente, alla pagina personalizza.asp, ma a loginpersonalizza.asp. Si tratta della pagina che contiene il form per l autenticazione sonalizza.asp. Il percorso è quindi questo: dal menu a sinistra si procede alla pagina loginpersonalizza.asp e una volta inserito il nome utente e la password si passa a personalizza.asp. Da quanto detto è chiaro che sarà personalizza.asp a verificare se l utente ha le carte in regola per essere autenticato o meno, per cui passiamo ad analizzarne il contenuto (listato 9). L unica modifica rispetto alla versione precedente della pagina si trova all inizio: per prima cosa memorizziamo in sessione il nome utente e la password inviati dall utente dopo la compilazione del form. A questo punto confrontiamo i valori inseriti dall utente con quelli presenti nelle variabili salvate nell oggetto Applicatente ha fornito correttamente gli estremi per l autenticazione. La condizione che verifica questa situazione (che comincia con if Session("utente") = Application("utente")) termina molte righe dopo, in particolare dopo il form per la scelta del colore. Questo vuol dire che solo nel caso di autenticazione andata a buon fine presentiamo all utente la possibilità di variare il colore di sfondo. Alla fine della pagina vediamo invece cosa succede se questo non si verifica, cioè se l utente ha fornito dei dati non corretti ai fini dell autenticazione. In questo caso visualizziamo semplicemente un indicazione della mancata autorizzazione (Attenzione: accesso (listato 8). È una pagina tion: se i valori coincidono l u- non consentito). 5 La durata delle sessioni e delle applicazioni Abbiamo visto precedentemente che la durata delle sessioni dipende dal valore di timeout con cui abbiamo configurato IIS oppure specificato esplicitamente nella pagina ASP. Ma quanto durano gli oggetti salvati nell oggetto Application, che sono comuni a tutti gli utenti? In questo caso la loro vita termina quando viene fermato e poi riavviato il servizio di IIS, cioè quando il sistemista decide esplicitamente di far ripartire il sito Web. La stessa cosa avviene per le sessioni: anche queste sono eliminate in caso di riavvio del servizio IIS. Ce ne rendiamo conto con un semplice esempio. Lanciate l ultimo esercizio che abbiamo realizzato e cambiate il colore di sfondo delle pagine. A questo punto aprite la console di Internet Information Services (in Windows 2000 Professional la trovate partendo dal Control Panel, selezionando Administrative Tools e successivamente Internet Information Services). 10 Selezionate l icona del vostro computer nel pannello di sinistra e attivate il menu contestuale con il tasto destro del mouse (la situazione dovrebbe essere simile a quella riportata in figura 10). La voce All Tasks contiene la sottovoce Restart IIS, che potete selezionare, in modo da arrivare alla situazione riportata in figura 11. Confermate la selezione e dopo qualche secondo il server verrà riavviato. Se a questo punto ritornate alla finestra del browser, e navigate utilizzando il menu di sinistra, noterete che il colore di sfondo ritorna quello precedente alla sezione. Questo si verifica perché riavviando il server le variabili memorizzare in sessione e nell oggetto Application sono state eliminate, con conseguente perdita di tutti i riferimenti al colore di sfondo e all utente registrato. 11 Aggiornamenti concorrenti È necessario prestare particolare attenzione quando si modificano le variabili memorizzate con l oggetto application. Mentre la sessione è diversa per ogni utente, gli oggetti salvati a livello di applicazione sono condivisi da chiunque visiti il sito: cosa succede se 2 utenti tentano di cambiare contemporaneamente il valore dell oggetto application? Buona norma sarebbe indicare ad ASP che solo 31/97

32 un utente alla volta può modificare il valore delle variabili di applicazioni. Per farlo si usano due semplici istruzioni: Application.Lock poco prima di modificare il valore e Application.Unlock subito dopo. Usare il file global.asa L esercizio che abbiamo appena realizzato soffre in realtà di un piccolo, ma fondamentale difetto. Fino a quando un utente non visita la pagina menuasp.asp il nome utente e password di Mario non sono memorizzati nelle corrispettive variabili dall oggetto Application. Questo vuol dire che se fermate il servizio IIS come abbiamo visto poco fa (per cancellare il contenuto di tutte le variabili) e aprite per prima cosa la pagina loginpersonalizza.asp (o qualsiasi altra ad eccezione di menuasp.asp), nell oggetto application non sono memorizzati i valori Mario e foo. Per rendervene conto compilate con i dati corretti il form e premendo Invia. Non c è nulla da fare: anche inserendo i valori per cui vi aspettereste l autenticazione, la risposta della pagina sarà sempre negativa. Potreste pensare che non si tratta poi di un problema grave: in fondo è la prima pagina del sito quella da cui ogni utente comincia l esplorazione. In realtà non è vero: anche se le home page sono solitamente le pagine più viste di un sito, l utente può teoricamente cominciare la navigazione da qualsiasi punto. Motori di ricerca Provate a fare una ricerca su Google per un argomento di interesse: non è detto che il motore di ricerca vi conduca alla home page del sito. Il problema che dobbiamo affrontare è quindi il seguente: le variabili dell oggetto application (e, a volte, anche quelle dell oggetto session) dovrebbero essere memorizzate indipendentemente dalle pagine del sito. Potremmo pensare di inserire questi valori in ogni pagina: in questo modo saremmo certi che, indipendentemente dalla prima pagina richiesta dal browser utente, le variabili siano lette correttamente. In realtà la situazione è impraticabile, soprattutto perché i costi in termini di gestione sarebbero elevati nel caso di siti con decine di pagine: cosa fare se a un certo punto avete bisogno di un altra variabile? La tecnologia ASP ci viene fortunatamente incontro e offre la possibilità di impiegare in un unico file tutte le variabili che vogliamo includere negli oggetti application e session. Questo file, che si dovrà chiamare global.asa è letto ogni volta che IIS parte, e le variabili sono memorizzate rispettivamente negli oggetti application e session. Modifichiamo quindi l esempio per includere questo tito di soluzione, prelevando i file dalla cartella globalasa del CD Guida. Perché la prova funzioni correttamente è necessario copiare il file global.asa dalla cartella appena indicata nella directory principale che contiene tutti i nostri esempi ASP. Questa operazione è necessaria perché IIS verifica la presenza del file global.asa solo nella directory principale del nostro sito, e non in eventuali sottocartelle. Riavviate IIS e caricate nel browser la pagina loginpersonalizza.asp, senza passare per la home del sito (a dire il vero potete anche farlo, visto che abbiamo tolto ogni riferimento alle variabili Application). Se provate ad autenticarvi, passerete il controllo senza alcun problema. Non solo: rispetto all esempio precedente potete caricare qualsiasi pagina e l effetto sarà il medesimo, non rischiate alcuna altra sorpresa. Il motivo di questo comportamento deriva dal fatto che le variabili di applicazione contenenti il nome utente e la password corretti non sono più memorizzate nelle singole pagine, ma centralizzate nel file global.asa. Diamo un occhiata al file global.asa per capire come costruirlo: abbiamo riportato il codice nel listato 10. La struttura è del tutto simile ad una parte di codice che possiamo inserire in qualsiasi pagina ASP. Si riconoscono a vista d occhio le definizioni delle variabili e il valore che gli viene associato. L unica particolarità è la presenza della procedura Application_OnStart. Il nome non è casuale, ma è un modo per indicare a IIS quando eseguire le istruzioni contenuti in questa porzione del file global.asa. Come potete facilmente immaginare, il codice in questo caso viene richiamato alla partenza dell applicazione Web, nel nostro caso quando avviamo o riavviamo Internet Information Services. Quando questo evento si verifica viene caricato il file global.asa e se la ricerca per la procedura Application_OnStart ha esito positivo, si eseguono tutte le istruzioni che la compongono. È quindi particolarmente comodo per lo sviluppatore utilizzare il file global.asa come accentratore delle porzioni di codice da eseguire ogni volta che parte l applicazione. Il file global.asa può essere in realtà utilizzato non solo in questo contesto, ma anche quando l applicazione viene arrestata, oppure per l inizio e la fine di una sessione (in questo caso le procedure sono rispettivamente Application_End, Session_ On- Start e Session_OnEnd). Ci si potrebbe chiedere che senso ha eseguire delle istruzioni quando l applicazione o la sessione cessano di esistere, ma ci sono casi in cui questi eventi hanno senso. Pensate per esempio a un applicazione di una certa complessità, che per motivi di efficienza mantenga nell oggetto application, senza mai salvarli, alcuni dati. Non appena l applicazione, per qualsiasi motivo, viene fermata, è necessario memorizzare sul disco fisso le informazioni volatili: per farlo non c è altro posto se non la procedura Application_End. Un altro motivo potrebbe essere chiudere esplicitamente eventuali connessioni alle basi di dati oppure liberare la memoria da oggetti indesiderati. Le variabili e la memorizzazione sul sito Gli esempi che abbiamo realizzato fino ad ora salvano nell oggetto application il nome e la password dell utente che ha l autorizzazione per personalizzare lo sfondo della pagina. Una soluzione migliore, e più generale, consisterebbe nel salvare queste informazioni in una base di dati, in modo da poter realizzare più profili di utenza e di centralizzare il sistema che si preoccupa di gestire dati personali e sensibili. Non abbiamo optato per questa soluzione solo perché era importante concentrarci sul ruolo delle sessioni e dell applicazione nello sviluppo con ASP, ma nella prossima puntata affronteremo invece lo studio delle basi di dati, per cui non dovete attendere ancora molto per capire come funziona questo mondo. 32/97

33 2 a lezione 6 La gestione degli errori in ASP In Visual Basic Script, così come in tutti i linguaggi di programmazione, è molto importante garantire che il codice non produca risultati inattesi neppure quando si verificano degli errori di funzionamento. Normalmente, se non ci preoccupiamo di gestire gli errori, la pagina ASP non ha alcuna alternativa se non quella di terminare immediatamente l esecuzione. Tra i file di esempio trovate errore.asp: come dice il nome, si tratta di una pagina ASP che genera un errore (listato 11). È presente infatti un ciclo for next che divide il contenuto di una variabile (posta a 1000) con quello di un altra variabile, che viene incrementata in modo che il suo valore passi da -10 a 10. Questo però non si verifica perché non appena si tenta di eseguire una divisione per zero si scatena una condizione di errore e l esecuzione della pagina si interrompe (figura 12). Le contromisure Per cautelarsi da questo tipo di disavventure è buona abitudine, nelle parti critiche del codice, verificare se siamo entrati in condizione di errore, e reagire conseguentemente. Un primo metodo è l introduzione dell istruzione on error resume next, praticamente una frase che potremmo tradurre come in caso di errore prosegui oltre. In effetti è proprio questo che si verifica: dal punto in cui è inserita questa istruzione ogni errore viene ignorato e l esecuzione del codice prosegue dalla riga successiva. Per rendersi conto di cosa succede potete eseguire una versione modificata dell esempio precedente, erroreresume.asp (listato 12). Questa volta, non appena viene eseguita la riga con la divisione per zero il codice non si arresta, ma continua la sua esecuzione dalla riga successiva (figura 13). Potrebbe a prima vista sembrare che in questo modo tutti i nostri problemi abbiano trovato soluzione. In realtà il fatto che si verifichi una situazione imprevista, e che il codice si arresti, spesso indica che il problema sta a monte che va risolto. Immaginate di chiedere ad un utente di inserire il proprio nome e anno di nascita, e di voler calcolare l età della persona. La situazione è illustrata in figura 14. Provate a richiamare il file con il browser (si chiama annoeta.asp) e a compilare il form con dati congruenti. La pagina di risposta vi risponde conseguentemente (figura 15). Fino a quando l utente inserisce un valore numerico nel secondo campo non ci sono problemi nel calcolare l età, ma poiché non avete controllo sull input del visitatore, può anche darsi che questo inserisca dei caratteri al posto dell anno, come vediamo in figura 16. Il risultato di questa situazione inattesa è un errore della pagina (figura 17). Se guardiamo il codice della pagina di risposta (annoetarisposta. asp, listato 13) notiamo che viene eseguita 12 la funzione cint sul valore del campo anno di nascita. Lo scopo della funzione cint è di convertire una variabile di tipo Variant 13 (che, come dicevamo nella prima puntata del corso, è l unico vero tipo 14 dato con cui lavora Visual Basic Script) in un sottotipo numerico intero. Questa funzione si aspetta in ingresso una stringa che però contenga esclusivamente numeri: se non è così restituisce sistematicamente un errore. Ecco spiegato perché nel secondo caso l esecuzione della pagina viene interrotta. Per evitare questa conseguenza è necessario capire se si è verificato un errore, e agire di conseguenza. Integriamo quindi il codice di questa pagina in modo da farlo diventare il contenuto del listato 14, che si riferisce al file annoetarisposta2.asp. Per prima cosa è necessario inserire, poco prima della riga con la funzione cint, l istruzione on error resume next. Si tratta di un operazione necessaria, pena l arresto non appena si verifica la condizione di errore. La vera novità si trova nel codice che segue la funzione cint e coinvolge l oggetto Err. Quest ultimo è un oggetto interno di VBScript che in caso di errore viene creato con informazioni dettagliate sulla problematica riscontrata. Tra i metodi di questo oggetto due si rivelano particolarmente importanti: Description e Number. Il primo presenta una descrizione del problema che si è verificato, mentre il secondo è un numero univoco per ogni errore. All interno della nostra pagina verifichiamo quindi, come prima cosa, se l oggetto Err esiste, il che indica la presenza di un errore nella pagina. A questo punto, senza che l esecuzione della pagina si interrompa bruscamente, abbiamo tutto il tempo di informare il visitatore del verificarsi di una situazione inattesa, come è possibile vedere in figura 18. Sta a noi decidere quali informazioni presentare all utente, ma in questo caso abbiamo scelto di visualizzare il dettaglio dell errore e il suo codice. Non solo: poiché il codice di errore è univoco, e 13 si riferisce a Type Mismatch (ovvero, è stato usato un tipo di dato diverso da numerico nel richiamare la funzione cint), possiamo inserire una condizione per dare qualche indicazione aggiuntiva all utente. Conclusioni Nel corso di queste due puntate abbiamo cercato di proporvi alcuni significativi esempi di base per la programmazione Visual Basic Script in riferimento alla piattaforma ASP. Siete ora in grado di realizzare qualunque tipo di sito abbiate in mente, anche se all aumentare della complessità, quando il tipo e numero di dati da gestire aumenta, avrete bisogno di affidarvi ad una base di dati per memorizzare ed estrarre informazioni. Fino ad ora, in effetti, ci siamo concentrati sui fondamenti del linguaggio e su una descrizione degli oggetti coinvolti. Il pregio di una piattaforma come ASP è però la possibilità di colloquiare in modo trasparente e tutto sommato semplice con le basi di dati. E nella prossima puntata affronteremo per l appunto il mondo delle basi dati relazionali, introducendo qualche concetto fondamentale per capirne il funzionamento e lo scopo, per poi passare all integrazione con ASP. 33/97

34 Cliccate qui per accedere alla versione elettronica dei listati. Si aprirà una pagina Web con i link ai listati delle quattro puntate del corso. Cliccate sul link desiderato e selezionate "Salva" dalla finestra visualizzata da Internet Explorer per indicare dove volete salvarli. Gli esempi sono in formato ASP e perciò non direttamente visualizzabili nel browser a meno di avere installato o attivato il servizio di Internet Information Server sul vostro PC, nella versione per client Windows XP. LISTATO 1 DATICOMPLETI2.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>un form</title> </head> <body> Dim strhobby Dim blnmusica blnmusica = false strhobby = request.form("chk_hobby") For Each hobby in request.form("chk_hobby") If hobby = "Musica" Then blnmusica = true End If Next if blnmusica = true Then <p>caro =request.form("txt_nome"), ho visto che ti interessi di musica. Ti dispiace indicarmi il nome del tuo cantante o gruppo preferito?</p> <form action="visdaticompleti2.asp" method="post"> <input type="hidden" name="txt_nome" value="=request.form("txt_nome")"> <input type="hidden" name="txt_cognome" value="=request.form("txt_cognome")"> <input type="hidden" name="rad_sesso" value="=request.form("rad_sesso")"> <input type="hidden" name="sel_eta" value="=request.form("sel_eta")"> <input type="hidden" name="chk_hobby" value="=request.form("chk_hobby")"> <input type="hidden" name="txa_note" value="=request.form("txa_note")"> Cantante o gruppo preferito <input type="text" name="txt_cantante"> <input type="submit" value="invia"> </form> else <p>grazie per aver inviato i tuoi commenti, peccato non ti interessi di musica!</p> end if 34/97

35 </body> </html> 35/97

36 LISTATO 2 SORGENTI DI DATICOMPLETI2.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>un form</title> </head> <body> <p>caro Mario, ho visto che ti interessi di musica. Ti dispiace indicarmi il nome del tuo cantante o gruppo preferito?</p> <form action="visdaticompleti2.asp" method="post"> <input type="hidden" name="txt_nome" value="mario"> <input type="hidden" name="txt_cognome" value="rossi"> <input type="hidden" name="rad_sesso" value="m"> <input type="hidden" name="sel_eta" value="0-20"> <input type="hidden" name="chk_hobby" value="musica"> <input type="hidden" name="txa_note" value="ecco qualche nota"> Cantante o gruppo preferito <input type="text" name="txt_cantante"> <input type="submit" value="invia"> </form> </body> </html> 36/97

37 LISTATO 3 DATICOMPLETICOOKIE2.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>un form</title> </head> <body> Dim strhobby Dim blnmusica blnmusica = false strhobby = request.form("chk_hobby") For Each hobby in request.form("chk_hobby") If hobby = "Musica" Then blnmusica = true End If Next response.cookies("txt_nome") = request.form("txt_nome") response.cookies("txt_cognome") = request.form("txt_cognome") response.cookies("rad_sesso") = request.form("rad_sesso") response.cookies("sel_eta") = request.form("sel_eta") response.cookies("chk_hobby") = request.form("chk_hobby") response.cookies("txa_note") = request.form("txa_note") if blnmusica = true Then <p>caro =request.form("txt_nome"), ho visto che ti interessi di musica. Ti dispiace indicarmi il nome del tuo cantante o gruppo preferito?</p> <form action="visdaticompleticookie2.asp" method="post"> Cantante o gruppo preferito <input type="text" name="txt_cantante"> <input type="submit" value="invia"> </form> else <p>grazie per aver inviato i tuoi commenti, peccato non ti interessi di musica!</p> end if </body> </html> 37/97

38 LISTATO 4 language="vbscript" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head><title>il risultato del form</title></head> <body> Dim nome, cognome, sesso, eta, hobby, note, cantante nome = request.cookies("txt_nome") cognome = request.cookies("txt_cognome") sesso = request.cookies("rad_sesso") eta = request.cookies("sel_eta") note = request.cookies("txa_note") cantante = request.cookies("txt_cantante") response.write ("Nome: " & nome & "<br>") response.write ("Cognome: " & cognome & "<br>") response.write ("Sesso: " & sesso & "<br>") response.write ("Età: " & eta & "<br>") response.write ("Cantante: " & cantante & "<br>") For Each hobby in request.form("chk_hobby") response.write ("Hobby: " & hobby & "<br>") Next response.write ("Note: " & note & "<br>") </body> </html> 38/97

39 LISTATO 5 MENU.ASP Option Explicit Dim numvisite Dim strmessaggio numvisite = request.cookies("numerovisite") if numvisite = "" then numvisite = 1 strmessaggio = "Benvenuto nel sito di Mario Rossi. Grazie per la tua visita!" else numvisite = numvisite + 1 strmessaggio = "Bentornato nel sito di Mario Rossi. Questa è la " & numvisite & " volta che visiti questa pagina!" end if response.cookies("numerovisite") = numvisite response.cookies("numerovisite").expires = #12/31/2004# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>il sito di Mario Rossi</title> </head> <body> <table width="100%" border="1" cellpadding="0" cellpadding="2"> <tr> <td width="100"> <table width="100"> <tr> <td><h3>menù</h3></td> </tr> <tr> <td><a href="home.asp">home</a></td> </tr> <tr> <td><a href="foto.asp?sezione=foto">foto</a></td> </tr> <tr> <td><a href="scrivimi.asp?sezione=scrivimi">scrivimi</a></td> </tr> </table> </td> <td> <div align="center">=strmessaggio</div> </td> </tr> </table> </body> </html> 39/97

40 LISTATO 6 COOKIE/PERSONALIZZA.ASP if request.querystring("colore") <> "" then Session("colore") = request.querystring("colore") end if <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>il sito di Mario Rossi</title> </head> if Session("colore") <> "" then <body bgcolor="=session("colore")"> else <body> end if <table width="100%" border="1" cellpadding="0" cellpadding="2"> <tr> <td width="100"> <!--#include file="includemenu.asp"--> </td> <td align="center"> if request.querystring("colore") = "" then Seleziona un colore di sfondo else Ho cambiato il colore di sfondo di tutte le sezioni secondo la tua scelta end if </td> </tr> </table> </body> </html> <form action="personalizza.asp" method="get"> <select name="colore"> <option value="#ffff99">giallo</option> <option value="#ffcccc">rosa</option> <option value="#66ccff">celeste</option> <option value="#ffffff">bianco</option> </select> <input type="hidden" name="sezione" value="personalizza"> <input type="submit" value="seleziona"> </form> 40/97

41 LISTATO 7 APPLICATION/MENUASP.ASP Application("utente") = "Mario" Application("password") = "foo" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>il sito di Mario Rossi</title> </head> if Session("colore") <> "" then <body bgcolor="=session("colore")"> else <body> end if <table width="100%" border="1" cellpadding="0" cellpadding="2"> <tr> <td width="100"> <!--#include file="includemenu.asp"--> </td> <td><h1><div align="center">questa è la Home Page del sito</div></h1></td> </tr> </table> </body> </html> 41/97

42 LISTATO 8 APPLICATION/LOGINPERSONALIZZA.ASP if request.querystring("colore") <> "" then Session("colore") = request.querystring("colore") end if <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>il sito di Mario Rossi</title> </head> if Session("colore") <> "" then <body bgcolor="=session("colore")"> else <body> end if <table width="100%" border="1" cellpadding="0" cellpadding="2"> <tr> <td width="100"> <!--#include file="includemenu.asp"--> </td> <td align="center"> <strong>login al sito</strong> <form action="personalizza.asp" method="get"> <strong>nome Utente</strong>: <input type="text" name="utente" size="20"><br /> <strong>password</strong>: <input type="password" name="password" size="20"><br /> <input type="hidden" value="personalizza"> <input type="submit" value="invia"> </form> </td> </tr> </table> </body> </html> 42/97

43 LISTATO 9 APPLICATION/PERSONALIZZA.ASP ' Estraggo il nome utente e la password inseriti dall'utente e li salvo in sessione if request.querystring("utente") <> "" then Session("utente") = request.querystring("utente") Session("password") = request.querystring("password") end if ' L'utente si è correttamente registrato se i dati di sessione sono quelli salvati nell'oggetto application if Session("utente") = Application("utente") And _ Session("password") = Application("password") Then if request.querystring("colore") <> "" then Session("colore") = request.querystring("colore") end if <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>il sito di Mario Rossi</title> </head> if Session("colore") <> "" then <body bgcolor="=session("colore")"> else <body> end if <table width="100%" border="1" cellpadding="0" cellpadding="2"> <tr> <td width="100"> <!--#include file="includemenu.asp"--> </td> <td align="center"> if request.querystring("colore") = "" then Seleziona un colore di sfondo else Ho cambiato il colore di sfondo di tutte le sezioni secondo la tua scelta end if <form action="personalizza.asp" method="get"> <select name="colore"> <option value="#ffff99">giallo</option> <option value="#ffcccc">rosa</option> <option value="#66ccff">celeste</option> <option value="#ffffff">bianco</option> </select> <input type="hidden" name="sezione" value="personalizza"> <input type="submit" value="seleziona"> 43/97

44 </form> </td> </tr> </table> </body> </html> else ' L'utente non si è registrato correttamente <html> <head><title>errore di accesso</title></head> <body>attenzione: accesso non consentito</body> </html> end if 44/97

45 LISTATO 10 GLOBAL.ASA <script language="vbscript" runat="server"> Sub Application_OnStart() Application("utente") = "Mario" Application("password") = "foo" End Sub </script> 45/97

46 LISTATO 11 ERRORE.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>pagina con errore</title> </head> <body> Dim i Dim j i = 1000 for j = -10 to 10 response.write i/j next </body> </html> 46/97

47 LISTATO 12 ERRORERESUME.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>pagina con errore</title> </head> <body> Dim i Dim j i = 1000 on error resume next for j = -10 to 10 response.write i/j next </body> </html> 47/97

48 LISTATO 13 ANNOETARISPOSTA.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>pagina che richiede nome e anno di nascita</title> </head> <body> Dim anno Dim eta anno = cint(request.querystring("anno")) eta = Year(Now()) - anno Ciao =request.querystring("nome"), hai =eta anni. </body> </html> 48/97

49 LISTATO 14 ANNOETARISPOSTA2.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>pagina che richiede nome e anno di nascita</title> </head> <body> Dim anno Dim eta on error resume next anno = cint(request.querystring("anno")) if Err then response.write "Gentile utente, si è verificato un errore nella compilazione dei tuoi dati <br>" response.write "Descrizione dell'errore: " & Err.Description & "<br>" response.write "Codice dell'errore: " & Err.Number & "<br>" If Err.Number = 13 Then response.write "Devi inserire un numero come anno di nascita<br>" End If response.write "Torna alla <a href=""annoeta2.asp"">pagina precedente</a>" response.end end if eta = Year(Now()) - anno Ciao =request.querystring("nome"), hai =eta anni. </body> </html> 49/97

50 3 a lezione A scuola con PC Open WebDeveloper ASP 1 I database relazionali di Antonio Volpon Continuiamo la nostra esplorazione della tecnologia ASP e affrontiamo in queste due ultime puntate un argomento fondamentale per sfruttarne appieno le potenzialità: l uso dei database. Vedremo innanzitutto cosa è un database, quando adottarlo e le parti di cui si compone. Passeremo poi a introdurre il ruolo del linguaggio SQL (Structured Query Language) utilizzato per interrogare le basi di dati e infine vedremo come utilizzare un database all interno delle applicazioni ASP. Lezione 1: Da sito statico a dinamico Lezione 2: Portare il sito sul server Lezione 3: ASP e i database I database relazionali Le differenze con un foglio elettronico Molti dei nostri lettori conoscono con tutta probabilità i programmi compresi con i pacchetti della famiglia Office: Word, Excel, PowerPoint. Excel, in particolare, è uno strumento versatile che consente di lavorare su righe di dati in modo preciso ed efficiente. A prima vista Excel sembrerebbe un database: vi si possono memorizzare delle informazioni sulle righe, realizzare ricerche e anche modifiche. In realtà un database si distingue da prodotti quali Excel perché permette di salvare dati e informazioni molto più complessi, e di porli in relazione con altre realtà. Anche gli strumenti utilizzati per realizzare interrogazioni su questi dati sono più potenti, tanto che per questi scopi è stato creato un vero e proprio linguaggio (chiamato SQL). Rispetto ad Excel, che ragiona essenzialmente in termini di riga, un database relazionale introduce il concetto di tabella, che indica una parte della realtà in esame. La teoria dei database relazionali è stata introdotta nel 1969 da Edgard Codd, un ricercatore di IBM che ha applicato diversi concetti presi dal mondo della matematica. Non sono necessarie in realtà particolari conoscenze per capire il funzionamento di una base di dati, che ruota in realtà intorno ai concetti di tabella, campo e record. Vediamo di capire di cosa si tratta. IL CALENDARIO DELLE LEZIONI Creare un database con Access Le tabelle e le relazioni Lo standard SQL per interrogare il database Le prossime puntate Lezione 4: Uso avanzato dei database La scelta di Access Per gli esempi che accompagnano queste 2 puntate utilizzeremo dei database in formato Access. La scelta deriva da diverse considerazioni. Prima di tutto Access è un prodotto che fa parte della famiglia Office (nella versione Professional) ed è quindi particolarmente diffuso. Utilizzare Access è inoltre alquanto semplice rispetto ad altri gestori di database professionali, e le prestazioni sono di tutto rispetto se, come nel nostro caso, stiamo realizzando un sito amatoriale, senza picchi di traffico. Il nostro è un corso di ASP e non di Access, quindi non ci fermeremo ad analizzare in Un esempio pratico: condividere le fotografie In queste due puntate ci concentreremo, come sempre, su un problema specifico. Come ormai sapete, il nostro compito è di aiutare Mario Rossi nella costruzione del proprio sito personale. In particolare Mario ha recentemente acquistato una macchina fotografica digitale, e vorrebbe condividere con gli amici via Web gli scatti più interessanti. Potrebbe farlo realizzando alcune pagine statiche (vedi la differenza tra sito statico e dinamico che abbiamo affrontato nella prima puntata del corso Web Master ASP, pubblicata nel numero di Novembre di PC Open), ma ha un idea diversa. Quella che vorrebbe realizzare è una pagina che non si limiti a visualizzare l elenco delle ultime foto inserite, ma che dia al visitatore del sito la possibilità di svolgere qualche ricerca, in modo da visualizzare le foto che ritraggono un particolare tema o che siano state scattate in un determinato luogo. Vorrebbe anche avere la possibilità di aggiungere velocemente dettaglio le caratteristiche di questo prodotto, ma è utile saper creare le tabelle ed eseguire qualche semplice interrogazione. Vediamo quindi come realizzare la tabella delle Foto (o meglio, la prima versione di questa tabella), con Access. Abbiamo scelto di utilizzare Access 2000, ma non preoccupatevi se possedete una versione diversa: per i nostri scopi le differenze tra le versioni sono del tutto trascurabili. Nessun problema neppure se non avete Access installato: sarete comunque un grado di provare gli esempi ASP che realizzeremo, poiché i file di esempio sono sempre prelevabili dal nostro sito. nuove foto che scatterà durante le prossime vacanze. Per aiutarlo in questa richiesta realizzeremo in effetti una base di dati. Abbiamo detto poco fa che un database è un insieme di dati. Aggiungiamo adesso che questo insieme di dati è dotato di un certo tipo di struttura, è cioè organizzato secondo una logica definita da chi si è occupato di costruirlo. Pensiamo al caso di Mario Rossi, cioè la costruzione di un database da pubblicare sul Web e che contenga una descrizione delle foto interessanti (useremo di seguito i termini database o base di dati per indicare lo stesso concetto). La fase logica La prima fase che porta alla costruzione di una base di da- 50/97

51 3 a lezione ti è essenzialmente logica. Si tratta di rispondere alla domanda: quali sono le informazioni di cui ho bisogno per realizzare la pagina richiesta? Quali, tra tutti i dati che posso memorizzare a proposito di una foto, hanno senso nel contesto in esame? Quello che vogliamo memorizzare è per prima cosa il nome del file contenente la foto, così da visualizzarla su browser. Sicuramente abbiamo poi bisogno di sapere qual è l argomento della foto, visto che Mario Rossi vuol dare ai suoi utenti la possibilità di compiere ricerche in base al tema, e la stessa cosa vale per il luogo. Un ulteriore informazione che è bene salvare sul database è una data, così da poter svolgere in futuro qualche interrogazione per capire quante foto sono state scattate nel corso dei mesi. Una volta decisi quali dati memorizzare, il resto del lavoro è semplice. Il concetto di tabella Come prima cosa costruiamo allora una tabella. Una tabella, nella teoria relazionale dei dati, rappresenta la descrizione di una realtà in esame. Nel nostro caso quello che possiamo fare è costruire una tabella che descriva le foto delle vacanze. Ogni tabella è poi composta da un certo numero di attributi (nel nostro caso il nome del file, la data, il luogo) che vengono chiamati campi. I campi sono i veri contenitori dei dati, mentre la tabella è essenzialmente un contenitore di campi (in figura 1 potete vedere un ipotetica tabella per le nostre foto, realizzata con Access). Quando popoliamo il database, ossia quando inseriamo i dati veri e propri, e in particolare nel popolare la tabella, specifichiamo diversi valori per i campi, ad esempio indicando che il nome del file è dsc0021, che il luogo è Venezia piuttosto che Roma. Ciascuna foto che inseriamo nella tabella prende il nome di record (in figura 2 sono riportati alcuni record per la tabella Foto) Creare un database con Microsoft Access Dopo averlo installato, eseguite Access dal vostro computer (lo trovate sicuramente tra i programmi del menu Start): vi verrà chiesto di aprire un database esistente oppure di crearne uno nuovo, proprio quello che vogliamo. Scegliete dove salvare il file, dandogli un nome significativo (ad esempio foto). Prendete nota della cartella in cui avete salvato il database, perché dovrete successivamente spostarlo nella directory principale del vostro sito (vedremo più avanti come fare). Vi troverete a questo punto nella schermata di figura 3. Avete davanti a voi il pannello di Access, lo strumento usato per creare gli oggetti del database (come le tabelle), per eseguire interrogazioni, ma anche per svolgere alcune attività che non rientrano nel nostro corso ASP, come la generazione di report o la scrittura di codice. Vogliamo invece realizzare una tabella, e per farlo basta assicurarsi che nel pannello sia selezionata la voce Tabella. A questo punto, tra le voci presenti 3 sulla destra scegliete Crea una tabella in visualizzazione struttura e siete pronti per descrivere tutti i campi di cui è composta la tabella (figura 4). Gli attributi dei campi Come abbiamo detto nel para /97

52 3 a lezione grafo precedente, i campi sono a realizzare. Poiché Mario Rossi possiede una macchina fo- 6 gli attributi che definiscono la realtà in esame, nel nostro caso la foto. Come prima cosa inseriamo quindi Nome, a indicare il nome del file contenente l immagine (figura 5). Se vi spostate con il tabulatore, noterete che Access vi richiede di inserire un tipo dati per il campo appena definito. Quello che vi viene chiesto è in pratica di decidere il formato per l informazione da salvare: si tratta di un testo, di un numero, di una data (e con quali dimensioni)? Per una descrizione approfondita dei tipi di dati disponibili in Access vi rimandiamo alla guida in linea, ma per il nome della foto ci sembra corretto definire il campo come un testo di lunghezza massima di 50 caratteri (figura 6). Alla foto vorremo sicuramente tografica digitale che dà ad ogni foto un nome composto da un prefisso e un progressivo (ad esempio dsc1234 ), potremmo scegliere il campo Nome della tabella come chiave primaria. Un alternativa è quella di inserire un campo fittizio (ad esempio ID per identificativo) e scegliere come tipo di dato Contatore. Ogni volta che inseriremo un record nella tabella il valore del contatore si incrementerà automaticamente di 1, realizzando quindi un campo contenente valori ogni volta diversi. Creiamo allora una chiave primaria, ma per prima cosa premiamo il pulsante Annulla come risposta alla domanda di Access. A questo punto selezioniamo la riga contenente il campo 7 8 associare un Titolo, e scegliamo di usare un campo, sempre di tipo testo ma questa volta di lunghezza 200. Si tratta poi di inserire un campo Luogo dello stesso tipo, come Provincia e infine un campo Data, questa volta di tipo data a indicare la data di scatto della fotografia. La versione finale della tabella compare in figura 7. Nome della tabella e dal menu di Access selezioniamo l icona che rappresenta il disegno di una chiave. Noterete che a sinistra del campo Nome comparirà una piccola chiave, ad indicare che quel campo conterrà sempre valori univoci per ogni record inserito (figura 9). Non si tratta solo di un indicazione: Access non vi consentirà neppure se lo volete di 9 La chiave primaria inserire due volte lo stesso nome per l immagine. di una tabella Possiamo a questo punto salvare la tabella: Access vi chiede di inserire un nome opportuno con il quale riferirla successivamente, e non c è dubbio che la cosa migliore sia di chiamarla Foto. Non appena fornite di un nome della tabella, però, Access vi risponde con una finestra che richiede la vostra immediata attenzione (visto che contiene un punto esclamativo) (figura 8), consigliandovi di indicare una chiave primaria per la tabella. Di cosa si tratta esattamente? Salvate di nuovo la tabella chiamandola Foto e ritornerete nel pannello di Access, dove la vedrete comparire (figura 10). Finora abbiamo definito una tabella e i suoi campi: si tratta a questo punto di popolare la tabella con alcuni dati, e quindi con alcuni record. Vedremo in particolare come creare solo alcuni record, visto che nel CD Guida abbiamo inserito tutti i file di esempio, compresi i database che useremo per gli esercizi. Per popolare la tabella è sufficiente 10 Anche se non è obbligatorio, è buona norma che ogni tabella contenga un campo i cui valori siano univoci per ogni record che inserite. Il vostro codice aprirla con un doppio clic dal pannello di Access, così da entrare in modalità inserimento. Inseriamo quindi alcuni dati, come possiamo vedere in figura fiscale, tanto per fare un esempio, è univoco. Per questioni di efficienza e per facilitare le operazioni tra tabelle (che vedremo in seguito) è buona abitudine definire Per verificare cosa vuol dire aver definito una chiave primaria provate a inserire un record utilizzando un nome già presente: come vedete dalla figura 12 questa operazione non 12 o creare un campo di questo tipo in ogni tabella che andremo è permessa. 52/97

53 3 a lezione 3 Consigli per impostare una tabella Tabelle, campi, record: questi gli elementi fondamentali di una base di dati. In realtà, esistono una serie di regole da tenere in considerazione quando definiamo una o più tabelle e che adesso introdurremo brevemente. È importante costruire una base di dati che risulti efficiente, perché nessun programma, per quanto bene sia scritto, riesce a sopperire i limiti di una base di dati deficitaria. Le tabelle, in particolare, dovrebbero limitarsi a descrivere uno e un solo oggetto della realtà in esame. Il motivo di questi accorgimenti è evidente se diamo un occhiata alla tabella di figura 13. Come vedete abbiamo popolato i record con alcuni dati significativi, proprio quelli che andremo a visualizzare nelle nostre pagine ASP. Un problema di questa tabella è che contiene diverse ripetizioni di valori nei campi Provincia e Stato. I dati devono essere coerenti Caratteristica saliente di ogni base di dati è la necessità di ospitare dati che siano il più possibile coerenti tra loro. Se però nel campo Nazione scrivo Italia in un caso, Italy in un altro e magari IT in un terzo non ho sicuramente partecipato a mantenere i dati coerenti. Questa è proprio la situazione della tabella in figura. Se un utente inserisce un nuovo record non ho nessuna possibilità di guidarlo affinché inserisca un nome di nazione che rispetti lo standard definito, ma questo potrà inserire ogni volta dei valori leggermente o completamente diversi. Se domani volete contare quante immagini scattate in Italia sono presenti nella tabella (operazione semplicissima, come vedremo quando cominceremo a parlare di SQL), in questo caso non ci riuscirete. Un altro limite di questa struttura deriva dal fatto che rende difficile le modifiche sui dati. Immaginate di dover sostituire la voce Italy con Italia, in quanto il sito di Mario Rossi è per il momento (anche se Mario già aspira a tradurlo) in lingua italiana. Con questa struttura non potete far altro che sostituire ogni voce, operazione non impossibile (date le interessanti funzioni di Access), ma sicuramente scomoda in caso di interventi ripetuti. Abbiamo detto precedentemente che ogni tabella dovrebbe rispecchiare una realtà atomica. In effetti, se prestiamo attenzione al significato di Provincia e Stato, ci accorgiamo che queste non sono caratteristiche peculiari di una foto, ma piuttosto di altre tabelle, che potremmo chiamare Provincia e Stato. Costruiamo allora altre due tabelle, in modo del tutto analogo a quello usato per creare la tabella foto (riportiamo la struttura rispettivamente nelle figure 14 e 15). Ogni tabella è composta da due campi, di cui il primo è la chiave primaria. Abbiamo scelto in questo caso di usare la sigla della provincia e il codice dello stato come chiave primaria, così da garantire l univocità di questi valori. Nelle figure 16 e 17 potete notare alcuni record di esempio per le tabelle, che rispecchiano i record inseriti nella tabella Foto. A questo punto interveniamo sulla tabella Foto in modo che i campi Provincia e Stato non si riferiscano più, come succede adesso, alle descrizioni delle province e degli stati, ma alle chiavi primarie. Per farlo sostituiamo il campo Provincia con IdProvincia e Stato con Id- Stato (tipo di dato testo di lunghezza 3 e 2) e li riempiamo rispettivamente con la sigla della provincia e il codice dello stato, così da ottenere qualcosa di simile alla tabella di figura Il concetto di normalizzazione Esiste una soluzione che permette di rendere più facili le modifiche alle tabelle e di trattare dati coerenti : si tratta della normalizzazione, ovvero di una serie di tecniche complementari (ciascuna chiamata Prima Forma Normale, Seconda Forma Normale e altre) che aiutano lo sviluppatore nella costruzione di una base di dati efficiente. Non entreremo nel dettaglio di queste tecniche, ci limiteremo a capire come intervenire sulla nostra tabella perché sia efficiente e facilmente mantenibile /97

54 3 a lezione 4 Le relazioni tra le tabelle Uno dei punti cardine, nonché uno dei punti forza dei database relazionali è dato dalla possibilità di definire legami tra le tabelle (chiamati relazioni). Si tratta adesso di capire cosa vogliamo realizzare attraverso le relazioni nel nostro particolare contesto. Il nostro obiettivo è di legare il campo IdProvincia e IdStato delle tabelle Provincia e Stato con i rispettivi campi della tabella Foto, in modo che in quest ultima tabella non sia possibile inserire valori non presenti nelle prime 2. Vediamolo con un esempio. Aprite la tabella Foto con un doppio clic e provate ad inserire alcuni dati di prova per una fotografia. In particolare, inserite dei valori assolutamente inventati per i campi Id- Provincia e IdStato, ad esempio AA e BB. Access non fa una piega: vi permette di inserire i valori scelti anche se non esistono nessuna Provincia e nessuno Stato definiti nelle rispettive tabelle. Questo rappresenta un problema perché, come abbiamo detto precedentemente, uno dei vantaggi e degli scopi di un database è di mantenere l integrità referenziale dei dati che ospita. Per superare questa limitazione ci vengono in aiuto le relazione tra tabelle che Access, da buon database relazionale, permette di definire in modalità grafica semplificando al massimo questa operazione, tanto da renderla quasi divertente. La procedura nel dettaglio Prima di tutto eliminate il record che avete appena inserito nella tabella Foto e assicuratevi che non siano presenti record con IdProvincia e IdStato non presenti anche nelle tabelle Stato e Provincia. Adesso portatevi nella maschera di gestione delle tabelle e selezionate l icona relazioni dalla barra dei menu. A questo punto si tratta di aggiungere le tabelle tra cui realizzare le relazioni, nel nostro caso tutte, visto che si tratta di selezionare Foto, Provincia e Stato (per selezionare più tabelle tenete premuto il tasto CTRL della tastiera mentre effettuate la selezione con il tasto sinistro del mouse). Confermate l operazione e vedrete comparire le tabelle nella finestra Relazioni di Access. A questo punto dobbiamo informare Access della nostra intenzione, ovvero di legare il campo IdProvincia della tabella Provincia a quello della tabella Foto, così da porli in stretta relazione. Premete il tasto sinistro del mouse sopra il campo IdProvincia della tabella Provincia e trascinatelo verso il campo IdProvincia della tabella Foto. A questo punto rilasciate il pulsante del mouse: la situazione che vi si presenta è quella di figura 19. Cerchiamo di capire il significato della schermata. Access ci propone di realizzare una relazione tra le due tabelle ponendole in relazione. Non solo: se prestate attenzione alla parte bassa della figura, vedrete un checkbox con la scritta Applica integrità referenziale: è proprio quello di cui abbiamo bisogno, per cui lo selezioniamo. A questo punto agite sul pulsante Crea e noterete che il diagramma delle relazioni cambia, in particolare è stato aggiunto un segmento di unione tra le tabelle Provincia e Foto, come in figura 20. Ripetete adesso la stessa operazione per il campo IdStato, trascinando il campo dalla tabella Stato alla tabella Foto e applicando l integrità referenziale, così portarvi nella situazione descritta dalla figura 21. Abbiamo finito: potete chiudere la finestra relazioni e provare a ripetere l inserimento precedente. Dalla maschera di gestione delle tabelle aprite con un doppio clic la tabella Foto e provate nuovamente ad inserire dei valori arbitrari per i campi IdProvincia e IdStato (ad esempio ancora una volta AA e BB ). Questa volta Access non vi consente l operazione (figura 22): è infatti necessario utilizzare una provincia o uno stato in una delle relative tabelle. È quindi buona norma, prima di popolare i record di questo database, riempire per prima cosa le tabelle Stato e Provincia con i valori che poi utilizzeremo nella tabella Foto. Non è una regola ferrea (altrimenti saremo di fronte ad un limite): potete sempre, quando nasce l esigenza, uscire dalla tabella Foto e inserire i record richiesti in Stato e Provincia. Terminiamo qui la nostra visita di Access: abbiamo imparato tutto quello che ci serve per costruire una base di dati. È adesso arrivato il momento di capire come possiamo usare questo database per costruire applicazioni ASP. Vediamo per prima cosa dove posizionare la base di dati e come creare un collegamento da una pagina. 54/97

55 3 a lezione 5 Usare un database Access da ASP Realizzare da una pagina ASP la connessione ad un database Access è un operazione semplice, che richiede però una certa accortezza per evitare errori difficilmente rintracciabili. Come sempre, trovate gli esercizi che accompagnano questa puntata nel nostro CD, ma vediamo comunque passo per passo come utilizzare il database. Portiamoci nella cartella principale del nostro sito, quella per intenderci che abbiamo configurato in Internet Information Services. Per chiarezza (ma non esiste nessun obbligo) creiamo una cartella chiamata database e copiamo al suo interno la base di dati che abbiamo realizzato poco fa. A questo punto entriamo nel vivo e passiamo ad analizzare il codice che la compone. La pagina è elencofoto.asp, presente in figura 23, e visualizza l elenco dei record presenti nella tabella Foto. Il risultato è semplice ma interessante: per la prima volta da quando lavoriamo con le pagine ASP sono visualizzati dati che provengono da una fonte esterna, un database. Anche se l esempio è quasi banale, è facile capire come l utilizzo delle basi di dati nel contesto della programmazione Web apre delle possibilità che fino ad ora, utilizzando il solo linguaggio, non siamo riusciti a raggiungere. Passiamo ora a un attento studio delle righe di codice che permettono di raggiungere questo importante traguardo (listato 1). La pagina utilizza quasi tutte le strutture di ASP che già conosciamo, integrando la comunicazione con il database. Spenderemo un po di tempo ad analizzare le righe che compongono questo esempio, perché un esercizio così semplice contiene gran parte delle nozioni di cui abbiamo bisogno per utilizzare i database con ASP. Procediamo allora per gradi: la tecnologia ADO per collegarsi ai database. I listati citati nell articolo sono nel CD Guida nella sezione Corsi Open Master ASP non dispone nativamente di un supporto per i database, ma utilizza invece la tecnologia ADO (ActiveX Data Objects), che fornisce uno strato di interfaccia tra la pagina ASP e la base di dati. Questo vuol dire che per realizzare i programmi di queste puntate non solo dovete avere installato Internet Information Services, ma anche ADO. Non preoccupatevi: con tutta probabilità il supporto ADO è già installato sul vostro computer, visto che è utilizzato da un vasto numero di applicazioni anche non Web, ma se così non fosse potete scaricare la versione più recente collegandovi al sito crosoft.com/data/. Le connessioni La prima cosa da fare per utilizzare un database è quella di stabilire una comunicazione tra la pagina ASP e i dati che vogliamo interrogare. In ADO la comunicazione avviene creando un oggetto di tipo connessione: è lo scopo della riga di codice che inizia con Set conn. Finora non abbiamo ancora introdotto il ruolo del metodo CreateObject dell oggetto Server di ASP. Lo scopo del metodo è quello di creare e istanziare un oggetto che non fa parte del modello ad oggetti di ASP (come Request, Response, e così via), ma che è possibile richiamare da una pagina ASP. Un programmatore di linguaggio C++, ad esempio, potrebbe creare una libreria di funzioni e richiamarla all interno di una pagina ASP, con il benificio di aumentare le prestazioni dell applicazione, visto che C++ è un linguaggio compilato. Il concetto non è di facile comprensione, ma non preoccupatevi, visto che nel corso questo è l unico ambito in cui lo useremo. L unica cosa che è bene ricordare è che ADO non fa parte di ASP, e quindi per richiamare gli oggetti ADO da una pagina è necessario usare il metodo CreateObject. Anche la sintassi sarà sempre quella che presentiamo nell esempio, che farete bene a copiare e incollare quando realizzerete le vostre applicazioni in modo del tutto indipendente. A questo punto conn diventa l oggetto connessione che useremo nell esempio. Una volta creata la connessione, dobbiamo aprirla, così da stabilire il canale di comunicazione tra la pagina e il database. È appunto lo scopo della riga successiva, che utilizza l evento Open dell oggetto connessione appena creato. Nell aprire la connessione dobbiamo specificare il tipo di database che andremo ad utilizzare e soprattutto la posizione della cartella in cui si trova, nonché il nome che consente di identificarlo. Anche per quanto riguarda la sintassi da usare non ci soffermiamo più del dovuto: è quella presentata nel listato. L unica parte degna di nota è il metodo MapPath dell oggetto Server. Il metodo MapPath dell oggetto server Lo scopo di questa istruzione è calcolare il percorso fisico di un file partendo dal percorso Web. Spieghiamo il concetto con un esempio. Quando digitate un URL (Uniform Resource Locator) nella barra degli indirizzi del browser, specificate il percorso partendo dalla directory principale del server Web. Se ad esempio scrivete calhost/miapagina.asp e la directory principale del server è c:\inetpub, il percorso fisico del file nel vostro PC è c:\inetpub\miapagina.asp. Lo scopo del metodo MapPath è proprio quello di restituire il percorso completo del file ricevendo come input unicamente l URL della pagina. Ma perché usare questo metodo quando avremmo potuto semplicemente scrivere il percorso a mano? In generale, quando costruiamo un applicazione Web dovremmo cercare di essere il più generalisti possibili, ed evitare di cablare all interno della pagina informazioni che domani potrebbero variare. Se state realizzando questo esercizio e lo volete successivamente far ospitare da un provider, molto probabilmente il percorso della directory principale del server cambierà. Memorizzando il percorso del database nella pagina, prima di portare in questo nuovo ambiente le pagine, sarete costretti a modificarlo, e questo per ogni pagina personalizzata. Utilizzando il metodo Map- Path lasciate al server il compito di calcolare qual è il percorso del file, così potete portare la pagina in qualsiasi altro ambiente. Non a caso, se prendete i file di questa puntata dal nostro CD e li copiate nel vostro PC, non avete bisogno di apportare alcun adattamento per eseguirli correttamente /97

56 3 a lezione 6 Lo standard SQL per interrogare il database Passiamo ora alla riga che valorizza la stringa SQL. È una riga fondamentale per il nostro scopo: definisce quali e quanti dati andare a recuperare dal database, e da quale tabella. SQL (Structured Query Language) è a tutti gli effetti un linguaggio usato per interrogare e modificare le basi di dati. È uno standard (seppur con diverse e a volte inopportune varianti): la sintassi che imparemo per Access è in realtà utilizzabile anche in altre realtà. I fondamenti di SQL sono alquanto semplici da imparare. Una query di selezione (dove per query intendiamo un interrogazione al database) ha una struttura minima del tipo: SELECT elenco_dei_campi FROM nome_tabella che potrebbe essere tradotta come seleziona i campi elenco_dei_campi dalla tabella nome_tabella. L elenco dei campi da selezionare va sempre separato da una virgola. Torniamo ora alla select del nostro esempio e confrontiamola con la sintassi appena citata: SELECT Titolo, Luogo FROM Foto Non dovremmo avere dubbi sullo scopo di questa query: estrarre dalla tabella Foto il titolo e il luogo di tutte le foto memorizzate. Per il momento ci fermiamo qui e proseguiamo ad analizzare l esempio, ma torneremo tra breve ad arricchire la nostra conoscenza di SQL. I recordset ADO Una volta stabilita la connessione con il database e costruita la stringa in linguaggio SQL abbiamo bisogno di un altra struttura, un oggetto che contenga i record che andremo ad estrarre dalla base di dati: si tratta dell oggetto Recordset (cioè insieme di record). Lo andiamo a istanziare allo stesso modo della connessione, poiché anche Recordset è un oggetto proprio di ADO e non di ASP. Anche l oggetto Recordset dispone di un metodo Open, al quale passiamo alcuni parametri. Come prima cosa è necessario indicare al Recordset quale è la stringa SQL che deve utilizzare per restituire i dati, e che abbiamo memorizzato nella variabile sql (non fatevi ingannare dal nome che abbiamo dato alla variabile: avremmo potuto usare quasiasi stringa). È inoltre fondamentale legare il Recordset alla connessione che abbiamo aperto con il database Access. Ma perché bisogna seguire questa procedura, visto che ADO avrebbe potuto automaticamente legare il Recordset con la connessione aperta? In realtà molte applicazioni Web dispongono di connessioni a database diversi, di conseguenza il sistema non è in grado a priori di decidere quale Recordset associare ad ogni connessione; è un operazione di nostra competenza. È possibile specificare altri due parametri all apertura del Recordset, e allo scopo abbiamo utilizzato due costanti definite ad inizio pagina. Senza spingerci nel dettaglio, questi parametri indicano all oggetto le nostre intenzioni riguardo i dati che andremo ad estrarre. Il primo adopenforwardonly indica che vogliamo accedere ai dati solo una volta, spostandoci dal primo all ultimo record presenti. Indicando al Recordset che per noi questa scelta non rappresenta un limite evitiamo di sprecare inutili risorse e rendiamo la navigazione tra i risultati più efficiente. Il secondo parametro, adlockreadonly è utilizzata quando i dati sono utilizzati solo per lettura, anche questo è il nostro caso. Scorrere i record di un Recordset Spostiamoci ora nella parte finale del codice. Troviamo per prima cosa un ciclo do until. Questa titpologia di ciclo (che non abbiamo visto nella prima puntata) è eseguito fino a quando non diventa vera l espressione che lo segue. E l espressione che lo segue utilizza un metodo del Recordset chiamato Eof. Il risultato del metodo Eof (dove Eof sta per End Of File, fine del file) è sempre falsa, a meno che non ci troviamo dopo l ultimo record restituito. Il significato del ciclo è quindi questo: fino a quando non hai visualizzato tutti i record, ripeti questo ciclo. Ci rimane allora da vedere come visualizzare i record. All interno del ciclo viene costruita una lista HTML ricorrendo al tag <li> ed è usato un ulteriore metodo dell oggetto Recordset, Fields. La sintassi è molto semplice ed intuitiva: recordset.fields (nome_campo). In effetti il metodo Fields restituisce il contenuto del campo richiesto per il record corrente, proprio quello di cui abbiamo bisogno. Per ogni foto estraiamo quindi il Titolo della foto e il luogo dove è stata scattata, e li presentiamo in una lista HTML. Segue questa riga rs.movenext, ancora una volta un metodo del Recordset. Come è facile intuire, utilizziamo questo metodo per spostarci sul successivo record del Recordset e ricominciare il ciclo, a meno che non ci troviamo sull ultimo record della tabella. In questo caso infatti la condizione rs.eof diventa vera, e l esecuzione della pagina 24 esce dal ciclo. Nello scrivere la pagina ASP e soprattutto il ciclo è facile dimenticarsi di includere il metodo Move- Next. Prestate attenzione a non commettere mai questa leggerezza perché in questo caso la condizione del ciclo non 25 diventerà mai vera, e l esecuzione della pagina terminerà solo quando viene raggiunto il timeout di esecuzione. Chiudere quanto si è aperto In genere gli oggetti creati da ASP vengono liberati non appena cessano di essere utilizzati o quando escono dalla visibilità della pagina. È comunque sempre buona norma rilasciare il prima possibile gli oggetti che non servono più alla nostra pagina. Da un lato liberate la memoria, dall altro siete sicuri che non rimangano accidentalmente delle connessioni al database. Questo è quello di cui si occupa l ultima parte del codice. Viene per prima cosa chiuso il Recordset, e per sicurezza viene annullato come oggetto; stessa sorte tocca poi alla connessione. Notate che l ordine in cui svolgiamo queste operazioni non è casuale. Per prima cosa chiudiamo il Recordset, che per funzionare utilizza una connessione, e poi chiudiamo quest ultima. Non importa quanto semplice sia il codice che andate a visualizzare: è comunque sempre buona norma rilasciare esplicitamente gli oggetti che usate nel costruire le vostre applicazioni. 56/97

57 3 a lezione Visualizzare la foto selezionata L esempio precedente ci è servito per introdurre ADO e gli oggetti Connection e Recordset, ma ai fini pratici del sito lascia un po a desiderare. L auspicio di Mario Rossi è di presentare una pagina come quella realizzata, ma avere anche la possibilità di selezionare una voce dall elenco e vedere la relativa foto. Modifichiamo allora l esempio per rendere operativa questa modifica. Nel contempo modifichiamo anche la stringa SQL utilizzata per estrarre i record, così da presentare altre caratteristiche del linguaggio SQL. La nuova pagina è riportata in figura 24. Come vedete l elenco è del tutto simile all esempio precedente, solo che ogni voce è ora diventata un link. Abbiamo anche aggiunto un indicatore con il totale delle foto presenti nel database, così gli utenti affezionati sono in grado di rendersi conto del numero di foto che Mario carica nel corso delle settimane. Se selezionate uno dei link si apre una seconda pagina, che visualizza il dettaglio della foto selezionata (figura 25). Proprio quello di cui aveva bisogno Mario Rossi! Vediamo ora come abbiamo realizzato il codice che rende possibile tutto questo (Listato 2). Il trucco consiste nel definire due stringhe SQL: la prima utilizzata per contenere il numero totale delle foto, la seconda per selezionare tutti i record di interesse. Ci occuperemo tra un attimo di come ottenere queste informazioni nel linguaggio SQL, ma per il momento vediamo come utilizziamo l oggetto Recordset. Non abbiamo in effetti bisogno di creare due distinti Recordset, uno per il totale e uno per l elenco, ma possiamo riutilizzare lo stesso oggetto in contesti diversi. Come è possibile notare guardando il codice sorgente, la prima volta è aperto il Recordset utilizzando la stringa sql1, dopodiché ne viene estratto il numero di record ed è chiuso. Infine viene riaperto utilizzando la seconda stringa SQL (sql2), che restituisce l elenco di tutti i record presenti nelle base di dati. Esaminiamo la sintassi di queste interroga- Costruire dinamicamente le interrogazioni Estendiamo a questo punto i concetti esposti 26 finora, e partiamo da un esigenza di Mario Rossi. Mario vorrebbe infatti dare la possibilità ai propri utenti di effettuare ricerche all interno dell archivio di foto, così che sia possibile specificare un termine che compone il titolo della foto. La pagina di risposta conterrà quindi solo le foto che rispondono ai criteri espressi dall utente. Potete provare questa funzionalità puntando il vostro browser alla cartella ricerca e in particolare visualizzando la pagina ricerca.asp. Compare un form: provate a questo punto a inserire un termine contenuto nel titolo della foto, come ad esempio fiordaliso (figura 26). Avviate la ricerca, e come potevamo aspettarci troviamo una pagina del tutto simile a quella degli esempi precedente, ma che contiene esclusivamente le foto ricercate (figura 27). Come di consueto entriamo adesso nel dettaglio del codice ASP che rende possibile questa interessante possibilità. Vediamo per prima cosa il contenuto della pagina con il form di ricerca, ricerca.asp, che si trova nella cartella ricerca degli esempi della puntata (listato 3). Si tratta di una pagina che non ci spaventa, in quanto composta da un semplice form in cui inserire il termine di ricerca. Passiamo allora ad affrontare la pagina che contiene il vero e proprio codice di ricerca, elencofoto.asp (listato 4). Non ci sono veri e propri stravolgimenti rispetto a quello che abbiamo realizzato fino ad ora. In realtà ci siamo limitati a modificare la query SQL così da filtrare i dati di interesse, operazione non rara quando si tratta di interrogare una base di dati. Questa volta le due stringhe sql1 e sql2 dipendono dal campo compilato nel form: a una parte fissa di contenuto viene aggiunto il valore inserito dall utente. Per farlo si usa una query SQL con una forma del tipo: SELECT elenco_campi FROM Tabella WHERE campo operatore criterio La sintassi della prima parte è quella che siamo soliti usare, mentre abbiamo aggiunto qualche cosa di nuovo nella seconda. Quando vogliamo filtrare i risultati presenti in una tabella, possiamo utilizzare la parola chiave where e farla seguire dai criteri. Se volessimo cercare tutte le foto che contengono un determinato titolo (ad esempio montagna, scriveremo qualche cosa del tipo: SELECT * FROM Foto WHERE Titolo = montagna È facile capire il significato della query: seleziona tutti i record della tabella foto il cui titolo è uguale a montagna ). La presenza dell apice singolo a chiudere il termine di ricerca è obbligatorio quando lavoriamo con le stringhe, mentre non va usato nel caso di numeri. L interrogazione che utilizziamo nell esempio è però leggermente diversa da quella appena vista, perché leggermente diversa è la nostra esigenza. In effetti noi vogliamo estrarre non tutte le foto che hanno un certo termine come titolo, ma tutte quelle che hanno un titolo che contiene il termine (tanto per fare un esempio reale, vogliamo che cercando fiordaliso venga trovata anche la foto il cui titolo è Fiordaliso Montano ). La sintassi da usare in questo caso è leggermente diversa: SELECT * FROM Foto WHERE Titolo like %fiordaliso% Utilizziamo l operatore like al posto di =, proprio perché non cerchiamo un uguaglianza stretta tra il 27 titolo del campo e il valore ricercato. Sono presenti inoltre due simboli di percentuale, uno all inizio e uno alla fine del termine di ricerca. Come l asterisco nel DOS, si tratta di caratteri jolly che stanno ad indicare qualsiasi ripetizione di caratteri. Il significato di tutta la query diventa quindi seleziona tutti i record della tabella titolo il cui titolo contenga fiordaliso e qualsiasi carattere prima o dopo questo termine (anche nessuno). Se avessimo voluto selezionare tutte le foto che iniziano con fiordaliso avremmo scritto qualche cosa del tipo: SELECT * FROM Foto WHERE Titolo like fiordaliso% Viceversa, se fossimo interessati a tutti i record che terminano con fiordaliso, avremmo scritto qualche cosa del tipo: SELECT * FROM Foto WHERE Titolo like %fiordaliso 57/97

58 3 a lezione zioni. La prima stringa utilizzata contiene il seguente codice: SELECT count(nome) AS contatore FROM Foto La struttura è del tutto simile all esempio precedente, ma la parte relativa alla scelta dei campi ha subìto alcune importanti modifiche. È stata in particolare usata una funzione detta di aggregazione, non allo scopo di restituire i record della tabella, ma di effettuare un analisi statistica sui dati presenti. La funzione count, a cui viene passato il nome di un campo (nome), è quella di restituire (di contare ) il numero di record con nome della foto diverso uno dall altro (in poche parole, tutte le foto inserite nella base dati). La seconda query restituisce lo stesso elenco di prima, ma l abbiamo leggermente modificata per introdurre altre caratteristiche dello standard SQL: SELECT * FROM Foto ORDER BY Data DESC In questo secondo caso manca completamente l elenco dei campi, che è stato sostituito da un carattere jolly, l asterisco (*). Il significato di tale sintassi è selezionare tutti i campi della tabella Foto. Quindi, senza dover elencare i campi uno per uno, un operazione nella quale è facile commettere errori quando sono tanti, è possibile usare l asterisco. Anche se realizziamo applicazioni semplici, vale comunque la pena di non esagerare con l uso di questa sintassi. Impiegare l asterisco solo perché serve un campo su 10 non è una buona scelta, poiché le operazioni di lettura dalla base dati saranno certamente più lente. Questa query ha un altra particolarità che la distingue dall esercizio precedente: termina con ORDER BY. Com è facile intuire, in tal modo è possibile ordinare i risultati secondo un campo. Ad esempio, potreste voler ordinare i dati secondo la data di scatto della foto, in modo che le fotografie più recenti compaiano all inizio. In questo modo gli utenti hanno la possibilità di trovare le foto recenti sempre nelle posizioni più vicine all inizio della pagina, mentre le foto ormai datate si sposteranno progressivamente in fondo alla pagina. Utilizziamo quindi ORDER BY seguito dal campo Data della tabella Foto e dalla parola chiave DE- SC, diminutivo di Descending. Se avessimo voluto ordinarle dalla più datata alla più recente avremmo invece utilizzato ASC (Ascending) oppure nulla, visto che è il comportamento standard. Abbiamo anche modificato il codice che produce l elenco delle foto, aggiungendo un link. Se prestate attenzione a come lo abbiamo costruito, vedrete che compare un parametro, il nome della foto. In tal modo la pagina di dettaglio della foto riceverà il nome con cui abbiamo salvato l immagine sul disco del server, e sarà così in grado di visualizzarla. In effetti, se passiamo a verificare il codice della seconda pagina, per prima cosa è estratto il valore del parametro, il nome del file della foto. A questo punto, a metà pagina, inseriamo un tag di tipo IMG. Le immagini sono state precedentemente salvate nella cartella foto del server, per questo facciamo precedere da questa cartella il percorso dell immagine. Quando il server esegue l istruzione ASP contenuta nel tag IMG inserisce il nome fisico dell immagine e a questo punto il browser dispone di tutti gli elementi per visualizzarla nella pagina. Conclusioni Terminiamo qui la prima puntata dedicata all esplorazione delle basi dati e alla loro integrazione con ASP. A questo punto siete in grado di interrogare qualsiasi tabella, con particolare riferimento a quelle realizzate con Access, anche se la struttura è del tutto ripetibile in altre realtà. Abbiamo però ancora qualche importante concetto da vedere. Ancora non sappiamo, ad esempio, realizzare delle query che interessino più tabelle, nel nostro caso Foto, Provincia e Stato. Ci siamo poi soffermati sulle query di selezione, ma ne esistono di altri tipi, in particolare quelle che vi consentono di inserire, modificare e cancellare i record dalle tabelle. E proprio di questo parleremo nell ultima puntata del corso Web Developer ASP. 58/97

59 Cliccate qui per accedere alla versione elettronica dei listati. LISTATO 1 ELENCOFOTO.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>le foto di Mario Rossi</title> </head> <body> <h1>le mie foto preferite</h1> <ul> Const adopenforwardonly = 0 Const adlockreadonly = 1 Dim sql Dim conn, rs Set conn = Server.CreateObject("ADODB.Connection") conn.open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/database/foto.mdb") sql = "SELECT Titolo, Luogo FROM Foto" Set rs = Server.CreateObject("ADODB.RecordSet") rs.open sql, conn, adopenforwardonly, adlockreadonly do until rs.eof <li>=rs.fields("titolo"), scattata a =rs.fields("luogo")</li> loop rs.movenext rs.close set rs = nothing conn.close set conn = nothing </ul> </body> </html> 59/97

60 LISTATO 2 ELENCOFOTOLINK.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>le foto di Mario Rossi</title> </head> <body> <h1>le mie foto preferite</h1> Const adopenforwardonly = 0 Const adlockreadonly = 1 Dim contatore Dim sql1,sql2 Dim conn, rs Set conn = Server.CreateObject("ADODB.Connection") conn.open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/database/foto.mdb") sql1 = "SELECT count(nome) AS contatore FROM Foto" sql2 = "SELECT * FROM Foto ORDER BY Data DESC" Set rs = Server.CreateObject("ADODB.RecordSet") rs.open sql1, conn, adopenforwardonly, adlockreadonly contatore = rs("contatore") rs.close() rs.open sql2, conn, adopenforwardonly, adlockreadonly Sono presenti =contatore foto <br><br> do until rs.eof <li><a href="dettagliofoto.asp?nome==rs("nome")">=rs("titolo"), scattata a =rs("luogo")</a></li> loop rs.movenext 'rs.close 60/97

61 'set rs = nothing 'conn.close 'set conn = nothing </ul> </body> </html> 61/97

62 LISTATO 3 RICERCA/RICERCA.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>le foto di Mario Rossi</title> </head> <body> <h1>cerca tra le mie foto preferite</h1> <form action="elencofoto.asp" method="get"> Cerca la foto: <input type="text" name="rfoto"><br> <input type="submit" value="cerca"> </form> </body> </html> 62/97

63 LISTATO 4 RICERCA/ELENCOFOTO.ASP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <title>le foto di Mario Rossi</title> </head> <body> <h1>le mie foto preferite</h1> Hai selezionato le foto che parlano di =request.querystring("rfoto")<br> Const adopenforwardonly = 0 Const adlockreadonly = 1 Dim contatore Dim sql1,sql2 Dim conn, rs Set conn = Server.CreateObject("ADODB.Connection") conn.open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("/database/foto.mdb") sql1 = "SELECT count(nome) AS contatore FROM Foto WHERE Titolo like '%" & request.querystring("rfoto") & "%'" sql2 = "SELECT * FROM Foto WHERE Titolo like '%" & request.querystring("rfoto") & "%' ORDER BY Data DESC " Set rs = Server.CreateObject("ADODB.RecordSet") rs.open sql1, conn, adopenforwardonly, adlockreadonly contatore = rs("contatore") rs.close() rs.open sql2, conn, adopenforwardonly, adlockreadonly Sono presenti =contatore foto che soddisfano i criteri di ricerca<br><br> do until rs.eof <li><a href="dettagliofoto.asp?nome==rs("nome")">=rs("titolo"), scattata a =rs("luogo")</a></li> 63/97

64 loop rs.movenext 'rs.close 'set rs = nothing 'conn.close 'set conn = nothing </ul> </body> </html> 64/97

65 4a lezione A scuola con PC Open Web Developer ASP di Antonio Volpon 1 Gestire un elenco di foto: la paginazione iamo arrivati alla fine del nostro viaggio all interno del mondo ASP. Nelle prime due puntate del corso (pubblicate nei numeri di novembre e dicembre di PC Open) abbiamo avuto modo di capire l importanza di questa piattaforma per lo sviluppo di siti Web, ed evidenziato le differenze rispetto a un sito statico. Nel corso della terza puntata (pubblicata nello scorso numero) abbiamo invece apprezzato l uso di ASP insieme alle basi di dati, così da sfruttarne appieno le potenzialità. Dopo aver introdotto il ruolo dei database relazionali e la sintassi del linguaggio SQL, siamo passati ad affrontare un esempio pratico: costruire una galleria di immagini per il committente del nostro sito, il signor Mario Rossi. Ci siamo lasciati dopo aver costruito una pagina contenente un campo dal quale effettuare la ricerca nel database delle S foto (figura 1). Il risultato è un elenco di foto che soddisfano il criterio e da cui è possibile aprire la foto che interessa. In questa ultima puntata cercheremo come prima cosa di migliorare il modo con cui viene presentata la lista di foto, introducendo un meccanismo di paginazione. Passeremo poi ad aiutare Mario Rossi nel gestire on line il proprio catalogo di foto, creando una maschera di amministrazione (protetta da password) con la quale avrà la possibilità di inserire, modificare ed eliminare le nuove foto che scatterà nel corso delle prossime stagioni. Per farlo completeremo le nostre conoscenze del linguaggio SQL introducendo la sintassi che consente di introdurre, aggiornare e cancellare i record di una tabella. Suddividere un elenco Abbiamo lasciato un Mario Rossi soddisfatto grazie alla 1 65/97 IL CALENDARIO DELLE LEZIONI Lezione 1: Lezione 4: Da sito statico a dinamico Gestire un elenco di fotografie Lezione 2: L inserimento Portare il sito sul server La modifica Lezione 3: ASP e i database relazionali La cancellazione 2

66 4 a lezione 3 per definire il numero di elementi da far comparire in ogni pagina di risultati. Questo è quello che si ottiene con la riga seguente: rs.pagesize = pagsize pag=2 (quando selezioniamo la seconda pagina) oppure pag=3 (per la terza pagina) e così via. possibilità di effettuare ricerche nel proprio sito. Ben presto Mario si è però accorto che all aumentare del numero di foto nel proprio archivio on line, l elenco comincia a diventare decisamente lungo e poco presentabile ai visitatori del suo sito (figura 2). Per questo motivo è interessato a capire se esiste un modo per suddividere l elenco in più pagine, un po come si comporta Google (figura 3) quando visualizza i risultati di una ricerca. Potevamo negare a Mario questa caratteristica da inserire nel suo amato sito? Certamente no, e con alcuni semplici interventi, l aspetto della pagina di risposta diventerà quello rappresentato in figura 4. Come potete notare, in fondo alla pagina è presente un elenco di numeri, che rappresentano in gergo la paginazione, ovvero il meccanismo utilizzato dagli utenti per spostarsi tra le diverse pagine dell elenco. Per poter realizzare questa caratteristica è necessario modificare il file di partenza, così da ottenere quanto riportato nel listato 1 (elencofoto2.asp). La procedura nel dettaglio Vediamo operativamente le aree su cui intervenire. Il recordset dispone di un metodo, PageSize, che può essere usato 4 Il valore di pagsize è definito una volta per tutte a inizio pagina, così da rendere più semplici eventuali variazioni future. A questo punto è possibile aprire l oggetto recordset, come sempre, ma per farlo utilizziamo una costante diversa per il tipo cursore. Utilizziamo infatti una sintassi del tipo: rs.open sql2, conn, adopenstatic, adlockreadonly Per suddividere la navigazione in pagine, non è più sufficiente utilizzare un recordset di tipo Forward Only, che può essere navigato solo in un senso (cioè da un record al successivo). Un recordset di tipo OpenStatic è una copia speculare dei dati in tabella, che non possono essere modificati o eliminati, ma con il pregio di essere molto veloce durante le letture. Poiché il nostro scopo è solo quello di visualizzare i dati, questa soluzione rappresenta il migliore compromesso. Se osservate con attenzione il codice vedrete che la costante adopenstatic è stata definita all inizio della pagina, con valore 3. Avremmo potuto utilizzare direttamente questo valore nel codice, ma la nostra soluzione è sicuramente più ordinata ed elegante. Dopo aver aperto il record è il momento di informare il recordset riguardo il numero di pagina che vogliamo visualizzare. All inizio sarà sicuramente la prima pagina, ma successivamente sarà l utente, selezionando i link della paginazione, a indicare dove spostarsi. Per vedere come questo si verifica è necessario osservare la pagina dal browser e poi capire cosa c è scritto nel codice. Spostatevi per prima cosa con il mouse sopra i link che formano la paginazione e osservate l indirizzo che compare nella barra di stato del browser (la barra di stato è rappresentata dalla fascia nella parte bassa della finestra del browser). Come potete notare, l indirizzo ha una forma del tipo: In particolare, quando selezioniamo un link viene caricata sempre la pagina elencofoto2.asp, ma sarà il parametro pag (che indica il numero di pagina con le foto da visualizzare) a cambiare di volta in volta. È lecito quindi aspettarsi che all interno del codice della pagina, da qualche parte, venga estratto il valore del parametro pag e che questo venga utilizzato per richiedere al recordset la pagina corrispondente. Ed è in effetti quello che si verifica in questa parte del codice: 'Estrae il numero di pagina pagnum = cint(request.query String("pag")) If pagnum = 0 Then pagnum = 1 Lo scopo di questa parte di codice è chiaro: viene estratto il valore della pagina da visualizzare e assegnato alla variabile pagnum. La prima volta che il visitatore richiede la pagina, tuttavia, non specifica alcun numero e in questo caso (come si vede nella seconda linea di codice), l utente viene diretto alla prima pagina. La riga: rs.absolutepage = pagnum assegna il valore appena estratto al metodo AbsolutePage del recorset: lo scopo è proprio quello di restituire la pagina voluta. Queste sono tutte le informazioni necessarie al recordset per posizionarsi sulla pagina corretta. L ultima modifica di cui abbiamo bisogno per gestire più pagine di foto riguarda il ciclo che estrae i record. In questo caso non è sufficiente visualizzare, come abbiamo fatto finora, tutti i record presenti nel recordset (utilizzando un ciclo do until rec.eof). Vogliamo invece limitare il numero di record presentati a quelli che compongono la pagina: possiamo allora utilizzare una sintassi di questo tipo: for i = 1 to pagesize <visualizza i dati della foto> next 66/97

Lezione II: Web server e ambiente di lavoro

Lezione II: Web server e ambiente di lavoro Lezione II: Web server e ambiente di lavoro In questa lezione, in laboratorio, si mostrerà quali sono i passi necessari per creare ed eseguire una pagina ASP. Brevemente, verrà fatto anche vedere, come

Dettagli

WebDeveloper ASP. Proseguiamo il filone aperto. 1 Da sito statico a dinamico. 1 a lezione. A scuola con PC Open IL CALENDARIO DELLE LEZIONI

WebDeveloper ASP. Proseguiamo il filone aperto. 1 Da sito statico a dinamico. 1 a lezione. A scuola con PC Open IL CALENDARIO DELLE LEZIONI 1 a lezione A scuola con PC Open WebDeveloper ASP 1 Da sito statico a dinamico Proseguiamo il filone aperto a inizio d'anno con il corso Webmaster per affrontare questa volta la progettazione di pagine

Dettagli

Corso di PHP. Prerequisiti. 1 - Introduzione

Corso di PHP. Prerequisiti. 1 - Introduzione Corso di PHP 1 - Introduzione 1 Prerequisiti Conoscenza HTML Principi di programmazione web Saper progettare un algoritmo Saper usare un sistema operativo Compilazione, link, esecuzione di programmi Conoscere

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

Il calendario di Windows Vista

Il calendario di Windows Vista Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative

Dettagli

File, Modifica, Visualizza, Strumenti, Messaggio

File, Modifica, Visualizza, Strumenti, Messaggio Guida installare account in Outlook Express Introduzione Questa guida riguarda di sicuro uno dei programmi maggiormente usati oggi: il client di posta elettronica. Tutti, ormai, siamo abituati a ricevere

Dettagli

19. LA PROGRAMMAZIONE LATO SERVER

19. LA PROGRAMMAZIONE LATO SERVER 19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici

Dettagli

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate MODULO BASE Quanto segue deve essere rispettato se si vuole che le immagini presentate nei vari moduli corrispondano, con buona probabilità, a quanto apparirà nello schermo del proprio computer nel momento

Dettagli

STUDIUM.UniCT Tutorial per gli studenti

STUDIUM.UniCT Tutorial per gli studenti STUDIUM.UniCT Tutorial per gli studenti Studium.UniCT Tutorial Studenti v. 6 06/03/2014 Pagina 1 Sommario 1. COS È STUDIUM.UniCT... 3 2. COME ACCEDERE A STUDIUM.UniCT... 3 3. COME PERSONALIZZARE IL PROFILO...

Dettagli

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare

Dettagli

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

LA GESTIONE DELLE VISITE CLIENTI VIA WEB LA GESTIONE DELLE VISITE CLIENTI VIA WEB L applicazione realizzata ha lo scopo di consentire agli agenti l inserimento via web dei dati relativi alle visite effettuate alla clientela. I requisiti informatici

Dettagli

Cominciamo dalla barra multifunzione, ossia la struttura a schede che ha sostituito la barra dei menu e la barra delle icone (Figura 1).

Cominciamo dalla barra multifunzione, ossia la struttura a schede che ha sostituito la barra dei menu e la barra delle icone (Figura 1). La barra multifunzione La barra multifunzione e il pulsante Microsoft Office Se avete lavorato per tanti anni con la suite da ufficio Office, questa nuova versione 2007 può disorientarvi davvero molto.

Dettagli

4.1.1.1 APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

4.1.1.1 APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO 4.1 PER INIZIARE 4.1.1 PRIMI PASSI COL FOGLIO ELETTRONICO 4.1.1.1 APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO L icona del vostro programma Excel può trovarsi sul desktop come in figura. In questo caso basta

Dettagli

GUIDA ALL ACQUISTO DELLE FOTO

GUIDA ALL ACQUISTO DELLE FOTO 1 GUIDA ALL ACQUISTO DELLE FOTO Gentile Utente questa guida vuole offrirle un aiuto nella selezione e nell acquisto delle foto dal nostro carrello elettronico. La invitiamo a Stampare questo breve manuale

Dettagli

Innanzitutto andiamo sul sito http://www.dropbox.com/ ed eseguiamo il download del programma cliccando su Download Dropbox.

Innanzitutto andiamo sul sito http://www.dropbox.com/ ed eseguiamo il download del programma cliccando su Download Dropbox. Oggi parlerò di qualcosa che ha a che fare relativamente con la tecnica fotografica, ma che ci può dare una mano nella gestione dei nostri archivi digitali, soprattutto nel rapporto professionale con altre

Dettagli

Il web server Apache Lezione n. 3. Introduzione

Il web server Apache Lezione n. 3. Introduzione Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar

Dettagli

Esercitazione n. 10: HTML e primo sito web

Esercitazione n. 10: HTML e primo sito web + Strumenti digitali per la comunicazione A.A 0/4 Esercitazione n. 0: HTML e primo sito web Scopo: Creare un semplice sito web con Kompozer. Il sito web è composto da una home page, e da altre due pagine

Dettagli

SICURF@D: istruzioni per l uso

SICURF@D: istruzioni per l uso : istruzioni per l uso : istruzioni per l uso Indice 1. Premessa 2 2. La registrazione 2 3. L accesso all area per utenti registrati 2 4. La consultazione dei manuali 3 5. L utilizzo degli strumenti di

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

Visual basic base Lezione 01. L'ambiente di sviluppo

Visual basic base Lezione 01. L'ambiente di sviluppo L'ambiente di sviluppo L'ambiente di sviluppo Visual basic è un linguaggio di programmazione Microsoft. In questo corso prenderemo in considerazione, l'ultima versione. net di questo linguaggio. Microsoft

Dettagli

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS CONTENUTI: CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS Creazione database vuoto Creazione tabella Inserimento dati A) Creazione di un database vuoto Avviamo il programma Microsoft Access. Dal menu

Dettagli

Esercizi di JavaScript

Esercizi di JavaScript Esercizi di JavaScript JavaScript JavaScript é un linguaggio di programmazione interpretato e leggero, creato dalla Netscape. E' presente a patire da Netscape 2 in tutti i browser ed é dunque il linguaggio

Dettagli

2.2.2.1 Identificare le diverse parti di una finestra: barra del titolo, barra dei menu, barra degli strumenti, barra di stato, barra di scorrimento.

2.2.2.1 Identificare le diverse parti di una finestra: barra del titolo, barra dei menu, barra degli strumenti, barra di stato, barra di scorrimento. Uso del computer e gestione dei file 57 2.2.2.1 Identificare le diverse parti di una finestra: barra del titolo, barra dei menu, barra degli strumenti, barra di stato, barra di scorrimento. All interno

Dettagli

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8 Manuale servizio Webmail Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8 Introduzione alle Webmail Una Webmail è un sistema molto comodo per consultare la

Dettagli

3. Installare Wamp Server

3. Installare Wamp Server E107 WEB SYSTEM Corso on line di progettazione siti dinamici: livello base R E A L I Z Z A Z I O N E D I 3. Installare Wamp Server By e107 Italian Team Sito web:http://www.e107italia.org Contatto: admin@e107italia.org

Dettagli

Guida per la registrazione alla piattaforma di Gestione dei Corsi per il Consulente Tecnico Telematico

Guida per la registrazione alla piattaforma di Gestione dei Corsi per il Consulente Tecnico Telematico Guida per la registrazione alla piattaforma di Gestione dei Corsi per il Consulente Tecnico Telematico Maribel Maini Indi ndice ce: Procedura di registrazione alla piattaforma e di creazione del proprio

Dettagli

Capitolo 4 Pianificazione e Sviluppo di Web Part

Capitolo 4 Pianificazione e Sviluppo di Web Part Capitolo 4 Pianificazione e Sviluppo di Web Part Questo capitolo mostra come usare Microsoft Office XP Developer per personalizzare Microsoft SharePoint Portal Server 2001. Spiega come creare, aggiungere,

Dettagli

GESGOLF SMS ONLINE. Manuale per l utente

GESGOLF SMS ONLINE. Manuale per l utente GESGOLF SMS ONLINE Manuale per l utente Procedura di registrazione 1 Accesso al servizio 3 Personalizzazione della propria base dati 4 Gestione dei contatti 6 Ricerca dei contatti 6 Modifica di un nominativo

Dettagli

Client - Server. Client Web: il BROWSER

Client - Server. Client Web: il BROWSER Client - Server Client Web: il BROWSER Il client Web è un applicazione software che svolge il ruolo di interfaccia fra l utente ed il WWW, mascherando la complessità di Internet. Funzioni principali Inviare

Dettagli

MANUALE EDICOLA 04.05

MANUALE EDICOLA 04.05 MANUALE EDICOLA 04.05 Questo è il video che si presenta avviando il programma di Gestione Edicola. Questo primo video è relativo alle operazioni di carico. CARICO Nello schermo di carico, in alto a sinistra

Dettagli

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Tecnologie informatiche ACCESSO REMOTO CON WINDOWS Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Un esempio di tale servizio

Dettagli

Guida informatica per l associazione #IDEA

Guida informatica per l associazione #IDEA Guida informatica per l associazione #IDEA Questa guida vi spiegherà come utilizzare al meglio gli strumenti informatici che utilizza l associazione #IDEA in modo da facilitare il coordinamento con tutti

Dettagli

MANUALE D USO DELLA PIATTAFORMA ITCMS

MANUALE D USO DELLA PIATTAFORMA ITCMS MANUALE D USO DELLA PIATTAFORMA ITCMS MANULE D USO INDICE 1. INTRODUZIONE... 2 2. ACCEDERE ALLA GESTIONE DEI CONTENUTI... 3 3. GESTIONE DEI CONTENUTI DI TIPO TESTUALE... 4 3.1 Editor... 4 3.2 Import di

Dettagli

COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL)

COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL) COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL) Cos è l AOL? Pag. 2 Come inviare una richiesta AOL Pag. 3 La risposta dell assistenza Pag. 5 Come rispondere ad una risposta AOL Pag. 7 Ulteriori nozioni

Dettagli

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti. SH.MedicalStudio Presentazione SH.MedicalStudio è un software per la gestione degli studi medici. Consente di gestire un archivio Pazienti, con tutti i documenti necessari ad avere un quadro clinico completo

Dettagli

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti Potete immaginare un ufficio senza archivio? Sarebbe un inferno. Dover rintracciare

Dettagli

5. Fondamenti di navigazione e ricerca di informazioni sul Web

5. Fondamenti di navigazione e ricerca di informazioni sul Web 5. Fondamenti di navigazione e ricerca di informazioni sul Web EIPASS Junior SCUOLA PRIMARIA Pagina 43 di 47 In questo modulo sono trattati gli argomenti principali dell universo di Internet, con particolare

Dettagli

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Il software per gli esami ICON può essere eseguito su qualunque computer dotato di Java Virtual Machine aggiornata.

Dettagli

Introduzione. Alberto Fortunato alberto.fortunato@gmail.com. www.albertofortunato.com Pag. 1 di 137

Introduzione. Alberto Fortunato alberto.fortunato@gmail.com. www.albertofortunato.com Pag. 1 di 137 Introduzione Il software Gestione magazzino è stato realizzato con l intenzione di fornire uno strumento di apprendimento per chi intendesse cominciare ad utilizzare Access 2010 applicando le tecniche

Dettagli

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo Creazione di moduli Creazione di moduli Che cos'è un modulo? Un elenco di domande accompagnato da aree in cui è possibile scrivere le risposte, selezionare opzioni. Il modulo di un sito Web viene utilizzato

Dettagli

Come modificare la propria Home Page e gli elementi correlati

Come modificare la propria Home Page e gli elementi correlati Come modificare la propria Home Page e gli elementi correlati Versione del documento: 3.0 Ultimo aggiornamento: 2006-09-15 Riferimento: webmaster (webmaster.economia@unimi.it) La modifica delle informazioni

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Leggere un messaggio. Copyright 2009 Apogeo

Leggere un messaggio. Copyright 2009 Apogeo 463 Leggere un messaggio SyllabuS 7.6.3.3 Per contrassegnare un messaggio selezionato puoi fare clic anche sulla voce di menu Messaggio > Contrassegna messaggio. Marcare, smarcare un messaggio I messaggi

Dettagli

NAVIGAORA HOTSPOT. Manuale utente per la configurazione

NAVIGAORA HOTSPOT. Manuale utente per la configurazione NAVIGAORA HOTSPOT Manuale utente per la configurazione NAVIGAORA Hotspot è l innovativo servizio che offre ai suoi clienti accesso ad Internet gratuito, in modo semplice e veloce, grazie al collegamento

Dettagli

Manuale Utente Amministrazione Trasparente GA

Manuale Utente Amministrazione Trasparente GA Manuale Utente GA IDENTIFICATIVO DOCUMENTO MU_AMMINISTRAZIONETRASPARENTE-GA_1.0 Versione 1.0 Data edizione 03.05.2013 1 Albo Pretorio On Line TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione

Dettagli

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia Scuola Digitale Manuale utente Copyright 2014, Axios Italia 1 SOMMARIO SOMMARIO... 2 Accesso al pannello di controllo di Scuola Digitale... 3 Amministrazione trasparente... 4 Premessa... 4 Codice HTML

Dettagli

COME ELIMINARE PARTI DEL TEMPLATE IN PAGINE SINGOLE

COME ELIMINARE PARTI DEL TEMPLATE IN PAGINE SINGOLE COME ELIMINARE PARTI DEL TEMPLATE IN PAGINE SINGOLE Con questa guida impareremo come eliminare delle singole zone del template che utilizziamo all'interno di una pagina specifica. Questo metodo torna utile

Dettagli

Circolari e lettere da Word con anagrafiche e indirizzi da Metodo

Circolari e lettere da Word con anagrafiche e indirizzi da Metodo Circolari e lettere da Word con anagrafiche e indirizzi da Metodo Metodo sfrutta tutte le potenzialità messe a disposizione da Microsoft Windows integrandosi perfettamente su tale piattaforma e permettendo

Dettagli

Figura 1 Le Icone dei file di Excel con e senza macro.

Figura 1 Le Icone dei file di Excel con e senza macro. 18 Le macro Le macro rappresentano una soluzione interessante per automatizzare e velocizzare l esecuzione di operazioni ripetitive. Le macro, di fatto, sono porzioni di codice VBA (Visual Basic for Applications)

Dettagli

GUIDA ALL USO DEL PANNELLO DI GESTIONE SITO WEB

GUIDA ALL USO DEL PANNELLO DI GESTIONE SITO WEB GUIDA ALL USO DEL PANNELLO DI GESTIONE SITO WEB Copyright 2014 Wolters Kluwer Italia Srl 1 Sommario 1 Come accedere al Pannello di gestione... 4 2 del Pannello di gestione del sito web... 5 3 delle sezioni...

Dettagli

MAUALE PIATTAFORMA MOODLE

MAUALE PIATTAFORMA MOODLE MAUALE PIATTAFORMA MOODLE La piattaforma moodle ci permette di salvare e creare contenuti didattici. Dal menù principale è possibile: inviare dei messaggi agli altri docenti che utilizzano la piattaforma:

Dettagli

Alla scoperta della nuova interfaccia di Office 2010

Alla scoperta della nuova interfaccia di Office 2010 Alla scoperta della nuova interfaccia di Office 2010 Una delle novità più eclatanti della versione 2007 era la nuova interfaccia con la barra multifunzione. Office 2010 mantiene questa filosofia di interfaccia

Dettagli

GUIDA STUDENTI HOMEPAGE DEI CORSI ON-LINE

GUIDA STUDENTI HOMEPAGE DEI CORSI ON-LINE GUIDA STUDENTI Benvenuti sulla piattaforma Des-K, basata su Moodle. Di seguito una breve introduzione alla navigazione tra i contenuti e le attività didattiche dei corsi on-line e una panoramica sui principali

Dettagli

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014 LUdeS Informatica 2 EXCEL Seconda parte AA 2013/2014 STAMPA Quando si esegue il comando FILE STAMPA, Excel manda alla stampante tutte le celle del foglio di lavoro corrente che hanno un contenuto. Il numero

Dettagli

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004 MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004 PRELIMINARE - Avete digitato la password che Vi è stata attribuita e siete entrati nell area riservata all AMMINISTRAZIONE del Vostro

Dettagli

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Guida Joomla. di: Alessandro Rossi, Flavio Copes Guida Joomla di: Alessandro Rossi, Flavio Copes Grafica e template 1. 15. La grafica e i template Personalizzare l'aspetto del sito aggiungendo nuovi template e customizzandoli 2. 16. Personalizzare il

Dettagli

tommaso.iacomino@gmail.com INTERNET EXPLORER Guida introduttiva CAPITOLO 1 Fig. 1

tommaso.iacomino@gmail.com INTERNET EXPLORER Guida introduttiva CAPITOLO 1 Fig. 1 INTERNET EXPLORER Guida introduttiva CAPITOLO 1 Fig. 1 IMPORTANTE: forse non visualizzate questa barra, se così fosse usiamo questa procedura: posizioniamo il cursore sulla parte vuota tasto destro del

Dettagli

Database 1 biblioteca universitaria. Testo del quesito

Database 1 biblioteca universitaria. Testo del quesito Database 1 biblioteca universitaria Testo del quesito Una biblioteca universitaria acquista testi didattici su indicazione dei professori e cura il prestito dei testi agli studenti. La biblioteca vuole

Dettagli

3.5.1.1 Aprire, preparare un documento da utilizzare come documento principale per una stampa unione.

3.5.1.1 Aprire, preparare un documento da utilizzare come documento principale per una stampa unione. Elaborazione testi 133 3.5 Stampa unione 3.5.1 Preparazione 3.5.1.1 Aprire, preparare un documento da utilizzare come documento principale per una stampa unione. Abbiamo visto, parlando della gestione

Dettagli

Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento.

Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento. Guida all uso del sito E Commerce Axial Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento. Innanzitutto,

Dettagli

Come masterizzare dischi con Nero 11

Come masterizzare dischi con Nero 11 Come masterizzare dischi con Nero 11 Non c è dubbio che Nero è diventato un sinonimo di masterizzatore di dischi, data la lunga esperienza sul mercato. Molte persone pensano in questo programma nel momento

Dettagli

Per accedere clicca su START o AVVIO (in basso a sinistra sul tuo schermo), poi su PROGRAMMI, ACCESSORI e infine su BLOCCO NOTE.

Per accedere clicca su START o AVVIO (in basso a sinistra sul tuo schermo), poi su PROGRAMMI, ACCESSORI e infine su BLOCCO NOTE. Cos'è l'html HTML è una sigla che viene da una frase inglese che vuol dire: " Linguaggio di contrassegno di ipertesti" (Hyper Text Markup Language) L'Html non è un vero e proprio linguaggio di programmazione,

Dettagli

Guida all uso. Esso sarà riportato nell intestazione. Vediamo:

Guida all uso. Esso sarà riportato nell intestazione. Vediamo: faxm@il è un applicazione che permette agli utenti dei sistemi di telefonia IP di inviare, ricevere e gestire fax. Il tradizionale sistema di fax è ormai superato. Con faxm@il non riceviamo né spediamo

Dettagli

GUIDA UTENTE PRIMA NOTA SEMPLICE

GUIDA UTENTE PRIMA NOTA SEMPLICE GUIDA UTENTE PRIMA NOTA SEMPLICE (Vers. 2.0.0) Installazione... 2 Prima esecuzione... 5 Login... 6 Funzionalità... 7 Prima Nota... 8 Registrazione nuovo movimento... 10 Associazione di file all operazione...

Dettagli

Guida alla registrazione on-line di un DataLogger

Guida alla registrazione on-line di un DataLogger NovaProject s.r.l. Guida alla registrazione on-line di un DataLogger Revisione 3.0 3/08/2010 Partita IVA / Codice Fiscale: 03034090542 pag. 1 di 17 Contenuti Il presente documento è una guida all accesso

Dettagli

Guida rapida all uso di Moodle per gli studenti

Guida rapida all uso di Moodle per gli studenti Guida rapida all uso di Moodle per gli studenti Introduzione La piattaforma utilizzata per le attività a distanza è Moodle, un software per la gestione di corsi on-line. Per chi accede come studente, essa

Dettagli

Vi ricordiamo che per qualsiasi problema tecnico o informazione potete contattare info@eduitalia.org oppure Francesco al 3357761103.

Vi ricordiamo che per qualsiasi problema tecnico o informazione potete contattare info@eduitalia.org oppure Francesco al 3357761103. Gentili Associati, in questi ultimi tempi abbiamo lavorato per sviluppare un software capace di far gestire direttamente alle scuole la propria presenza sul sito di Eduitalia. Tramite la registrazione

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Lande Immortali: Riepilogo dello Stato di Avanzamento del Progetto

Lande Immortali: Riepilogo dello Stato di Avanzamento del Progetto Lande Immortali: Riepilogo dello Stato di Avanzamento del Progetto Progetto a cura di Martino Michele Matricola: 0124000461 Miglio Stefano Matricola: 0124000462 Obiettivi Iniziali Si intende realizzare

Dettagli

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo GRUPPO CAMBIELLI Posta elettronica (Webmail) Consigli di utilizzo Questo sintetico manuale ha lo scopo di chiarire alcuni aspetti basilari per l uso della posta elettronica del gruppo Cambielli. Introduzione

Dettagli

CTVClient. Dopo aver inserito correttamente i dati, verrà visualizzata la schermata del tabellone con i giorni e le ore.

CTVClient. Dopo aver inserito correttamente i dati, verrà visualizzata la schermata del tabellone con i giorni e le ore. CTVClient Il CTVClient è un programma per sistemi operativi Windows che permette la consultazione e la prenotazione delle ore dal tabellone elettronico del Circolo Tennis Valbisenzio. Per utilizzarlo è

Dettagli

Corso basi di dati Installazione e gestione di PWS

Corso basi di dati Installazione e gestione di PWS Corso basi di dati Installazione e gestione di PWS Gianluca Di Tomassi Email: ditomass@dia.uniroma3.it Università di Roma Tre Cosa è PWS? Il Personal Web Server altro non è che una versione ridotta del

Dettagli

Office 2007 Lezione 02. Le operazioni più

Office 2007 Lezione 02. Le operazioni più Le operazioni più comuni Le operazioni più comuni Personalizzare l interfaccia Creare un nuovo file Ieri ci siamo occupati di descrivere l interfaccia del nuovo Office, ma non abbiamo ancora spiegato come

Dettagli

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. Con l utilizzo delle procedure di iscrizione on line la società organizzatrice ha a disposizione tutti

Dettagli

MANUALE PARCELLA FACILE PLUS INDICE

MANUALE PARCELLA FACILE PLUS INDICE MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella

Dettagli

Istruzioni per installare EpiData e i files dati ad uso di NetAudit

Istruzioni per installare EpiData e i files dati ad uso di NetAudit Istruzioni per installare EpiData a cura di Pasquale Falasca e Franco Del Zotti Brevi note sull utilizzo del software EpiData per una raccolta omogenea dei dati. Si tratta di istruzioni passo-passo utili

Dettagli

SERVIZIO DI MESSAGGISTICA ALL UTENTE. Manuale per l operatore

SERVIZIO DI MESSAGGISTICA ALL UTENTE. Manuale per l operatore SERVIZIO DI MESSAGGISTICA ALL UTENTE Manuale per l operatore rev. 02 giugno 2010 SOMMARIO COME USARE IL PROGRAMMA PER LA MESSAGGISTICA...3 COSA BISOGNA FARE PRIMA DI INIZIARE A UTILIZZARE IL PROGRAMMA...3

Dettagli

Uso dei modelli/template

Uso dei modelli/template Uso dei modelli/template Il modello (o template, in inglese) non è altro che un normale file di disegno, generalmente vuoto, cioè senza alcuna geometria disegnata al suo interno, salvato con l estensione.dwt.

Dettagli

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1 Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ Versione 1.1 Autore Antonio Barbieri, antonio.barbieri@gmail.com Data inizio compilazione 11 maggio 2009 Data revisione 14 maggio 2009 Sommario

Dettagli

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. *+33(GLWRU GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. Il programma si basa su un architettura di tasti funzionali presenti

Dettagli

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO 1 Installazione e requisiti per il corretto funzionamento del sito: L istallazione è possibile sui più diffusi sistemi operativi. Il pacchetto

Dettagli

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment Obiettivi d esame PHP Developer Fundamentals on MySQL Environment 1.0 Ambiente di sviluppo 1.1 Web server e database MySQL Comprendere la definizione dei processi che si occupano di fornire i servizi web

Dettagli

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE Il software ideale per la gestione delle prenotazioni GUIDA UTENTE Presentazione... 2 Installazione... 3 Prima esecuzione... 6 Registrazione del programma... 8 Inserimento Immobile... 9 Inserimento proprietario...

Dettagli

Esercizio data base "Biblioteca"

Esercizio data base Biblioteca Rocco Sergi Esercizio data base "Biblioteca" Database 2: Biblioteca Testo dell esercizio Si vuole realizzare una base dati per la gestione di una biblioteca. La base dati conterrà tutte le informazioni

Dettagli

STAMPA DI UNA PAGINA SEMPLICE

STAMPA DI UNA PAGINA SEMPLICE Pagina 11 copiati nel proprio sistema (disco fisso o floppy). Questa operazione è detta download o scaricamento. Il modo più semplice per effettuare un download di un file (a meno che non sia specificato

Dettagli

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta. Configurazione Account di posta dell Università di Ferrara con il Eudora email Eudora email può

Dettagli

GUIDA PER IL DOCENTE ALL UTILIZZO DELL APPLICATIVO ONLINE E PORTFOLIO

GUIDA PER IL DOCENTE ALL UTILIZZO DELL APPLICATIVO ONLINE E PORTFOLIO GUIDA PER IL DOCENTE ALL UTILIZZO DELL APPLICATIVO ONLINE E PORTFOLIO http://eportfolio.tqmproject.eu Progetto "TQM Agreement n 2011 1 IT1 LEO05 01873; CUP G72F11000050006 1 SOMMARIO PREMESSA... 3 PAGINA

Dettagli

DOCUMENTO ESERCITAZIONE ONENOTE. Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida

DOCUMENTO ESERCITAZIONE ONENOTE. Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida MICROSOFT OFFICE ONENOTE 2003 AUMENTA LA PRODUTTIVITÀ CONSENTENDO AGLI UTENTI L ACQUISIZIONE COMPLETA, L ORGANIZZAZIONE EFFICIENTE E IL RIUTILIZZO

Dettagli

GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0)

GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0) ------------------------------------------------- GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0) GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0)... 1 Installazione Billiards Counter... 2 Primo avvio e configurazione

Dettagli

5-1 FILE: CREAZIONE NUOVO DOCUMENTO

5-1 FILE: CREAZIONE NUOVO DOCUMENTO Capittol lo 5 File 5-1 FILE: CREAZIONE NUOVO DOCUMENTO In Word è possibile creare documenti completamente nuovi oppure risparmiare tempo utilizzando autocomposizioni o modelli, che consentono di creare

Dettagli

SITO DI ZONA WWW.AGESCIANCONA.ORG

SITO DI ZONA WWW.AGESCIANCONA.ORG SITO DI ZONA WWW.AGESCIANCONA.ORG Questa è come si presenta la Home page del sito. in questo documento vengono descritte le varie sezioni e come utilizzare alcune funzionalità Pagina 1 di 19 Menù principale

Dettagli

FPf per Windows 3.1. Guida all uso

FPf per Windows 3.1. Guida all uso FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete

Dettagli

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template. I TEMI PREDEFINITI (TEMPLATE) Scelta del tema I temi predefiniti di wordpress sono la base di un sito che usa un utente che per ragioni pratiche o per incapacità non può creare un sito usando solo codice

Dettagli

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI Pagina 1 UN SISTEMA DI NEWS Sommario UN SISTEMA DI NEWS...1 Introduzione...2 Scelgo l'area su cui operare...3 Un minimo di teoria...3 Creo le Pagine...4 Definizione dello Schedario Novità...6 Compilo la

Dettagli

Office 2007 Lezione 08

Office 2007 Lezione 08 Word: gli stili veloci e i temi Da questa lezione, iniziamo ad occuparci delle innovazioni che riguardano specificamente Word. Cominceremo parlando di stili e temi. Nella filosofia di questo nuovo Word,

Dettagli

Mini guida per il corretto posizionamento dei banner, la scelta dei formati e qualche piccolo consiglio utile all ottimizzazione dei guadagni.

Mini guida per il corretto posizionamento dei banner, la scelta dei formati e qualche piccolo consiglio utile all ottimizzazione dei guadagni. Mini guida per il corretto posizionamento dei banner, la scelta dei formati e qualche piccolo consiglio utile all ottimizzazione dei guadagni. Questa mini guida non vuole essere un tutorial da prendere

Dettagli

Guida all utilizzo di Moodle per gli studenti

Guida all utilizzo di Moodle per gli studenti Guida all utilizzo di Moodle per gli studenti 1 Premessa La piattaforma utilizzata per le attività a distanza è Moodle, un software per la gestione di corsi online. Dal punto di vista dello studente, si

Dettagli

Corso basi di dati Introduzione alle ASP

Corso basi di dati Introduzione alle ASP Corso basi di dati Introduzione alle ASP Gianluca Di Tomassi Email: ditomass@dia.uniroma3.it Università di Roma Tre Web statico e Web interattivo In principio il Web era una semplice collezione di pagine

Dettagli

GUIDA UTENTE WEB PROFILES

GUIDA UTENTE WEB PROFILES GUIDA UTENTE WEB PROFILES GUIDA UTENTE WEB PROFILES... 1 Installazione... 2 Primo avvio e registrazione... 5 Utilizzo di web profiles... 6 Gestione dei profili... 8 Fasce orarie... 13 Log siti... 14 Pag.

Dettagli

Manuale Utente Albo Pretorio GA

Manuale Utente Albo Pretorio GA Manuale Utente Albo Pretorio GA IDENTIFICATIVO DOCUMENTO MU_ALBOPRETORIO-GA_1.4 Versione 1.4 Data edizione 04.04.2013 1 TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione delle modifiche apportate

Dettagli