Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC...

31
Appunti facili facili di Active Server Pages “Per la carriera la conoscenza è come il latte. La data di scadenza è messa ben in evidenza sul cartone. La durata di una laurea tecnica è di circa 3 anni. Se entro quella data non sostituirete le vostre conoscenze, la vostra carriera andrà rapidamente in discesa.” --Louis Ross, CTO, Ford Motor Co. ad un gruppo di studenti universitari Prima versione A.S. 2001-2002 Ultima modifica 5.1.2004 Autori del Marconi Team: Buizza, Flora, Franzi........ Appunti facili facili di ASP Pag 1/31 Marconi Group

Transcript of Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC...

Page 1: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Appunti facili facili di

Active Server Pages

“Per la carriera la conoscenza è come il latte. La data di scadenza è messa ben in evidenza sul cartone. La durata di una laurea tecnica è di circa 3 anni. Se entro quella data non sostituirete le vostre conoscenze, la vostra carriera andrà rapidamente in discesa.”

--Louis Ross, CTO, Ford Motor Co. ad un gruppo di studenti universitari

Prima versione A.S. 2001-2002 Ultima modifica 5.1.2004 Autori del Marconi Team: Buizza, Flora, Franzi........

Appunti facili facili di ASP Pag 1/31 Marconi Group

Page 2: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Sommario Cosa vogliamo fare: .........................................................................................................................................................3 Come l’abbiamo fatto: .....................................................................................................................................................3 Cosa serve: ........................................................................................................................................................................3 Dividiamo l’attività in due Step: ...................................................................................................................................5 V.T.O.C. ..............................................................................................................................................................................5 Step 1: ................................................................................................................................................................................6

Step 1.1 Preparazione dell’ambiente........................................................................................................................6 Step 1.2 Scrittura codice HTML per Home Page.................................................................................................6 Step 1.2 Scrittura codice HTML per Elenco Classi .............................................................................................6 Step 1.3 Scrittura codice HTML Elenco Alunni di “quella” Classe....................................................................8 Step 1.4 Aggiunta nella home page del modulo per l’inserimento di una nuova classe..................................9 Step 1.5 Scrittura del codice HTML per l’inserimento di una nuova classe................................................10

Step 2: ............................................................................................................................................................................. 11 Step 2.1 Autentificazione........................................................................................................................................ 11

Fase di riconoscimento esplicito ........................................................................................................................ 11 Fase di riconoscimento implicito ........................................................................................................................ 11 Step 2.1.1 Pagina di autentificazione................................................................................................................. 11 Step 2.1.2 VerificaPassword.asp ........................................................................................................................12 Step 2.1.3 Visualizzazione delle assenze..........................................................................................................13

Step 2.2 Utilizzo di procedure ed include di file...............................................................................................15 Step 2.2.1 Modifiche da apportare, ad esempio, alla assenze.asp..............................................................15 Step 2.2.2 contenuto del file controlli.asp ......................................................................................................15

Step 2.3 Controlli di validazione client side ........................................................................................................15 Step 2.3.1 Controlli di validazione client side (Utilizzando VBScript) ......................................................15 Step 2.3.2 Controlli di validazione client side (Utilizzando JavaScript) ..................................................17

Step 2.4 Visualizzazione di valori numerici in forma analogica .......................................................................18 Step 2.5 Spedire una E-mail di conferma ........................................................................................................... 20

Appendice A Appunti SQL (Jet Microsoft) ........................................................................................................... 24 Appendice B I Database Relazionali - Esempi SQL........................................................................................... 25

1. I data base più diffusi sono: .......................................................................................................................... 25 2. Le operazioni relazionali in SQL.................................................................................................................... 25

2.1 RESTRICT (Restrizione, in passato indicata come selezione)........................................................ 25 2.2 JOIN (Giunzione) ..................................................................................................................................... 25 2.3 PROJECT (Proiezione) ............................................................................................................................. 25

3. Esempi..................................................................................................................................................................... 26 Appendice C Appunti HTML sulle FORM ............................................................................................................... 28 Appendice D Oggetti.................................................................................................................................................. 29

• Application e Session ....................................................................................................................................... 29 • Global.asa............................................................................................................................................................ 29 • Request e Response.......................................................................................................................................... 30 • Gestione degli oggetti...................................................................................................................................... 30

Appendice E Il futuro di ASP....................................................................................................................................31

Appunti facili facili di ASP Pag 2/31 Marconi Group

Page 3: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Cosa vogliamo fare: Appunti facili facili, non certo esaustivi, che posso servire da guida per la scrittura di pagine ASP (VBScript ma anche JavaScript). Il target sono alunni del quarto, quinto anno della scuola media superiore di un Istituto Tecnico industriale che sanno codificare in c language e che già si sono impratichiti con l’SQL di Access. Il Visual Basic lo conoscono in modo non sistematico. Questo documento potrebbe anche essere visto come un manuale operativo da utilizzare non solo durante le esercitazioni ma anche durante le verifiche formali. E’ solo l’inizio, ma con un poco di pazienza e di molta autoistruzione sarà possibile fare un lavoro più completo. Per ora non è gestito nè il carrello, nè le transazioni sicure, ma si accenna alla autentificazione dell’accesso, alla redirezione e alle variabili di Applicazione e di Sessione. Piano piano questo documento crescerà con l’apporto di tutti, docenti, alunni, ex alunni. Ma rimarrà la “fetecchia” iniziale: facile da consultare, pieno di errori da correggere, disomogeneo in molte sue parti, ma fatto con l’amore e la disponibilità di tanti. Se qualcuno avrà imparato qualcosa avremo conseguito il nostro obiettivo.

Come l’abbiamo fatto: Abbiamo spesso “saccheggiato” la documentazione presente su Internet. L’abbiamo adattata alle nostre esigenze, spesso semplificando, e la riproponiamo a disposizione di tutti “gli spiriti liberi” che hanno:

- voglia di imparare - voglia di condividere con gli altri ciò che hanno imparato

Cosa serve: Un DBMS relazionale, noi utilizzeremo:

• Access Utilizziamo Access per:

• Definire le tabelle

• Popolare le tabelle

• Provare le Query che saranno utilizzate (SQL)

• Controllare gli inserimenti e modifiche effettuate dinamicamente

• Per le operazioni di back end

Un Data Server, noi utilizzeremo: • ODBC

Utilizziamo ODBC per: • Accedere in modo trasparente ai dati

• ODBC deve essere stato installato correttamente e deve disporre dei driver dati necessari per accedere a “quel” Data Base (origine dei dati)

Appunti facili facili di ASP Pag 3/31 Marconi Group • La connessione al DB può avvenire:

Page 4: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

definendo in ODBC il DSN di sistema, agganciando il nome logico che utilizzerò nell’applicazione al nome fisico del DataBase. (Necessita del controllo di ODBC, è facile da fare sul proprio PC ma richiede un intervento manuale sul server del Provider)

definendo direttamente nel codice ASP le caratteristiche del DataBase (DSN less, più “comodo”)

Un WEB Server, per esempio: • Microsoft Personal Web Server su Windows 95/98

• Microsoft Internet Information Server versione 3.0 o 4.0 su Windows NT Server

• Microsoft Peer Web Services Versione 3.0 su Windows NT Workstation

• ecc.

Un programma per scrivere le Pagine in .htm o .asp, per esempio: • Notepad

• Dreamweaver (N.B. UltraDev si è dimostrato di non comodo utilizzo)

• ecc

La cosa più importante: Un cervello connesso ed operativo☺

Appunti facili facili di ASP Pag 4/31 Marconi Group

Page 5: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Dividiamo l’attività in due Step: Step 1: Prove di funzionamento. • Connessione al DataBase • Prima Interrogazione • Seconda interrogazione sulla base di un valore passato dalla prima interrogazione • Inserimento di una nuova riga • Verifica dell’avvenuto inserimento •

Step 2 • Accesso ai dati solo dopo autentificazione • Per farlo utilizzeremo le Variabili di Applicazione e di Sessione e la Ridirezione • Utilizzo di procedure ed include di file • Rappresentazione analogica dei dati • E-mail spedita automaticamente • ..... eccetera. Vedi VTOC seguente e soprattutto il Sommario iniziale.

V.T.O.C.

Anagrafica(non presente)

Accessoassenze.asp

RifiutoRidirezione sulla Home page

Verifica PasswordVerificaPassword.asp

Autentificazioneautentificazione.asp

Step 2

Seconda Queryalunni.asp

Prima Queryclassi.asp

Inserimentoaggiungi.asp

Home Pagedefault.asp

Step 1

Include

V B Script Java Script

Controlli Client Side Visualizzazione valori grafici

Procedure-Funzioni Spedire una e-mail di conferma

Approfondimenti

Step 2

ASP(Appunti)

Appunti facili facili di ASP Pag 5/31 Marconi Group

Page 6: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Step 1: Prove di funzionamento. Step 1.1 Preparazione dell’ambiente

• Utilizzando Access abbiamo definito le tabelle, le relazioni, popolato le tabelle, provato le istruzioni in SQL che abbiamo intenzione di utilizzare.

• Il Server Web è installato correttamente sulla stazione Server (A casa coincide con la stessa

macchina Client, a scuola deve essere una macchina specifica, non è concettualmente corretto installare un server per ogni macchina, occhio che a questo punto anche le nostre pagine Asp devono essere “remote”.)

• Per comodità didattica scrivo il codice .html e .asp con notepad Step 1.2 Scrittura codice HTML per Home Page In default.htm: <HTML> <HEAD> <TITLE>Studi su ASP</TITLE> </HEAD> <BODY> <A HREF="http://....classi.asp">classi.asp</a> </BODY> </HTML> N.B. i puntini indicano l’indirizzo del Server Step 1.2 Scrittura codice HTML per Elenco Classi

Se questa pagina fosse stata scritta in modo statico: <html>………. <body bgcolor="#FFFF00"> <h1 align="center">Interrogazione assenze alunni </h1> <form method="post" action="alunni.asp"> <p>Classe: <select name="classe" size="1"> <option value = "1"> 1aa</option> ‘ value è la chiave, 1aa e 5ib ecc sono i campi in chiaro (associati a quella chiave) <option value = "2"> 5ib</option>

…………. </select> <input type="submit" name="vai" value="Elenco Alunni della classe"> </p> </form> ……… confezioniamo ora una pagina dinamica che preleva i volori della combobox dal data base.

Appunti facili facili di ASP Pag 6/31 Marconi Group

Page 7: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

In classi.asp (esempio con DSN definito in ODBC): <%@ LANGUAGE = VBSCRIPT %> <html> <head> <title>Interrogazione assenze alunni CLASSI </title> </head> <body bgcolor="#FFFF00"> <h1 align="center">Interrogazione assenze alunni </h1> <%' la form trasmetterà col metodo post i dati alla "alunni.asp", l'unica variabile trasmessa si chiama "classe" %> <form method="post" action="alunni.asp"> <p>Classe: <select name="classe" size="1"> <% ' Creo dinamicamente la connessione (precedentemente in ODBC ho "agganciato" il nome logico "assenze" al data base fisico) Set mycn = Server.CreateObject("ADODB.Connection") strcn = "data source=assenze" mycn.Open strcn ' Creo dinamicamente il Recordset Set rs = Server.CreateObject("ADODB.Recordset") strsql = "SELECT * FROM tcla ORDER BY anno, specializzazione, sezione" ' invoco l'esecuzione della select rs.Open strsql, mycn ' ciclo mentre ci sono righe, sono già posizionato sulla prima do until rs.EOF ' carico nella variabile dep il contenuto dei campi, notare l'utilizzo occasionale di "value" dep = rs.fields("anno").value & rs.fields("specializzazione") & rs.fields("sezione") ' scrivo il tag option contenente l'id della classe e la classe in chiaro Response.Write "<option value = " & rs.Fields("idcla") & "> " & dep & “2</option>” ' mi sposto sulla riga successiva rs.MoveNext ' fine ciclo loop ' chiudo e dealloco rs.Close mycn.Close Set rs=nothing Set mycn=nothing %> </select> <input type="submit" name="vai" value="Elenco Alunni della classe"> </p> </form> </body> </html> In classi.asp (esempio DSN less): ........ <% ' connessione DSN less ' nota che: 1) in VB si va a capo con un _ 2) Il metodo MapPath restituisce la path della cartella del server a cui "cuce" il nome del database, se il file è in una altra cartella bisogna intervenire .p.e. server.mappath("dati/assenze.mdb") Set mycn = Server.CreateObject("ADODB.Connection") str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& _ server.mappath("assenze.mdb") mycn.open str_conn .......

Appunti facili facili di ASP Pag 7/31 Marconi Group

Page 8: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Step 1.3 Scrittura codice HTML Elenco Alunni di “quella” Classe

In alunni.asp (DSN less): <%@ LANGUAGE = VBSCRIPT %> <html> <head> <title>Interrogazione assenze alunni </title> </head> <% ' N.B. ho intenzione di visualizzare nell'intestazione la classe in chiaro %> <h1 align="center">Interrogazione assenze Alunni della Classe <% ' carico nella variabile idclacerc il valore passatomi dalla classi.asp idclacerc = Request.Form("classe") ' attivo la connessione (DSN less) Set mycn = Server.CreateObject("ADODB.Connection") str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& server.mappath("assenze.mdb") mycn.open str_conn dep= " select * from tcla where idcla = " & idclacerc ' una maniera diversa di eseguire la select Set RS = mycn.Execute(dep) dep = rs.fields("anno").value & rs.fields("specializzazione") & rs.fields("sezione") Response.Write dep ' osserva: 1) ho adoperato dep sia per depositarvi la select che per estrarre dal recordset la classe in chiaro 2) ...non ho verificato se la tabella è vuota %></h1> <% ' adesso leggo gli alunni della classe '* idclacerc = Request.Form("classe") '* Set mycn = Server.CreateObject("ADODB.Connection") '* str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& server.mappath("assenze.mdb") '* mycn.open str_conn dep= " select * from talu where idcla = " & idclacerc & " order by cognome,nome" Set RS = mycn.Execute(dep) if rs.EOF then Response.Write "Nessun ALUNNO!" else %> <form method="post" action="autentificazione.asp"> <p>Alunni: <select name="alunno" size="1"> <% do until rs.EOF dep = rs.fields("cognome") & " " & rs.fields("nome") Response.Write "<option value = " & rs.Fields("idalu") & "> " & dep rs.MoveNext loop end if ' chiudo e dealloco rs.Close mycn.Close Set rs=nothing

Appunti facili facili di ASP Pag 8/31 Marconi Group

Page 9: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Set mycn=nothing ' provare se funziona togliendo i commenti con * %> </select> <input type="submit" name="vai" value="Elenco Assenze"> </p> </form> </body> </html> N.B. Funziona anche attivando le righe commentate segnate con *. Perchè ?? Step 1.4 Aggiunta nella home page del modulo per l’inserimento di una nuova classe

In default.htm: <HTML> <HEAD> <TITLE>Studi su ASP</TITLE> </HEAD> <BODY> <h1 align="center">Studi su ASP</h1> <p> </p> <A HREF="http://............../classi.asp">classi.asp</A> <br><br> <form method="post" action="aggiungi.asp" > <TABLE> <TR> <TD>Anno:</TD> <TD><INPUT TYPE="text" SIZE="1" NAME="txtAnno"></TD> </TR> <TR> <TD>Specializzazione:</TD> <TD><INPUT TYPE="text" SIZE="1" NAME="txtSpec"></TD> </TR> <TR> <TD>Sezione:</TD> <TD><INPUT TYPE="text" SIZE="1" NAME="txtSez"></TD> </TR> <TR> <TD COLSPAN="2" ALIGN="center"> <INPUT TYPE="submit" VALUE="Aggiungi"> <INPUT TYPE="reset" VALUE="Cancella"> </TD> </TR> </TABLE> </form> </BODY> </HTML>

Appunti facili facili di ASP Pag 9/31 Marconi Group

Page 10: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

N.B. • i puntini indicano l’indirizzo del Server • Basta chiamare la classi.asp per verificare l’inserimento della nuova classe. Step 1.5 Scrittura del codice HTML per l’inserimento di una nuova classe

In aggiungi.asp (DSN less): <%@ LANGUAGE = VBSCRIPT %> <html> <head> <title>Inserimento nuova classe </title> </head> <h1 align="center">Inserimento di una nuova classe</h1> <% Set mycn = Server.CreateObject("ADODB.Connection") str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& server.mappath("assenze.mdb") mycn.open str_conn depAnno = Request.Form("txtAnno") depSpec = Request.Form("txtSpec") depSez = Request.Form("txtSez") ' ATTENZIONE nessuna verifica o validazione, in un caso reale bisogna farlo!!! ‘ osservare l’uso della “&” per concatenare, dei doppi apici per chiudere il testo e del carattere”’” per delimitare le stringhe contenute nelle variabi di tipo testo (non serve se la variabile è numerica) dep ="INSERT INTO tcla (anno,specializzazione,sezione) values (" & "'" & depAnno &"','" & depSpec &"','" & depSez & "')" ' COMMENTATA inserita per verificare il funzionamento --Response.Write(dep)-- Set RS = mycn.Execute(dep) ' chiudo e dealloco ' da non utilizzare rs.Close mycn.Close Set rs=nothing Set mycn=nothing %> <a href="default.htm"> Ritorna alla home page </a> </body> </html> N.B. Non viene fatto nessun controllo di validazione sui dati in input, non viene data segnalazione di avvenuto o meno inserimento della classe, ecc.

Appunti facili facili di ASP Pag 10/31 Marconi Group

Page 11: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Step 2: Piccoli approfondimenti. Step 2.1 Autentificazione Per poter accedere ai dati delle assenze di un particolare alunno è necessario autentificarsi trattandosi di dati riservati. La soluzione può essere vista in due fasi: parole chiave password redirect

Fase di riconoscimento esplicito riconoscimento tramite password: l’utente digita la sua password, associata nel data base a quell’idAlunno, una semplice query verifica la coerenza e permette l’accesso ai dati oppure redirige alla home page.

Global.asa Variabili di Applicazione Variabili di Sessione

Fase di riconoscimento implicito una volta che l’utente è stato riconosciuto non deve più digitare la password per accedere ai suoi dati L’Applicazione, p.e. la nostra “Gestione Assenze”, ha le sue variabili. I vari utenti che attivano la nostra Applicazione creano una serie di Sessioni, ognuna con le sue variabili. Tramite il file Global.asa è possibile definire le Subroutines Application_OnStart(), Session_OnStart(), Application_OnEnd(), Session_OnEnd() che possono allocare e modificare delle variabili alla partenza o alla chiusura o dell’Applicazione o della Sessione (vedi appendice).

Come vi sarete sicuramente accorti la alunni.asp non lancia la assenze.asp bensì la autentificazione.asp. ☺ N.B. Nella autentificazione.asp verifico se la variabile di sessione idAlu è stata valorizzata, questo implica che l’utente è autorizzato ad accedere ai dati dell’alunno idAlu. Se la variabile non esiste chiedo la password, verifico tramite una query i diritti di accesso, se è coerente creo la variabile di sessione idAlu ed attivo alunni.asp, altrimenti ridirigo alla Home page. Per evitare problemi verifico anche che l’idAlu autentificato coincida con l’idAlu richiesto, per impedire che una volta autentificati si possa accedere ai dati non propri.

Step 2.1.1 Pagina di autentificazione

autentificazione.asp <%@ LANGUAGE = VBSCRIPT %> <% Response.Buffer = true %> <HTML> <HEAD> <TITLE>Autentificazione</TITLE> </HEAD> <BODY> <font face="verdana" size=3>

Appunti facili facili di ASP Pag 11/31 Marconi Group

Page 12: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

