Introduzione al Remote Scripting 3/3

di Andrea Zani, in Database,
  • 0
  • 0
  • 0
  • 21,00 KB

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>
2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti