Corso di ASP

 

Parte sesta


Continua il nostro viaggio nell’affascinante mondo degli ASP (Active Server Pages) di Microsoft.

Nell’ultima lezione abbiamo visto come cancellare dei records di un database residente sul server, tramite web, oggi vedremo come aggiornare ed aggiungere dei record.

Con quest’ultime due funzioni abbiamo completato l’insieme dei mezzi per gestire un database remoto, sarà compito vostro creare una pagina dalla quale poter scegliere che tipo di operazioni fare.

Naturalmente questa pagina sarà accessibile solo ai possessori di password autorizzata, altrimenti chiunque potrebbe commettere chissà quali nefandezze sulla vostra base di dati.

La scorsa puntata abbiamo visto che una volta immessa una password nel form in html, essa viene confrontata con quella presente nel database della password, se le due combaciano allora si entra nella pagina dalla quale si possono compiere le operazioni di cancellazione ed aggiunta di record nel database dei libri (libri.mdb) altrimenti si torna all' home page.

Vediamo come si aggiorna un record, nello specifico vediamo come facciamo a cambiare la nostra password on-line.

Se dalla pagina modifiche.asp clicchiamo su AGGIORNA PASSWORD, allora viene lanciato il file Update.asp:

Update.asp

<%

REM solita procedura di controllo della variabile pass per vedere se contiene il valore "ok" altrimenti non si esegue il codice di update.asp

pass=request.form("pass")

if pass="ok" then%>

<HTML>

<HEAD>

<TITLE>Agiiorna il Database</TITLE>

</HEAD>

<BODY background="sfondo.gif" BGCOLOR="#C0C0C0" TEXT="#0F0000" LINK="#0000FF" ALINK="#0000CC" VLINK="#0000FF">

<%

REM la upw assume il valore del campo di tipo text col name="upw" che sarebbe la nuova password che desidero usare

upw=request.form("upw")

rem solita procedura di connessione al database di nome pass.mdb.

Set OBJdbConnection = Server.CreateObject("ADODB.Connection")

OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\domini\italystore\libri

\pass.mdb"

REM qui c’è la novità l’istruzione sql (Structured Query Language) Update, che serve appunto ad aggiornare un record.

sql="update pass set pw='"&upw&"' where id="&request.querystring("id")

REM commentiamola: "Aggiorna la tabella pass (del db pass.mdb) poni il campo pw uguale al valore contenuto in upw dove il campo id è uguale al valore della variabile id mandata sulla stringa di comando dal form.

Set RS=OBJdbConnection.Execute(sql)

rem esegue l’istruzione sql

OBJdbConnection.Close

%>

<center>

<h2>Database Password Aggiornato !</h2>

premi back per tornare indietro !

</CENTER>

</BODY>

</HTML>

<%

REM se pass fosse stato diverso da "ok" allora veniva fuori questa scritta !

else

response.write "<h1>Accesso Negato !</h1>"

end if%>

Naturalmente il sistema di "aggiornamento" del record può essere esteso anche a più campi e a più records, ad esempio potremmo aggiornare i campi prezzo e quantità dei record di un database di articoli del nostro magazzino.

Ma oltre l’aggiornamento il sistema di gestione remota di un database deve poter anche aggiungere dei records e allora:

Add.asp

<%

pass=request.form("pass")

if pass="ok" then%>

<HTML>

<HEAD>

<TITLE>Il Database</TITLE>

</HEAD>

<BODY background="sfondo.gif" BGCOLOR="#C0C0C0" TEXT="#0F0000" LINK="#0000FF" ALINK="#0000CC" VLINK="#0000FF">

<%

REM solito sistema per caricare i valori delle variabili inviate dal form.

titolo=request.form("titolo")

autore=request.form("autore")

cat=request.form("cat")

ed=request.form("ed")

anno=request.form("anno")

prezzo=request.form("prezzo")

collana=request.form("collana")