<h1 >Studi su ASP AUTENTIFICAZIONE</h1><p> </p> <% idAluForm=Request.Form("alunno") ' idAlu trasmesso dalla form Session("idAluDep") = idAluForm ' idAlu di deposito nelle variabili di Sessione idAluSession=Session("idAlu") ' idAlu di sessione, se esiste l'utente è stato autentificato if IdAluSession ="" OR IdAluSession <> IdAluForm then ' non ancora autentificato: ' non esiste l'idAlu o non coincide con quello richiesto Response.Write "Per accedere ai dati richiesti dell'alunno <b> " Set mycn = Server.CreateObject("ADODB.Connection") str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& server.mappath("assenze.mdb") mycn.open str_conn Set rs = Server.CreateObject("ADODB.Recordset") strsql = "SELECT * FROM talu where talu.idalu = " & idAluForm rs.Open strsql, mycn dep = rs.fields("cognome") & " " & rs.fields("nome") & " </b> bisogna autentificarsi </h3><br>" Response.Write dep %> <form method="post" action="VerificaPassword.asp"> <TABLE> <TR> <TD>Password:</TD> <TD><INPUT TYPE="password" SIZE="10" NAME="txtPw"></TD> <TD> <INPUT TYPE="submit" VALUE="Verifica"> <INPUT TYPE="reset" VALUE="Cancella"></TD> </TD> </TR> </TABLE> <% Else Response.Redirect "assenze.asp" end if %> </font> </BODY> </HTML> N.B. Per poter utilizzare correttamente la Redirect è necessario che non siano già state inviate righe al client. Per andare sul sicuro si chiede la bufferizzazione ed il Server invia le righe al client in un colpo solo e non a pezzi. Vedi <% Response.Buffer = true %> prima del tag html

Step 2.1.2 VerificaPassword.asp <%@ LANGUAGE = VBSCRIPT %> <% Response.Buffer = true %> <HTML> <HEAD> <TITLE>Verifica Password</TITLE> </HEAD> <BODY> <h1 >Studi su ASP Verifica Password</h1><p> </p> <% idAluDep = Session("idAluDep") ' leggo l'idAlu di deposito dalle variabili di sessione ' notare la sostituzione degli eventuali apici singoli "'" con due apici singoli txtPwDep = Request.Form("txtPw")

Appunti facili facili di ASP Pag 12/31 Marconi Group

Page 13: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

txtPw = Replace( txtPwDep, "'","''") Set mycn = Server.CreateObject("ADODB.Connection") str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& server.mappath("assenze.mdb") mycn.open str_conn Set rs = Server.CreateObject("ADODB.Recordset") strsql = "SELECT * FROM talu where talu.idalu = " & idAluDep & " and talu.pw = " & "'" & txtPw & "'" rs.Open strsql, mycn If not rs.EOF then ' autentificato Session("idAlu") =idAluDep ' salvo l'Id autorizzato N.B. solo per questo alunno !!! Response.Redirect "assenze.asp" Else ' non autentificato Response.Redirect "default.htm" End If ' con tutte queste Redirect hanno ancora ragione di esistere le seguenti istruzioni?? rs.Close mycn.Close Set rs=nothing Set mycn=nothing %> </BODY> </HTML> N.B. Notare la “pulizia” della password Il programmatore è molto attento a queste cose in quanto il Server con le sue segnalazioni d’errore potrebbe fornire il nome file, pezzi di codice, variabili ecc, che invece il programmatore non vuole rivelare.

Step 2.1.3 Visualizzazione delle assenze

Assenze.asp <%@ LANGUAGE = VBSCRIPT %> <% ' puoi accedere alla pagina solo se ti sei autentificato (e solo su quell'alunno) idAluCerc=Session("idAlu") if idAluCerc="" then Response.Redirect "default.htm" end if %> <html> <head> <title>Elenco assenze alunni</title> </head> <body bgcolor="#a0b1c2"> <b><font face="Arial" color="blue"> <% Set Conn = Server.CreateObject("ADODB.Connection")

Appunti facili facili di ASP Pag 13/31 Marconi Group

Page 14: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Conn.Open "assenze" sqldep= " select * from talu where idalu = " & idalucerc Set RS = Conn.Execute(sqldep) depnome = rs.fields("cognome").value & " " & rs.fields("nome") %> <h1 align="center">Elenco Assenze dell'alunno</h1><br> <% strdep="<center><h2><A HREF='alunno.asp?idalu=" & trim(idalucerc) & "' >" & depnome & "</A><br></H2>" Response.Write strdep %> </font> <font face ="Comic Sans MS" color ="darkred"> <% sqldep = " select * from tass where idalu = " & idalucerc & " order by data" Set RS = Conn.Execute(sqldep) if rs.EOF then Response.Write "Nessuna ASSENZA!" else Response.Write "<table border=1 cellspacing=2 cellpadding=4>" do until rs.EOF Response.Write "<tr><td>" & rs.Fields("data") & "</td><td>" select case rs.Fields("idtipo") ' -------------------------------- da migliorare modificando la query ecc. case 1 tipo = "malattia" case 2 tipo = "famiglia" end select Response.Write tipo & "</td></tr>" rs.MoveNext loop end if rs.Close Conn.Close Set rs=nothing Set Conn=nothing %> </table></center> </font></b> </body> </html> N.B. • Notare la redirezione in testa per impedire accessi non autorizzati. Quel pezzo di codice, magari

inserito in una include, va messo in tutte le pagine “coperte” da autentificazione. • Notare il modo un poco intorcinato (era più semplice con le variabili di sessione) per chiedere

l’anagrafica dell’alunno • Notare la fetecchia di case per visualizzare per esteso il motivo della assenza, quando era più elegante e

affidabile e robusto e .... creare una query di giunzione .... • Notare ........ un voto in più per ogni critica costruttiva

Appunti facili facili di ASP Pag 14/31 Marconi Group

Page 15: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Step 2.2 Utilizzo di procedure ed include di file E’ una bella scocciatura dover ripetere in tante pagine del mio sito interi pezzi di codice. Per facilitare il lavoro basta usare la include.

Step 2.2.1 Modifiche da apportare, ad esempio, alla assenze.asp <!--#include file= "controllo.asp"--> <html> <head> <title>Elenco assenze alunni</title> </head> ..... .....

Step 2.2.2 contenuto del file controlli.asp <%@ LANGUAGE = VBSCRIPT %> <% ' puoi accedere alla pagina solo se ti sei autentificato (e solo su quell'alunno) idAluCerc=Session("idAlu") if idAluCerc="" then Response.Redirect "default.htm" end if %> N.B. • Si tende ad utilizzare file di estensione .asp per impedire che il contenuto sia visibile agli utenti • Per indicare posizioni assolute della path si usa la <!--#include virtual= "/includes/butta.asp"--> • Si può inserire in una include la propria libreria di routines di lavoro Step 2.3 Controlli di validazione client side

Step 2.3.1 Controlli di validazione client side (Utilizzando VBScript) La costruzione di un modulo per l’inserimento dei dati a volte può non bastare: è necessario verificare la correttezza dei dati inseriti, ad esempio verificare che non vengano inviati campi vuoti o che non vengano introdotti dei caratteri non validi. A questo proposito possiamo distinguere due diverse modalità di validazione: una eseguita lato server ed una eseguita lato client. Analizziamo le due modalità: • la correzione dei dati in modalità server side viene eseguita utilizzando linguaggi interpretati lato

