Corsi di Laurea Specialistica in Ingegneria Informatica/Gestionale Sistemi Informativi per il Web Active Server Pages ed ADO A.A. 2005 – 2006 Scrivere ASP • Le pagine ASP possono contenere codice HTML o XML • Le parti del documento che racchiudono codice script vanno racchiuse tra i delimitatori <% e %> • Gli script vengono eseguiti sul lato server • E’ possibile usare sia vbscript che javascript (in questo caso aggiungere in testa al documento: <%@ language="javascript"%> ) • per default il server assume script in vbscript Come usare le ASP • • • • • Un ASP engine è in tutti i Microsoft IIS Il PWS (sul cd di win95) le supporta Alternative: Abyss http://www.aprelium.com/ SUN http://www.sun.com/software/chilisoft/ La mia prima ASP <html> <head><title>la mia prima asp</title></head> <body> <% response.write("Hello World!") %> </body> </html> • Il metodo di scrittura e’ response.write Elementi della sintassi • Dichiarazione di variabili e loro uso: <%dim name name=“Bond" response.write("My name is: " & name) %> • Array: <% Dim cognome(5) cognome(0) = “bond" cognome(1) = “kravitz" cognome(2) = "Hegel" cognome(3) = "Stalin" cognome(4) = “Kim Jong Il" cognome(5) = "Borges" For i = 0 to 5 response.write(cognome(i) & "<br />") Next %> esempio <% dim h h=hour(now()) response.write("<p>" & now()) response.write(" (Ora locale server) </p>") If h<12 then response.write("Good Morning!") else response.write("Good evening!") end if %> Durata delle variabili • Variabili in un file ASP sono accessibili all’interno dell’intero file. • Le variabili dichiarate all’interno di procedure sono visibili solo all’interno delle stesse. • Variabili che debbano essere accessibili da file diversi devono essere variabili di session (sessione di un unico utente) oppure di application (visibili a tutti gli utenti) . Usare le procedure <html> <head> <% sub vbproc(num1,num2) response.write(num1*num2) end sub %> </head> <body> <p> Risultato: <%call vbproc(3,4)%> </p> <p> Risultato: <%vbproc 3,4%> </p> </body> </html> Interagire con le ASP: usare le form <html> <body> <form action="demo.asp" method="post"> Your name: <input type="text" name="fname" size="20"> <input type="submit" value="Submit"> </form> <% dim fname fname=Request.Form("fname") If fname<>"" Then Response.Write("Hello " & fname & "!<br />") Response.Write("How are you today?") End If %> </body> </html> • E’ anche possibile usare il metodo GET, ma e’ sconsigliato Passare parametri ad una ASP mediante form <html> <body> <form method="post" action="welcome.asp"> First Name: <input type="text" name="fname" value=""> Last Name: <input type="text" name="lname" value=""> <input type="submit" value="Submit"> </form> </body> </html> Passare parametri ad una ASP mediante form: welcome.asp <html> <body> <% nome=Request.form("fname") cognome=Request.form("lname") response.write("<p>Hello " & nome & " " & cognome & "!</p>") response.write("<grazie di esistere!</p>") %> </body> </html> Active Data Objects • E’ una tecnologia Microsoft • E’ un componente Active-X • E’ concepita per accedere in maniera semplice a database via web • E’ presente in IIS • Usa ed estende l’accesso via ODBC Attivazione di una origine dati • • • • • • • • • • ODBC Esempio usando MSAccess: Selezionare Pannello di Controllo Cliccare su Origine dati ODBC Selezionare la scheda DSN (Data Source Name) di sistema ovvero DSN Utente Cliccare su aggiungi Selezionare il driver (Microsoft Access) Inserire nella scheda il nome di riferimento dell'origine dati Cliccare su Database: Seleziona Selezionarere Database Premere OK Connettersi ad un database • Varie modalità: Diretta: <% set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open "c:/webdata/northwind.mdb" %> Via ODBC: <% set conn=Server.CreateObject("ADODB.Connection") conn.Open "northwind" %> Recuperare dati da un DB • Creare un recordset: <% Set rs=Server.CreateObject("ADODB.recordset") rs.Open "Select * from Customers", conn %> Visualizzare i dati estratti: <% for each x in rs.fields response.write(x.name) response.write(" = ") response.write(x.value) next %> Un esempio: <html><body> <% set conn=Server.CreateObject("ADODB.Connection") conn.Open "northwind" set rs = Server.CreateObject("ADODB.recordset") sql="SELECT Companyname, Contactname FROM Customers" rs.Open sql, conn %> <table border="1" width="100%"> <tr> <%for each x in rs.Fields response.write("<th>" & x.name & "</th>") next%> </tr> <%do until rs.EOF%> <tr> <%for each x in rs.Fields%> <td><%Response.Write(x.value)%></td> <%next rs.MoveNext%> </tr> <%loop rs.close conn.close %> </table></body></html> Aggiungere un record: input file <html> <body> <form method="post" action="demo_add.asp"> <table> <tr> <td>CustomerID:</td> <td><input name="custid"></td> </tr> <tr> <td>Company Name:</td> <td><input name="compname"></td> </tr> <tr> <td>Contact Name:</td> <td> <input name="contname"></td> </tr> <tr> <td>Address:</td> <td> <input name="address"></td> </tr> </table> <input type="submit" value="Add New"> </form> </body> </html> Aggiungere un record: asp <html> <body> <% set conn=Server.CreateObject("ADODB.Connection") conn.Open "northwind" sql="INSERT INTO customers (customerID,companyname," sql=sql & "contactname,address)" sql=sql & " VALUES " sql=sql & "('" & Request.Form("custid") & "'," sql=sql & "'" & Request.Form("compname") & "'," sql=sql & "'" & Request.Form("contname") & "'," sql=sql & "'" & Request.Form("address") & "')“ conn.Execute sql,recaffected Response.Write("<h3>" & recaffected & " record added</h3>") conn.close %> </body> </html> Interrogare un db con dei valori <html> <body> <form method="post" action="demo_query.asp"> <table> <tr> <td>CustomerID:</td> <td><input name="custid"></td> </tr> <tr> <td>Company Name:</td> <td><input name="compname"></td> </tr> </table> <input type="submit" value=“Find data"> </form> </body> </html> demo_query.asp: <html> <body> <% set conn=Server.CreateObject("ADODB.Connection") conn.Open "northwind" set rs = Server.CreateObject("ADODB.recordset") sql=“SELECT * FROM customers WHERE custid = & Request.Form("custid") & " AND “ Sql=sql & “compname =“ & Request.Form("compname") & "" rs.Open sql, conn %> <table border="1" width="100%"><tr> <%for each x in rs.Fields response.write("<th>" & x.name & "</th>") next%> </tr> <%do until rs.EOF%> <tr> <%for each x in rs.Fields%> <td><%Response.Write(x.value)%></td> <%next rs.MoveNext%> </tr> <%loop rs.close conn.close %> </table> </body></html> Aggiornare e cancellare sql="UPDATE customers SET " sql=sql & "companyname='" & Request.Form("companyname") & "'," sql=sql & "contactname='" & Request.Form("contactname") & "'," sql=sql & "address='" & Request.Form("address") & "'," sql=sql & "city='" & Request.Form("city") & "'," sql=sql & "postalcode='" & Request.Form("postalcode") & "'," sql=sql & "country='" & Request.Form("country") & "'" sql=sql & " WHERE customerID='" & cid & "'" conn.Execute sql, ra sql="DELETE FROM customers" sql=sql & " WHERE customersID='" & cid & "'" conn.Execute sql, ra Caricare direttamente I record: rs.Open "Select * from Customers", conn p=rs.GetRows(i,j) ‘i quanti record copiare, j a partire da quale record response.write(p(i,j)) ‘i num. colonna, j num record Individuare gli errori <%for each Err in Conn.Errors response.write("<p>") response.write("Description: ") response.write(Err.Description & "<br />") response.write("Help context: ") response.write(Err.HelpContext & "<br />") response.write("Help file: ") response.write(Err.HelpFile & "<br />") response.write("Native error: ") response.write(Err.NativeError & "<br />") response.write("Error number: ") response.write(Err.Number & "<br />") response.write("Error source: ") response.write(Err.Source & "<br />") response.write("SQL state: ") response.write(Err.SQLState & "<br />") response.write("</p>") next%> Usare i cookie con le ASP <% dim visite response.cookies("visite").Expires=date+365 visite=request.cookies("visite") %> <html><body> <% if visite="" then response.cookies("visite")=1%> Welcome! This is the first time you are visiting this Web page. <% else response.cookies("visite")=visite+1 response.write("You have visited this ") response.write("Web page " & visite) if visite=1 then response.write " time before! Thanks for coming back" else response.write " times before! Thanks for coming back " end if end if %> </body></html> Cookie con valori multipli <% Response.Cookies("firstname")=“Eugenio" Response.Cookies("user")(“nome")=“Antonio" Response.Cookies("user")(“interessi")=“piscina" %> <html><body><% dim x,y for each x in Request.Cookies response.write("<p>") if Request.Cookies(x).HasKeys then for each y in Request.Cookies(x) response.write(x & ":" & y & "=" & Request.Cookies(x)(y)) response.write("<br />") next else Response.Write(x & "=" & Request.Cookies(x) & "<br />") end if response.write "</p>" next %> </body></html> Variabili di sessione • Mantengono dati relativi ad un utente durante una sessione di lavoro • Un oggetto Session viene instanziato sul server all’inizio di una sessione utente e distrutto alla fine della stessa • Una sessione inizia quando: – un utente richiede una pagina asp e nel file denominato Global.asa è presente una procedura Session_OnStart – Un valore viene immagazzinato in una variabile session • Una sessione termina: Per default dopo 20 minuti Imponendo un timeout <% Session.Timeout=5 %> Imponendo l’abbandono immediato <% Session.Abandon %> Usare variabili di sessione • Per inserirle: <% Session("username")=“Antonio" Session("age")=27 %> • Per recuperarle: Welcome <%Response.Write(Session("username"))%> • Per rimuoverle: <% If Session.Contents("age")<18 then Session.Contents.Remove(“buy") End If %> Usare variabili di application • Una application è un set di file asp, tipicamente concepiti per essere usati insieme in sequenza. • Una application consente di legare le variabili dei vari file insieme. • La visibilità delle variabili è per tutti gli utenti della applicazione. • Ciascuna variabile può esere bloccata e sbloccata Usare variabili di application • Nel file Global.asa scrivere qualcosa tipo: <script language="vbscript" runat="server"> Sub Application_OnStart application("vartime")="" application("users")=1 End Sub </script> • Per accedere: <% Response.Write(Application("users")) %> • Per bloccare/sbloccare <% Application.Lock ‘aggiungere il codice qui Application.Unlock %> Il file Global.asa • Può contenere dichiarazioni di oggetti, metodi e variabili accessibili da tutti i file nella applicazione • Deve trovarsi nella root della pplicazione; ci può essere 1 solo file di questo tipo nella applicazione • Un generico file: <script language="vbscript" runat="server"> sub Application_OnStart ''''some code end sub sub Application_OnEnd ''''some code end sub sub Session_OnStart ''''some code end sub sub Session_OnEnd ''''some code end sub </script> Esempi: Inizializzare un contatore di sessione: <script language="vbscript" runat="server"> sub Session_OnStart Session("started")=now() end sub </script> Aprire un nuovo documento: <script language="vbscript" runat="server"> sub Session_OnStart Response.Redirect("newpage.asp") end sub </script> Esempi: <script language="vbscript" runat="server"> Sub Application_OnStart Application("visitors")=0 End Sub Sub Session_OnStart Application.Lock Application("visitors")=Application("visitors")+1 Application.UnLock End Sub Sub Session_OnEnd Application.Lock Application("visitors")=Application("visitors")-1 Application.UnLock End Sub </script> Per mostrare i visitatori al momento: <%response.write(Application("visitors"))%>