pagine=request.form("pagine")

testo=request.form("testo")

imm=request.form("imm")

REM una serie di if che controllano se i campi sono vuoti, per esempio di un libro potremmo avere solo il titolo e l’autore a questo punto gli altri campi devono assumere dei valori fittizi come il "-" o lo "0" (per quelli numerici)

if titolo="" then titolo="-"

if autore="" then autore="-"

if ed="" then ed="-"

if cat="" then cat="-"

if anno="" then anno=0

if prezzo="" then prezzo=0

if collana="" then collana="-"

if pagine="" then pagine="-"

if imm="" then imm="-"

if testo="" then testo="-"

rem solita procedura di connessione al database libri.mdb

Set OBJdbConnection = Server.CreateObject("ADODB.Connection")

OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\domini\italystore\libri

\libri.mdb"

REM qui c’è la novità, infatti pongo la variabile RS come oggetto Recordset.

L’oggetto Recordset si usa per creare un set di records, appunto un insieme di record sul quale lavorare.

L’oggetto Recordset è "l’officina" di ADO (Active Data Object) (ne abbiamo parlato nelle scorse lezioni), cioè il posto in cui sono eseguite quasi tutte le attività di gestione del database.

RS diventa un’istanza dell’oggetto Recordset quindi può usufruire del metodo Open.

Open apre la tabella "tablibri", sulla connessione OBJdbConnection (definita in precedenza), i numeri 3,3 che seguono rappresentano rispettivamente:

il CursorType

il LockType

Il CursorType definisce il tipo di "cursore", il quale è una rappresentazione dei dati (records) e definisce anche il tipo di viste possibili su di essi.

I tipi di cursori sono di 4 tipi:

Cursore di default valore:0 è come un cursore statico ad eccezione del fatto che permette solo spostamenti in avanti e non indietro, poiché questo cursore non deve tener traccia dei record aggiunti, modificati o cancellati da atri utenti.

Cursore Keyset valore: 1 possono vedere le modifiche apportate da altri utenti, nonché spostarsi tra i record in avanti ed indietro. Non possono vedere i record aggiunti o cancellati da gli altri utenti.

Cursori Dinamici valore:2 possono vedere qualsiasi cosa: modifiche, aggiunte e cancellazioni fatte da altri utenti. Supportano, inoltre tutti gli spostamenti.

Cursori Statici valore: 3 permettono gli spostamenti in avanti ed indietro. Non sono in grado di rilevare le modifiche ai dati apportate da altri utenti.

Il valore di LockType (o di BLOCCO) determina che tipo di blocco il fornitore di dati DBMS (Data Base Management System), ossia il database realizzato con Access (libri.mdb), deve usare quando si apre un Recordset, questo ai fini del controllo di concorrenza sugli accessi ai dati da parte di più utenti contemporaneamente.

Per definizione le applicazioni client/server implicano che più di una persona può accedere contemporaneamente ad un database, questa caratteristica è chiamata concorrenza.

Per un accesso concorrente ci deve essere un deposito al quale più utenti accedano per leggere e cambiare i dati.

Ciò significa che il DBMS deve garantire l’accuratezza dei dati memorizzati e per gestire in modo efficiente un accesso concorrente ai dati, è necessario fronteggiare un altro problema, che è chiamato interferenza.

L’interferenza è quel fenomeno che accade quando due fenomeni della stessa natura si sovrappongono causando un disturbo reciproco, questo principio è facilmente estensibile all’azione di due utenti che stiano compiendo la stessa operazione sullo stesso record di un database.

Per evitare l’interferenza esistono le opzioni di blocco:

adLockReadOnly valore: 1 i dati si possono soltanto leggere.

