Asp, questi sconosciuti – Corso di asp
parte V
Impariamo a creare una pagina web dinamica in asp
di Nanni Bassetti nannib@libero.it
Dopo avere imparato a creare le pagine html contenenti i
nostri prodotti è arrivato il momento di mettere mano alla parte
"amministrativa" del nostro catalogo in linea. Prima di addentrarci in
nuovi argomenti, vediamo di ricapitolare i passi compiuti finora:
- Abbiamo creato un form di ricerca contenente i campi Titolo, Autore,
Casa editrice, Categoria.
- Il tasto "cerca" presente nella form è stato predisposto per inviare
i dati inseriti dall’utente ad un file asp (motor.asp), il quale
effettua una ricerca all’interno di un database Access (libri.mdb) e
visualizza i risultati in una pagina html composta da una tabella con
tutti i libri che rispondono ai criteri di ricerca.
- Ogni titolo visualizzato nella tabella è stato reso un link ad una
pagina asp (libro.asp), che contiene le informazioni relative al libro
selezionato, estratte dai campi del record associato al libro
stesso.
A questo punto l’interfaccia utente del sito è finita;
chiunque può accedere alle nostre pagine e ricercare un libro, estraendo
dal database tutte le informazioni necessarie ad identificare l’oggetto
ricercato. Ora si tratta di creare, però, gli strumenti per gestire la
base dei dati, ovvero inserire, cancellare un libro, oppure modificare una
o più informazioni ad esso associate.
Come possiamo fare? In effetti abbiamo a disposizione due
possibilità
- Modificare in locale il file contenente i dati e poi caricarlo sulla
macchina che gestisce le pagine web.
- Agire sulla base di dati in remoto, utilizzando il navigatore.
La prima soluzione è improponibile dato che rende
estremamente laborioso il lavoro di gruppo su uno stesso database e
implica notevoli trasferimenti da e verso il server, a meno che questo non
sia direttamente raggiungibile in locale.
La seconda soluzione, invece, permette a più operatori,
anche distanti migliaia di chilometri tra loro, di lavorare sul database e
inoltre non obbliga a scaricare tutto il file di database anche quando si
è modificato un solo record. Prenderemo quindi in esame la seconda
soluzione, creando gli strumenti appropriati per gestire in remoto il
database del sito che abbiamo appena creato.
La prima cosa da fare è creare un form html che ci
consenta di proteggere da sguardi indiscreti la parte del sito dedicata
alla gestione; è ovvio che non sarebbe una soluzione ideale lasciare
libero accesso alla modifica dei dati. In pratica, il form preleva la
password dell’utente e la invia ad un file asp (pass.asp), che la
confronta con quella contenuta in un database di codici. In caso di
responso positivo, il navigatore potrà accedere alle pagine html più
riservate, altrimenti viene rediretto ad una pagina di default..
Vediamo il codice del file pass.asp:
PASS.ASP:
<%
rem Definisco una variabile pass
dim pass
rem Inserisco nella variabile passw la password
scritta nel form html
pw=request.form("passw")
rem leggo tutti i record della tabella pass del database
pass.mdb
sql="select * from pass"
Set OBJdbConnection =
Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver
(*.mdb)};dbq=c:\inetpub\wwwroot\domini\italystore\annunci\pass.mdb"
Set RS=OBJdbConnection.Execute(sql)
rem Carico nella variabile pw2 il valore del campo pw
del record del datatbase pass.mdb
pw2=rs("pw")
rem Effettuo il confronto tra la password presente nel
db e la password inserita nel form
if pw<>pw2 then
rem Se le due password sono diverse allora ritorno
alla home page
response.redirect "default.asp"
rem Altrimenti inserisco nella variabile pass la
stringa "ok"
else
pass="ok"
%>
rem A questo punto inserisco il file
modifica.asp
<!-- #include file="modifiche.asp" -->
<%
end if%>
Se le password sono uguali, l’utente può accedere al file
modifica.asp che permette di scegliere se aggiungere o cancellare un
record del database.
MODIFICHE.ASP:
<%
passb=request.form("pass")
rem Controllo se la variabile pass ha il valore "ok".
La variabile pass viene direttamente dal
rem file pass.asp.
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"><p>
rem Da qui posso scegliere se aggiungere o cancellare
o aggiornare un record, la mia scelta rem verrà trasmessa al file
rem scelta.asp
<form method=post action="scelta.asp">
<center>
<input type=submit
name="aggiungi"value="Aggiungi">
<input type=submit name="cancella"
value="Cancella">
<input type=submit name="cambia" value="Cambia
Password">
<input type=hidden name="pass" value="ok">
</center>
</form>
</BODY>
</HTML>
<%
rem Se pass è diverso da "ok" allora torno alla home
page default.asp
else
response.redirect "index.htm"
end if%>
Fin qui nessun problema: tutto concerne la verifica della
password,ma una volta passata questa fase possiamo concentrarci sul codice
che si occupa delle varie operazioni sul database.
SCELTA.ASP:
<%
pass=request.form("pass")
s=request.form
rem Se si sceglie di aggiungere un record allora entra
in azione questa sezione del programma, che approfondiremo nelle prossime
lezioni
if s="aggiungi=Aggiungi&pass=ok" then%>
<html>
<HEAD>
<TITLE>Il Database</TITLE>
</HEAD>
<BODY background="sfondo.gif" BGCOLOR="#C0C0C0"
TEXT="#0F0000" LINK="#0000FF" ALINK="#0000CC" VLINK="#0000FF">
<form method=post action="add.asp">
<center><h2>Aggiungi
Libro</h2><br>
<table border=1>
<tr><td align=center>Titolo</td><td
align=center>Autore</td><td
align=center>Anno</td></tr>
<tr>
<TD><input type=text
name="titolo"></TD>
<td><input type=text
name="autore"></td>
<td><input type=text
name="anno"></td>
</tr>
<tr>
<td align=center>Categoria</td><td
align=center>Casa Editrice</td><td
align=center>Prezzo</td>
<tr>
<td><input type=text
name="cat"></td>
<td><input type=text
name="ed"></td>
<td><input type=text
name="prezzo"></td>
</tr>
<tr>
<td align=center>Collana</td><td
align=center>Testo</td><td align=center>Foto</td>
</tr>
<tr>
<td><input type=text
name="collana"></td>
<td><input type=text name="testo"></td>
<td><input type=text name="imm"></td>
</tr>
<tr><td
align=center>Pagine</td></tr>
<tr>
<td><input type=text
name="pagine"></td>
</TR>
</table> <br>
<input type=hidden name="pass" value="ok">
<input type=submit name="ok" value="Aggiungi">
</form>
</BODY>
</HTML>
<%end if
rem Se s="cancella=Cancella&pass=ok" significa che
abbiamo scelto l’opzione CANCELLA e
rem che siamo autorizzati ad
rem usarla
if s="cancella=Cancella&pass=ok" then
rem A questo punto creiamo un motore di ricerca che
trovi solo il record che ci interessa
rem cancellare, altrimenti dovremmo visualizzare tutta
la base di dati…
%>
<html>
<head>
<title>Modifica- by
Italystore.com</title>
</head>
<body bgcolor="#FfFfff">
<center>
<!—Qui vediamo apparire una casella di testo da
riempire col titolo del libro che ci interessa cancellare; ovviamente, se
non ricordiamo tutto il titolo possiamo inserire anche solo alcune parole
contenute in esso. Dopo la pressione del tasto CERCA viene eseguito il
file cancscel.asp che effettua una ricerca per titolo nel database e
visualizza i risultati a video. Chiaramente la ricerca può essere
effettuata su più campi ma, per semplificare, ora utilizziamo solo il
campo titolo-->
<form method="post" action="cancscel.asp">
<p><br>
<b>Cerca il titolo del libro da
cancellare:</b>
<input type="text" name="tit"><br>
<!— Con input type=hidden inviamo il valore della
variabile pass alla pagina chiamata dal form, ovvero cancscel.asp
-->
<input type=hidden name="pass"
value=<%=pass%>>
<input type="submit" name="vai" value="Cerca">
</form>
</center>
</body>
</html>
<%end if
rem Diamo ora la possibilità di cambiare la password
da web.
if s="cambia=Cambia+Password&pass=ok" then
sql="select * from tablibri"
Set OBJdbConnection =
Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver
(*.mdb)};dbq=c:\inetpub\wwwroot\domini\italystore\libri\libri.mdb"
Set RS=OBJdbConnection.Execute(sql)%>
<html>
<head>
<title>Modifica- by
Italystore.com</title>
</head>
<body bgcolor="#FfFfff">
<br>
<!-- Come al solito c’è un piccolo form che manda
la nuova password al file update.asp, insieme alla variabile pass che
contiene il valore "ok". In questo modo si evita che qualcuno si colleghi
direttamente alla pagina update.asp senza autorizzazione.-->
<form method="post"
action="update.asp?id=<%=rs("id")%>">
Password:
<input type=text name="upw"><br>
<input type=hidden name="pass" value="ok">
<input type=submit value="Aggiorna">
</form>
</body>
</html>
<%end if
%>
Ciò che abbiamo fatto finora non è molto difficile; anzi
si poteva evitare chiedendo all’amministratore di sistema di proteggere le
pagine tramite una password da server. La soluzione scelta, però, ha il
vantaggio di rendere indipendente il sito dall’amministratore e di
rimettere nelle vostre mani la decisione su chi debba accedere alle pagine
rilevanti, consentendovi inoltre di modificare i parametri in tempo
reale.
Ora passiamo a dare un’occhiata da vicino al file
canc.asp che si occupa di cancellare i record dal database; nelle prossime
lezioni approfondiremo le altre operazioni rese possibili da questo
file.
Prima, però, diamo uno sguardo al cancscel.asp:
CANCSCEL.ASP:
<html>
<head>
<title>Modifica- by
Italystore.com</title>
</head>
<body bgcolor="#FfFfff">
<%
rem Solita richiesta della variabile pass per
verificare che siamo autorizzati ad eseguire
rem questo script
pass=request.form("pass")
if pass="ok" then
rem Viene passato anche il valore di tit e inserito in
una variabile chiamata tit
tit=request.form("tit")
rem Si analizza il contenuto di tit: se essa è vuota
allora assumerà il valore "%", che significa rem "tutti" e consente di
visualizzare il contenuto di tutta la base dati.
if tit="" then tit="%"
sql="select * from tablibri where titolo like
'%"&tit&"%'"
Set OBJdbConnection =
Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver
(*.mdb)};dbq=c:\inetpub\wwwroot\domini\italystore\libri\libri.mdb"
Set RS=OBJdbConnection.Execute(sql)%>
<%
response.write ("<center><h2>Articoli
Presenti</h2><br><br><table
border=1><tr><td>Art. da
Cancellare</td><td>Autore</td><td
align=center>Titolo</td><td>Editrice</td><td>Prezzo</td><td>Cat.</td><td
align=center>Anno</td></tr>") %>
<%Do while NOT RS.EOF%>
<TR>
<td>
<!—Nella prima cella della tabella inseriamo un
piccolo form che chiama il file canc.asp passandogli il valore, inserito
nella variabile c, del campo ID del record. Insomma, indichiamo quale dei
record deve essere cancellato. Nella prima cella apparirà un tasto con
etichetta "Cancella" il quale, se premuto, effettuerà la cancellazione del
record. -->
<form method=post
action="canc.asp?c=<%=RS("ID")%>">
<input type="hidden" name="pass"
value="<%=pass%>">
<input type="hidden" name="tit"
value="<%=tit%>">
<input type="submit" name="Cancella"
value="Cancella">
</form>
</td>
<TD><%=RS("autore")%></TD>
<td><%=RS("titolo")%></td>
<td><%=RS("editrice")%></td>
<td>
<%=RS("prezzo")%>
</td>
<td><%=RS("cat")%></td>
<td><%=RS("anno")%></td>
</TR>
<%RS.MoveNext
Loop
RS.Close
OBJdbConnection.Close
%>
</table><br>
<form method=post action="modifiche.asp">
<input type=hidden name="pass" value="ok">
<input type=submit name="back" value="Torna al menu di
gestione">
</form>
<br>
</center>
</body>
</html>
<%else
rem Nel caso in cui il valore di pass sia diverso da
"ok", significa che stiamo tentando di usare rem il file cancscel.asp
senza essere passati attraverso la richiesta di password iniziale.
response.write "<h1>Accesso Negato
!</h1>"
end if
%>
Adesso abbiamo a video una tabella di uno o più libri,
contenete nella prima colonna un tasto con etichetta "CANCELLA"; se
premiamo il pulsante eseguiremo il file canc.asp, che eliminerà il record
corrispondente al libro.
CANC.ASP:
<%
rem Come sempre prendiamo i valori di tit e di pass
dal file precedente cancscel.asp
tit=request.form("tit")
pass=request.form("pass")
rem Solita verifica di autorizzazione
if pass="ok" then
rem La variabile canc prende il suo valore dalla
variabile c sulla stringa di comando.
rem C contiene il valore del campo contatore ID che
identifica univocamente il record nel
rem database
canc=request.querystring("c")
%>
<html>
<head>
<title>Cancella - by
Italystore.com</title>
<body bgcolor="#FfFfff">
<%
rem Cancella i record selezionati
Set OBJdbConnection2 =
Server.CreateObject("ADODB.Connection")
OBJdbConnection2.Open "driver={Microsoft Access Driver
(*.mdb)};dbq=c:\inetpub\wwwroot\domini\italystore\libri\libri.mdb"
rem L’unica rispetto al motore di ricerca è nella
stringa di comandi sql. Infatti, al posto
rem di "Select" abbiamo
"Delete", che significa "cancella". L’espressione sql tradotta
rem in
italiano significa quindi: "Cancella tutti i campi della tabella tablibri
in cui il campo
rem contatore ID è uguale al valore contenuto nella
variabile canc"
sql="Delete * from tablibri where ID="&canc
Set RS2=OBJdbConnection2.Execute(sql)
OBJdbConnection2.close
rem Dopo l’operazione di cancellazione viene
visualizzato un messaggio esplicativo e viene
rem data la possibilità
di tornare indietro alla pagina cancsel.asp tramite un form.
rem
Abbiamo scelto di usare un form e non un link perché in questo modo
possiamo passare i rem valori di pass e tit al file cancscel.asp.
%>
<H2>CANCELLAZIONE EFFETTUATA!</H2>
<br>
<form method=post action="cancscel.asp">
<input type="hidden" name="tit"
value="<%=tit%>">
<input type="hidden" name="pass" value="ok">
<input type="submit" name="goon" value="Continua a
cancellare">
</form>
</body>
</html>
<% else
rem Se pass è diverso da "ok"
response.write "<h1>Non sei autorizzato a
cancellare !</h1>"
end if %>
Siamo arrivati alla fine. Vi sembra tutto un po’ lungo e
complicato? A dire il vero, l’unica parte davvero ostica è rappresentata
dalle pagine di raccordo tra le scelte da effettuare (password,cancella,
aggiorna, ecc.) e l’esecuzione dei file asp Il resto è tutto sommato
semplice: il vero strumento per cancellare i record è costituito dai due
file canscel.asp e canc.asp; inoltre quest’ultimo file è una versione
modificata del motori di ricerca, già visto nelle precedenti lezioni.
Ora è tempo di concludere questa puntata e lasciarvi
sperimentare il nuovo codice che abbiamo appena esaminato. Nel prossimo
numero vedremo come inserire nuovi record nel database e impareremo
qualche altro comando asp. Alla prossima allora!