|
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.
Alcuni esempi (realizzati dal sottoscritto):
http://www.italystore.com/annunci
(inserimento e lettura di annunci economici)
http://www.giroscopio.com/racconti
(inserimento e lettura di racconti)
http://www.giroscopio.com
(motore di ricerca)
http://www.italystore.com
(shopping cart)
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.
|