server, come l’asp o il php : questo comporta una grande mole di dati che viaggiano lungo rete e quindi una lentezza nelle operazioni;

• la correzione dei dati in modalità client side viene eseguita con linguaggi interpretati direttamente dal browser come il Vbscript o il Javascript: questa modalità risulta essere sicuramente più efficiente della precedente dato che i dati del modulo verranno inviati solo se saranno state rispettate le regole di inserimento.

Sotto è riportato un esempio di validazione di dati acquisiti attraverso un modulo in modalità client side, scritto in Vbscript.

Appunti facili facili di ASP Pag 15/31 Marconi Group

Page 16: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

<html> <head> <title>Inserimento di nuovo alunno</title> <script Language="Vbscript"> function ModuloAlu_onsubmit() ‘ Questa funzione viene eseguita ogni volta che viene sottoposto il modulo o la form di nome “ModuloAlu”. L’evento ‘ associato alla sottoposizione del modulo è chiamato “_onsubmit” ‘ L’oggetto “document” rappresenta il documento corrente Set Modulo = document.ModuloAlu ‘ Controllo che sia stato inserito il cognome dll’alunno nella casella di testo di nome “cognome” If (Modulo.cognome.value = "") Then ‘ Visualizzo il messaggio di errore MsgBox "Inserisci il cognome", 0, "Errore" ‘ Il metodo “focus()” dell’oggetto “cognome” non fa altro che posizionare il cursore all’interno della casella di testo a cui ‘ a cui è associato Modulo.cognome.focus() ‘ I caso di errore quindi, la funziiomne restituisce “false” in modo che il modulo non venga inviato ModuloAlu_onsubmit = False Exit Function End If ‘ viene verificato che nel cognome non ci siano caratteri non validi ‘ La stringa seguente rappresenta la stringa dei caratteri non validi CharErr = "01234567890|\!£$%&/()=?^§*°;:_[]@#,.-+" StrChek = ModuloAlu.cognome.value Err = False ‘ All’interno del ciclo seguente controllo ciascun carattere delle stringa inizializzata precedentemente con i ‘ caratteri della stringa del cognome: ogni volta che vi è uno di questi alzo un flag For i = 1 to len(StrChek) Char = Mid(StrChek, i, 1) If (InStr(CharErr, Char) = 0) Then Err = True End If Next ‘ Se sono stati inseriti caratteri non validi visualizzo il messaggio di errore selezionando i caratteri digitati If (Err) Then MsgBox "Hai inserito caratteri non validi", 0, "Errore"

Appunti facili facili di ASP Pag 16/31 Marconi Group

Page 17: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Modulo.cognome.focus() Modulo.cognome.select() ModuloAlu_onsubmit = False Exit Function End If ModuloAlu_onsubmit = True </script> </head> <body bgcolor="#FFFFCC"> [....] <form name="modulodoc" method="get" action="http://localhost/corsi/inserisci.asp"> <div align="left"> <p>Compila il seguente modulo:</p> <table width="60%" border="0"> <tr> <td width="50%" height="19">Cognome</td> <td width="50%"><input type="text" name="cognome" ></td> </tr> […]

Step 2.3.2 Controlli di validazione client side (Utilizzando JavaScript) Qui sotto invece è riportato lo stesso esempio di sopra scritto scritto stavolta in Javascript.

<html> <head> <title>Inserimento nuovo docente</title> <script language="JavaScript" type="text/JavaScript"> function controlla() { var mymodulo = document.modulodoc; var CarErrCogn = new String("01234567890|\!£$%&/()=?^§*°;:_[]@#,.-+"); // controllo se è stato inserito il cognome if (mymodulo.cognome.value == "") { alert("Devi inserire il tuo cognome"); mymodulo.cognome.focus(); return false; };

Appunti facili facili di ASP Pag 17/31 Marconi Group // controllo se nel cognome ci sono dei caratteri non validi

Page 18: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

var err=0 for (var i=0; i<CarErrCogn.length; i++) { if (mymodulo.cognome.value.indexOf(CarErrCogn.charAt(i)) != -1) err = 1; }; if ((err == 1)) { alert("Hai inserito dei caratteri non validi!"); mymodulo.cognome.focus(); mymodulo.cognome.select(); return false; }; return true; }; </script> </head> <body bgcolor="#FFFFCC"> […] <form name="modulodoc" method="get" action="http://localhost/corsi/inserisci.asp" onSubmit="return controlla()"> <div align="left"> <p><strong>Compila il seguente modulo:</strong> </p> <table width="60%" border="0"> <tr> <td width="50%" height="19">Cognome</td> <td width="50%"><input type="text” name="cognome"></td> </tr> [...] Step 2.4 Visualizzazione di valori numerici in forma analogica La visualizzazione dei dati in forma numerica non “rende” la grandezza dei valori. Potrebbe essere utile visualizzare i dati sia in forma numerica che analogica. Nell’esempio seguente supponiamo di aver creato un data base sondaggio.mdb contenente la tabella tsondaggio con il campo voto, nel quale sono presenti una riga per ogni voto espresso dagli utenti. Per semplicità ci siamo limitati ai soli voti “ottimo” (valore numerico 1) e “buono” (valore numerico 2).

<html> <head> <title>Elabora i dati nel DataBase</title> </head> <body> <b><font face="Arial" color="blue"> <h2 align="center">Elabora i dati relativi ai giudizi sulle mie conoscenze di Informatica</h2> <% Dim ottimo, buono, totale Set mycn = Server.CreateObject("ADODB.Connection") str_conn = "Provider = Microsoft.Jet.Oledb.4.0; Data Source = "& server.mappath("sondaggio.mdb")

Appunti facili facili di ASP Pag 18/31 Marconi Group mycn.open str_conn

