Asp, questi sconosciuti – Corso di asp parte V

Impariamo a creare una pagina web dinamica in asp

di Nanni Bassetti digitfor@gmail.com

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:

  1. Abbiamo creato un form di ricerca contenente i campi Titolo, Autore, Casa editrice, Categoria.
  2. 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.
  3. 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à

  1. Modificare in locale il file contenente i dati e poi caricarlo sulla macchina che gestisce le pagine web.
  2. 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!