Eccoci alla terza e ultima parte di questa serie di articoli dedicati al Remote Scripting. Dopo la lunga parte teorica, in questa ultima parte metteremo finalmente in pratica tutto quanto abbiamo imparato finora, con un esempio che toccherà pressappoco tutti gli argomenti trattati nei due precedenti articoli.
Ed ecco l'esempio
Una volta scaricato e decompresso l'archivio in una cartella dov'è possibile utilizzare le pagine ASP, avremo questi files:
- default.htm (la pagina principale)
- film.asp (la pagina ASP contente le funzioni)
- film.mdb (l'archivio contenente la tabella a cui accederà la pagina ASP)
- rs.htm ? rs.asp ? rsproxy.class (i file indispensabili per l'utilizzo del Remote Scripting)
con questa struttura:
<root> default.htm <_ScriptLibrary> film.asp rsproxy.class rs.htm rs.asp film.mdb
Proviamo il nostro esempio
Va subito precisato che l'esempio qui proposto funziona solo su Internet Explorer. Questo problema non è da imputare assolutamente al Remote Scripting, ma all'utilizzo dei Layer e Div non compatibili con Netscape. Si è preferito non permettere questa doppia compatibilità per non appesantire eccessivamente il codice HTML della pagina principale, non essendo l'uso dei Layer uno degli obiettivi di questa serie di articoli.
Una volta decompresso il nostro archivio ed avviato il browser avremo questa schermata:
Molto semplice e intuitivo, tale da non richiedere molte spiegazioni. Premendo sui due tasti "<" e ">" si scorre nella breve lista di film. Scegliendo nella casella sottostante il voto e premendo il tasto "Aggiungi il tuo voto" il database sarà aggiornato con il nuovo voto e sul browser sarà visualizzata la media aggiornata.
Il database "film.mdb"
Per il nostro esempio abbiamo utilizzato un semplice database con questa struttura:
La struttura è molto semplice e non richiede spiegazioni, tranne per gli ultimi due campi "voto" e "quanti". Questi saranno utilizzati per memorizzare i voti assegnabili dalla nostra pagina principale per ogni film. Il tutto in maniera molto semplice: ogni volta che ad un film sarà assegnato un voto (da 1 a 10), al campo "voto" di quel film sarà sommato quel valore mentre il campo "quanti" verrà incrementato di un'unità. Per ottenere la media, molto semplicemente, divideremo il campo "voto" per il valore presente in "quanti".
La pagina "film.asp"
Ecco il codice con le funzioni che richiameremo dalla pagina HTML:
<%@ LANGUAGE=VBSCRIPT %> <% RSDispatch %> <!--#INCLUDE FILE="rs.asp"--> <SCRIPT RUNAT=SERVER Language=javascript> function Description() { this.cerca=Function('scritta','return cerca(scritta)') this.aggiungi=Function('voto','quale','return aggiungi(voto,quale)') } public_description = new Description(); </SCRIPT> <SCRIPT RUNAT=SERVER Language=vbscript> function cerca(scritta) dim dove dove= "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.Mappath("film.mdb") Set rs=Server.CreateObject("ADODB.recordset") dim stmsql stmsql="Select * FROM elenco where ID="&scritta rs.Open stmsql,dove,1 if rs.eof then frase1="Non trovato!" else frase1=rs("film") frase2=rs("attori") frase3=rs("anno") frase4=rs("voto") frase5=rs("quanti") end if rs.close set rs=Nothing cerca=frase1&";"&frase2&";"&frase3&";"& FormatNumber(frase4/frase5,2)&" ("&frase5&")" end function ' function aggiungi(voto,quale) aggiungi=quale Set cn = Server.CreateObject("ADODB.Connection") cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("film.mdb") cn.execute "Update elenco set quanti=quanti+1 where ID="&quale cn.execute "Update elenco set voto=voto+"&voto&" where ID="&quale Set rs=cn.execute("Select voto,quanti from elenco where ID="&quale) aggiungi=FormatNumber(rs(0)/rs(1),2)&" ("&rs(1)&")" cn.close Set cn=nothing end function </script>
In esso sono presenti due funzioni: cerca e aggiungi. Per le spiegazioni sulla dichiarazione delle funzioni di questo script, rimando alla seconda parte di questa serie di articoli dove l'argomento è stato trattato in maniera approfondita. Qui mi dilungherò solo sul funzionamento di queste due funzioni.
La funzione "cerca" avrà come unico parametro "scritta". Questa variabile conterrà il numero di ID del film da cercare nel database (per l'uso del database si può leggere questoa articolo . Una volta prelevati tutti i dati che ci interessano (film, attori, anno, voto, quanti), per poterli passare al client-script della pagina HTML, li uniremo in un'unica stringa, divisi dal carattere ";", in modo che lo script che riceverà questo valore, possa ridividerli con la funzione "split".
La funzione "aggiungi" accetta due parametri: voto e quale. Il primo è il voto che l'utente potrà dare al film, il secondo è l'ID a quale film dovrà essere assegnato. Molto semplicemente, questa funzione apre il database e con i comandi "update" di SQL, aumenta di un'unità il campo "quanti" e somma al campo "voto" il valore assegnato dall'utente. Quindi ritorna allo script chiamante il voto medio aggiornato.
La pagina principale
Nella pagina principale (default.htm), dovremo scrivere questo codice per richiamare le funzioni prima descritte:
<SCRIPT type="text/javascript"> var serverURL = "_scriptlibrary/film.asp"; var aspObject; function trova() { status="Ricerca in corso..."; co=RSExecute(serverURL,"cerca",selezionato); var ss; ss=co.return_value.split(";"); titolo.innerHTML=ss[0]; attori.innerHTML=ss[1]; data.innerHTML=ss[2]; voto.innerHTML=ss[3]; document.forms[0].Aggiungi.disabled=false; quale.innerHTML='Film '+selezionato+' di 7' if (selezionato==1) document.forms[0].Inferiore.disabled=true; else document.forms[0].Inferiore.disabled=false; if (selezionato==7) document.forms[0].Superiore.disabled=true; else document.forms[0].Superiore.disabled=false; status="Ok!"; } function Inserisci(voto,quale) { status="Aggiornamento in corso..."; co=RSExecute(serverURL,"aggiungi",voto,quale,visualizza); } >function visualizza(co) { ss=co.return_value; status="Ok!"; voto.innerHTML=ss; } </SCRIPT>
Attenzione: Questo articolo contiene un allegato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.