Page 19: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Set rs = Server.CreateObject("ADODB.Recordset") '-----------------------------------------------------------------------------------Ottimo '---utilizzare questa select se i valori sono stringa----- "select COUNT(*) from tsondaggio where vota like 'ottimo' " strsql = "SELECT COUNT(*) from tsondaggio where voto = 1" rs.Open strsql, mycn ottimo=rs(0) ' prendo il valore della count RS.Close '-----------------------------------------------------------------------------------Buono strsql = "SELECT COUNT(*) from tsondaggio where voto = 2" rs.Open strsql, mycn buono=rs(0) RS.Close Set RS=Nothing mycn.Close Set mycn=Nothing '------------------------------------- preparo i grafici totale= (ottimo+buono) ' una sola cifra decimale ottimo2= FormatPercent((ottimo / totale), 1) buono2= FormatPercent((buono / totale), 1) ' le percentuali diventano la larghezza delle barre, arrotondo all'intero ottimo3 = (Mid( ottimo2, 1, 2))*2 buono3 = (Mid( buono2, 1, 2))*2 %> <!-- ----------------------------------------------------------------------------------------- intestazione --> <p><font size="2" face="Verdana" color="#CC0000"><b>Ecco i risultati elaborati in modo grafico </b></font></p> <div align="left"> <table border="0" cellpadding="0" cellspacing="0" width="484" height="38"> <tr> <td width="2" height="21"></td> <td width="72" height="21"></td> <td width="102" height="21"> <p align="center"><font size="2" face="Verdana"><i>Percentuale</i></font></td> <td width="102" height="21"> <p align="center"><font size="2" face="Verdana"><i>N° voti</i></font></td> <td width="200" height="21"></td> </tr> <tr> <td width="2" height="0"></td> <td width="72" height="0"></td> <td height="0" align="center" colspan="2" width="202"></td> <td width="200" height="0"></td> </tr> <!-- ------------------------------------------------------------------------------------------------ prima riga --> <tr> <td width="2" height="25"></td> <td width="72" height="25"><font face="Verdana" size="2"><b>Ottimi</b></font></td> <td width="102" height="25" align="center"><font face="Verdana" size="2"> <%=ottimo2 %> </font></td> <td width="102" height="25" align="center"><font face="Verdana" size="2"> <%= ottimo%> </font></td> <td width="200" height="25"><img border="0" src="sondaggio1.gif" width="<%= ottimo3%>" height="10"> </td></tr> <!-- ----------------------------------------------------------------------------------------------- seconda riga --> <tr> <td width="2" height="25"></td>

Appunti facili facili di ASP Pag 19/31 Marconi Group

Page 20: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

<td width="72" height="25"><font face="Verdana" size="2"><b>Buoni</b></font></td> <td width="102" height="25" align="center"><font face="Verdana" size="2"><%= buono2%></font></td> <td width="102" height="25" align="center"><font face="Verdana" size="2"><%= buono%></font></td> <td width="200" height="25"><img border="0" src="sondaggio2.gif" width="<%= buono3%>" height="10"></td> </tr> <tr> <td width="2" height="25"></td> <td width="72" height="25"></td> <td height="25" colspan="2" width="202"></td> <td width="200" height="25"></td> </tr> <!-- ------------------------------------------------------------------------------------------------------- riga finale --> <tr> <td width="2" height="25"></td> <td width="72" height="25" bgcolor="#EFEFEF"><font face="Verdana" size="2">Voti totali:</font></td> <td width="102" height="25" bgcolor="#EFEFEF"><font face="Verdana" size="2" color="#CC0000"><b> <p align="center"><%=totale%></b></font></td> <td width="102" height="25"></td> <td width="200" height="25"></td> </tr> </table> </div> </body> </html> N.B. è necessario aver previsto una serie di gif di diversi colori: sondaggio1.gif, sondaggio2.gif, .... di, per esempio, 200x10 pixel Step 2.5 Spedire una E-mail di conferma

in inserim.htm c’è parecchio codice che verifica la i dati immessi (funzione controlla()) viene fornito solo in parte. <html> <head> <title>Inserimento dati relativi al nuovo utente</title> <script language="JavaScript" type="text/JavaScript"> // controllo i dati inseriti dall'utente function controlla() { qui comincia la funzione controlla() var mymodulo = document.modulo; var CarErrCogn = new String("01234567890|\!£$%&/()=?^§*°;:_[]@#,.-+");

Appunti facili facili di ASP Pag 20/31 Marconi Group

Page 21: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

var CarErrNom = new String("01234567890|\!£$%&/()=?^§*°;:_[]@#,.-+'"); // controllo se è stato inserito il cognome if (mymodulo.cognome.value == "") { alert("Devi inserire il cognome dell'utente"); mymodulo.cognome.focus(); return false; }; // controllo se nel cognome ci sono dei caratteri non validi var err=0 for (var i=0; i<CarErrCogn.length; i++) { if (mymodulo.cognome.value.indexOf(CarErrCogn.charAt(i)) != -1) err = 1; }; if ((err == 1)) { alert("Hai inserito dei caratteri non validi nel cognome!"); mymodulo.cognome.focus(); mymodulo.cognome.select(); return false; }; // controllo che il congnome sia composto dai 2 ai 20 caratteri var text = new String (mymodulo.cognome.value); if ((text.length < 2) || (text.length > 20)) { alert("Devi inserire dai 2 ai 20 caratteri per il cognome"); mymodulo.cognome.focus(); mymodulo.cognome.select(); return false; }; // controllo se il nome è stato inserito

.......omissis // controllo se l'email è stata inserita if (mymodulo.email.value == "") { alert("Devi inserire la tua e-mail"); mymodulo.email.focus(); return false; }; // controllo il contenuto dell'email if (mymodulo.email.value.indexOf("@") == -1) { alert ("Indirizzo E-mail non valido!"); mymodulo.email.focus(); mymodulo.email.select(); return false; }; if (mymodulo.email.value.indexOf(".") == -1) { alert ("Indirizzo E-mail non valido!"); mymodulo.email.focus(); mymodulo.email.select(); return false; };

.......omissis // controllo se la prima password è stata inserita ecc. // controllo se la password è stata ripetuta if (mymodulo.paswd2.value == "") { alert ("E' necessario inserire la conferma della password"); mymodulo.paswd2.focus(); return false; }; // controllo se le due password sono uguali if (mymodulo.paswd1.value != mymodulo.paswd2.value) { alert ("Le due password non coincidono"); mymodulo.paswd2.focus(); mymodulo.paswd2.select(); return false; }; return true; }; </script> qui finisce la funzione controlla()

Appunti facili facili di ASP Pag 21/31 Marconi Group <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Page 22: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

</head> <body> <h1 align="center"><font size="4" face="Verdana, Arial, Helvetica, sans-serif">Inserimento dati registrazione</font></h1> <p align="center">&nbsp;</p> <p align="center">&nbsp;</p> <form name="modulo" method="post" action="attivaz.asp" onSubmit="return controlla()">

.......omissis </body> </html>

N.B. notare il return controlla() che serve a “catturare il modulo prima del suo effettivo invio in modo da poter effettuare i controlli client side.

In attivaz.asp: <html> <%@ LANGUAE=VBSCRIPT %> <head> <title>Attivazione effettuata</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <h1 align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif">Iscrizione effettuata correttamente<br> </font></h1> <table width="60%" border="0" align="center"> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif">Le sar&agrave; inviata un' e-mail di conferma con il suo codice di attivazione per il primo login. </font></td> </tr> </table> <p align="justify"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"></font></p> </body> </html> <% email=Request.Form("email") nome=Request.Form("nome") cognome=Request.Form("cognome") password=Request.form("paswd1")

' inserire qui il codice per l’eventuale inserimento nel database Dim miaMail Set miaMail = CreateObject("CDONTS.NewMail") 'mittente dell'e-mail miaMail.From = "[email protected]" 'destinatario dell'e-mail miaMail.To = email

Appunti facili facili di ASP Pag 22/31 Marconi Group