AdLockPessimistic valore: 2 i dati sono bloccati appena qualcuno comincia ad effettuare operazioni di modifica, così da mantenere un’integrità assoluta dei dati, ma con spiacevoli rallentamenti del sistema, infatti finché l’utente non finisce le sue modifiche quei dati sono bloccati. Il blocco pessimistico ha il vantaggio di essere molto sicuro, specialmente su sistemi come Internet, che ha la possibilità di far accedere tantissimi utenti contemporaneamente, ma ha lo svantaggio di creare parecchie difficoltà su Internet proprio perché qualche utente potrebbe andare a pranzo e lasciare i records bloccati, oppure i rallentamenti della rete causerebbero un blocco abbastanza lungo nel tempo ecc. ecc.

AdLockOptimistic valore: 3 il blocco ottimistico crea un buffer temporaneo in cui vengono conservati gli aggiornamenti e le modifiche sui dati, mentre i dati originali sono ancora accessibili agli altri utenti, quando si lancia un comando di aggiornamento (Update) allora i dati vengono bloccati e appena finito l’aggiornamento il blocco viene rilasciato.

Set RS=Server.CreateObject("ADODB.Recordset")

RS.Open "tablibri",OBJdbConnection,3,3

REM Usiamo il metodo AddNew per immettere il valore della variabile titolo nel campo "titolo" del database, il valore della variabile autore nel campo "autore", e così via per tutti gli altri.

RS.AddNew

rs("titolo")=titolo

rs("autore")=autore

rs("cat")=cat

rs("editrice")=ed

rs("anno")=anno

rs("prezzo")=prezzo

rs("collana")=collana

rs("pagine")=pagine

rs("testo")=testo

rs("imm")=imm

REM dopo aver caricato i valori delle variabili lanciamo il metodo Update (dato che abbiamo usato il blocco ottimistico) che serve a bloccare i dati fino a quando non finisce l’aggiornamento.

rs.update

REM a questo punto chiudiamo la connessione col database e l’apertura del recordset.

RS.Close

OBJdbConnection.Close

%>

<center>

<h2>Database Aggiornato !</h2>

premi back per tornare indietro !

</CENTER>

</BODY>

</HTML>

<% else

response.write "<h1>Accesso Negato!</h1>"

end if%>

 

Riepilogando in queste lezioni abbiamo visto:

I comandi basilari dell’ASP (Active Server Pages)

Un gestore di feedback form.

La realizzazione di un motore di ricerca.

La costruzione dinamica di una pagina html

Come cancellare dei records da un database via web

L’aggiornamento e l’aggiunta dei dati di un database via web.

Utilizzando questi mezzi si possono inventare e implementare tantissime applicazioni utili e carine, senza spendere !

Potete realizzare motori di ricerca, shopping cart per il commercio elettronico, bacheche su web gestite automaticamente, web chat, ecc. ecc.

I mezzi sono quelli che vi ho dato manca ancora un ultimo ingrediente per realizzare quasi tutto: session.sessionId.

L’oggetto session con il suo metodo sessionId permette di assegnare ad ogni browser un numero univoco (come un cookie), quindi se in un listato asp scrivo:

<% x=session.sessionid %>

e poi vado a scrivere il valore della variabile x in un campo (es. il campo "user") di un database, ovviamente potrò "personalizzare" alcuni records di quel database.

Questo è molto utile ad esempio nella realizzazione di uno shopping cart (carrello per gli acquisti elettronici), infatti quando un cliente sta leggendo dal database i suoi acquisti non sta facendo altro che leggere tutti i records che hanno nel campo "user" il suo numero session.sessionid.

È intuitivo che se ci sono due clienti contemporaneamente uno non vedrà gli acquisti dell’altro proprio perché ognuno leggerà i suoi records personali.

La stringa sql sarà: "select * from tabella_acquisti where user="&x

e cioè leggi dalla tabella_acquisti del database tutti i records che hanno il valore di x nel campo user.

 

Buona Fortuna e buon lavoro !

 


primaparte | secondaparte | terzaparte | quartaparte | quintaparte | sestaparte