Page 23: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

'oggetto dell'e-mail miaMail.Subject = "Conferma iscrizione" miaMail.BodyFormat = 0 miaMail.MailFormat = 0 miaMail.Importance = 0 'posso anche allegare un file inserendo come primo parametro il 'percorso e come secondo parametro il suo eventuale nuovo nome miaMail.AttachFile("c:\fetecchia.txt", "butta.txt") 'corpo dell'e-mail cioè il testo vero e proprio del messaggio

inserire qui il codice per generare un eventuale codice di attivazione – vedi nota- miaMail.Body ="L'iscrizione è avvenuta con successo, il suo & codice di attivazione per il primo login è: xxxxxxxxx" miaMail.Send Set miaMail = Nothing %> N.B. codice di attivazione o di accredito: spesso il sito contattato, per essere ragionevolmente sicuro di avere a che fare con la stessa persona, invia una e-mail di conferma contenente la login (il nome utente) ed un codice di attivazione (una specie di password). Ad esempio, molti siti di e-commerce chiedono di compilare un modulo di iscrizione, immediatamente o successivamente inviano una e-mail di conferma contenente un codice tramite il quale completare on-line l’accredito. Il sito ha così non ha un contatto “anonimo” come quello on-line con Internet, ma un contatto a cui almeno corrisponde una casella di posta elettronica ed un atto volontario e personale di accredito da parte del cliente. Cogliamo l’occasione per ricordare che buona parte delle password “viaggiano” in chiaro sulla rete e solo con le transazioni protette i dati sono crittografati.

Appunti facili facili di ASP Pag 23/31 Marconi Group

Page 24: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Appendice A Appunti SQL (Jet Microsoft) L’utilizzo dei database è una delle chiavi di successo delle ASP. Questo ci permette di creare delle tabelle che vengono aggiornate ogni volta che la pagina è caricata. Vedremo come salvare e leggere i dati in un database. Vengono dette tabelle dinamiche. Strutture fondamentali per l'accesso alla sorgente di dati Prima di tutto, tutti gli script lato-server necessitano di essere racchiusi tra <% %> o tra <script RUNAT=server> </script>. Se si omette la scritta RUNAT=Server, il motore delle ASP compila le stesse sulla macchina client. Si può anche specificare il tipo di linguaggio di programmazione Language=[VBScript|JavaScript]. Se non si specifica il linguaggio, quello di default è quello che viene usato sul Web Server. Si possono usare più linguaggi sul server, ma per semplicità useremo solo VBScript. Breve sintesi dell’istruzione select Jet (usare l’help on line per approfondimenti): SELECT [predicato] { * | tabella.* | [tabella.]campo1 [AS alias1] [, [tabella.]campo2 [AS alias2] [, ...]]} FROM espressionetabella [, ...] [IN databaseesterno] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] WITH OWNERACCESS OPTION] ed anche: SELECT campo1[, campo2[, ...]] INTO nuovatabella [IN databaseesterno] FROM origine FROM origine aggiungi: INSERT INTO destinazione [(campo1[, campo2[, ...]])] VALUES (valore1[, valore2[, ...]) ed anche: INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase] SELECT [source.]field1[, field2[, ...] FROM tableexpression modifica: UPDATE tabella SET nuovovalore WHERE criteri; cancella DELETE [tabella.*] FROM tabella WHERE criteri solo per completezza CREATE [TEMPORARY] TABLE tabella (campo1 tipo [(dimensioni)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [indice1] [, campo2 tipo [(dimensioni)] [NOT NULL] [indice2] [, ...]] [, CONSTRAINT indicemulticampo [, ...]])

Appunti facili facili di ASP Pag 24/31 Marconi Group

Page 25: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Appendice B I Database Relazionali - Esempi SQL 1. I data base più diffusi sono: • Oracle SQL • Transact - SQL • PostgreSQL • MySQL • SQLInformix • DBII SQL 2. Le operazioni relazionali in SQL

2.1 RESTRICT (Restrizione, in passato indicata come selezione) Consente di ricavare da una relazione un'altra relazione contenente solo le righe che soddisfano una certa condizione

RESTRICT

SELECT ……… WHERE tTab1.Città="Bari" AND ….

2.2 JOIN (Giunzione) Consente di ricavare da due relazioni una unica relazione che contiene tutte le informazioni delle due relazioni "congiunte" tramite un campo che è la chiave primaria in una e chiave esterna nell'altra.

JOIN

SELECT ………. FROM tTab1, tTab2 WHERE tTab1.idCli=tTab2.idCli

2.3 PROJECT (Proiezione) Consente di ricavare una relazione che contiene solo alcuni attributi della relazione di partenza

PROJECT SELECT tTab1.Cognome, tTab1.Città,………

Appunti facili facili di ASP Pag 25/31 Marconi Group

Page 26: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

3. Esempi tutti da commentare e da verificare, di istruzioni in SQL ANSI (non è detto che funzionino con Jet) = > < …. AND OR DISTINCT e AS

SELECT CodiceImpiegato FROM TabellaStatisticeImpiegati WHERE StipendioAnnuo >= 50000000; SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE POSIZIONE = 'Dirigente'; SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE StipendioAnnuo > 40000000 AND Posizione = 'Impiegato'; SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE StipendioAnnuo < 40000000 OR Benefici < 10000000; SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE Posizione = 'Dirigente' AND (StipendioAnnuo > 50000000 OR Benefici > 10000000); SELECT DISTINCT Città AS [Città di Porvenienza] FROM TabellaImpiegati;

IN BETWEEN NOT

SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE Posizione IN ('Dirigente', 'Impiegato'); SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE StipendioAnnuo BETWEEN 30000000 AND 50000000; SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE StipendioAnnuo NOT BETWEEN 30000000 AND 50000000; SELECT CodiceImpiegato FROM TabellaStatisticheImpiegati WHERE Posizione NOT IN ('Dirigente', 'Impiegato');

LIKE occhio a Jet

SELECT CFisc FROM TabellaImpiegati WHERE NOME LIKE 'A%';

Congiunzioni e ORDER BY

SELECT CognomeAntiquario, NomeAntiquario FROM Antiquari, Antichita WHERE IdAcquirente = IDAntiquario AND Oggetto = 'Sedia'; SELECT Antiquari.CognomeAntiquario, Antiquari.NomeAntiquario FROM Antiquari, Antichita WHERE Antichita.IdAcquirente = Antiquari.IDAntiquario AND Antichita.Oggetto = 'Sedia'; SELECT DISTINCT IDVenditore, CognomeAntiquario, NomeAntiquario FROM Antichita, Antiquari WHERE IDVenditore = IDAntiquario ORDER BY CognomeAntiquario, NomeAntiquario;

bellissima… subquery e IN

SELECT PERS.CognomeAntiquario AS Cognome, ORD.OggettoRicercato AS Oggetto Ordinato FROM Ordini ORD, Antiquari PERS WHERE ORD.IDAntiquario = PERS.IDAntiquario AND ORD.OggettoRicercato IN (SELECT Oggetto FROM Antichita);

Appunti facili facili di ASP Pag 26/31 Marconi Group

Page 27: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Funzioni di Aggregazione SUM, AVG, MAX, MIN, e COUNT

SELECT SUM(StipendioAnnuo) AS SommaDiTuttiGliStipendi, AVG(StipendioAnnuo) AS StipendioMedio FROM TabellaStatisticheImpiegati; SELECT MIN(Benefici) FROM TabellaStatisticheImpiegati WHERE Posizione = 'Dirigente'; SELECT COUNT(*) AS NumeroDegliImpiegati FROM TabellaStatisticheImpiegati WHERE POSITION = 'Impiegato';

CREATE CREATE TABLE Ordini (IDAntiquario INTEGER NOT NULL, OggettoRicercato CHAR(40) NOT NULL);

INSERT INSERT INTO Antichita VALUES (21, 01, 'Ottomana', 2000000.00); INSERT INTO Antichita (IDAcquirente, IDVenditore, Oggetto) VALUES (01, 21, 'Ottomana');

DELETE DELETE FROM Antichita WHERE Oggetto = 'Ottomana'; DELETE FROM Antichita WHERE Oggetto = 'Ottomana' AND IDAcquirente = 01 AND IDVenditore = 21;

UPDATE UPDATE Antichita SET Prezzo = 500000.00 WHERE Oggetto = 'Sedia';

GROUP e HAVING

SELECT IDAcquirente, SUM(Prezzo) FROM ANTICHITA GROUP BY IDAcquirente; SELECT IDAcquirente, MAX(Prezzo) FROM ANTICHITA GROUP BY IDAcquirente HAVING Prezzo > 100;

Subquery query nidificate notare la UPDATE

SELECT IDAcquirente FROM ANTICHITA WHERE Prezzo > (SELECT AVG(Prezzo) + 100 FROM ANTICHITA); SELECT COGNOMEANTIQUARIO FROM ANTIQUARI WHERE IDAntiquario IN (SELECT DISTINCT IDAcquirente FROM ANTICHITA); UPDATE ANTIQUARI SET NOMEANTIQUARIO = 'Giovanni' WHERE IDAntiquario = (SELECT IDAcquirente FROM ANTICHITA WHERE OGGETTO = 'Libreria');

Appunti facili facili di ASP Pag 27/31 Marconi Group

Page 28: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Appendice C Appunti HTML sulle FORM

Nome Aspetto Sintassi

Form <form method="post" action="....url......"> ....... </form>

Text Box su una linea <input type="text" name="T1" size="20"> oppure <....... type=”password” ........>

Text Box con scorrimento

<textarea rows="2" name="S1" cols="20"> </textarea>

Box di scelta

<input type="checkbox" name="C1" value="ON">

Buttone radio

<input type="radio" value="V1" checked name="R1">

Drop-Down Menu (ComboBox)

Choice On

<select name="d1" size="1"> <option value="1">Choice One</option> <option value="2">Choice Two</option> <option value="3">Choice Three</option> </select>

Bottone Button

<input type="button" value="Button" name="B1">

Bottone di invio

Aggiungi

<INPUT TYPE="submit" VALUE="Aggiungi">

Bottone di cancellazione Cancella

<INPUT TYPE="reset" VALUE="Cancella">

Appunti facili facili di ASP Pag 28/31 Marconi Group

Page 29: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Appendice D Oggetti • Application e Session Application è utilizzato per la condivisione delle informazioni tra gli utenti dell’applicazione Web; l’oggetto Application è il luogo ideale per memorizzare tutti gli elementi comuni dell’applicazione. • viene istanziato al primo accesso da parte di un utente; • viene distrutto quando viene chiusa l’ultima sessione utente. Metodi • Lock • UnLock

Eventi • Application_OnEnd • Application_OnStart

Esempi di utilizzo: <% Application("saluti") = "Benvenuto sul mio Web Site!" %> <% Application.Lock Application("numero_utenti") = Application("numero_utenti") + 1 Application.UnLock %> Session è utilizzato per conservare le informazioni del singolo utente per tutta la durata della sessione utente attraverso più pagine Web. • viene istanziato quando un utente accede per la prima volta all’applicazione Web; • in base all’impostazione predefinita, viene distrutto dopo 20 minuti di inattività. Il time-out dell’oggetto Session può essere modificato impostandone la proprietà Session.TimeOut. Metodi • Abandon

Eventi • Session_OnEnd • Session_OnStart

Proprietà • CodePage • LCID • SessionID • TimeOut

• Global.asa Global.asa è un file opzionale nel quale è possibile specificare gli script degli eventi di avvio (_OnStart) e chiusura (_OnEnd) degli oggetti Application e Session. Il file Global.asa deve risiedere nella directory principale dell’applicazione Web. Esempio di un file Global.asa <SCRIPT LANGUAGE=VBSCRIPT RUNAT=SERVER> Sub Session_OnStart() Session("v1") = "valores1" Session("v2") = "valores2" Application("UtentiConnessi")=Application("UtentiConnessi") + 1 End Sub Sub Application_OnStart Application("UtentiConnessi")=0 Application("v1") = "valorea1" Application("v2") = "valorea2" End Sub

Appunti facili facili di ASP Pag 29/31 Marconi Group

Page 30: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Sub Session_OnEnd() Application("UtentiConnessi")=Application("UtentiConnessi") - 1 End Sub Sub Application_OnEnd() End Sub • Request e Response Request è utilizzato per accedere alle informazioni (campi dei moduli HTML, certificati del client e cookie) fornite dal browser al momento di una richiesta HTTP di una pagina Web. Response è utilizzato per inviare informazioni al browser. • Gestione degli oggetti Per utilizzare un oggetto di un componente, è necessario crearne un’istanza e assegnarla ad una variabile tramite il metodo CreateObject dell’oggetto Built-In Server:

Set varObj = Server.CreateObject(PROGID) dove PROGID è il nome registrato del componente che si vuole istanziare. L’area di visibilità di un oggetto creato in una pagina ASP utilizzando Server.CreateObject è subordinata all’esistenza della pagina stessa, cioè fino al termine dell’elaborazione della pagina dall’engine ASP. Ciò nonostante, una volta che un oggetto non è più necessario eliminarlo rilasciando le risorse tramite la sua esplicita impostazione a nothing:

Set varObj = Nothing

Appunti facili facili di ASP Pag 30/31 Marconi Group

Page 31: Appunti facili facili di ASP, per alunni xxxx, xxxx · 2006-02-24 · • ODBC Utilizziamo ODBC per: • Accedere in modo trasparente ai dati • ODBC deve essere stato installato

Appendice E Il futuro di ASP

Appunti facili facili di ASP Pag 31/31 Marconi Group