|
ASP: la guida introduttiva
Capitolo 12 - Un motore di ricerca con ASP (Parte 2)
12.0 Sui pannelli
di controllo...
12.1 Il
form HTML
12.2 Inserimento
del nuovo record
12.3 Conclusioni
e spunti
12.0 - Sui pannelli di controllo...
Dopo
aver realizzato un basilare servizio di archiviazione,
indicizzazione e ricerca di pagine Web (cfr. Capitolo 11)
si conclude in questa seconda parte il tutorial relativo
all'approfondimento delle tecniche di utilizzo del componente
ADO (ActiveX Data Object). Nel
corso del capitolo precedente, infatti, sono state prese in
esame le tematiche relative alla possibilità di eseguire ricerce
tra le informazioni archiviate all'interno di una comune fonte
di dati di Access, e lo studio era legato soprattutto
all'utilizzo del particolare oggetto di ADO denominato
Connection, in grado appunto di
stabilire connessioni con un database e di estrarre da esso,
seguendo un criterio dettato mediante SQL, una serie di dati
ritenuti interessanti per l'applicazione. In questo capitolo lo
studio si incentrerà maggiormente sull'oggetto
Recordset, sempre di ADO, utile per
effettuare inserimenti di nuove informazioni all'interno della
stessa fonte di dati utilizzata per l'esempio precedente. In
parole più spicciole quello che sarà realizzato nei paragrafi
successivi altro non sarà che un pannello
di controllo, funzionante su interfaccia Web, utile
all'ipotetico amministratore del motore di ricerca per
aggiornare i record presenti nell'archivio precedentemente
creato. Si tratta di una funzionalità molto importante per i
servizi di questo genere, in quanto permette di aggiornare i
dati originariamente specificati in maniera remota, ossia senza
dover disporre di una copia del database sulla propria macchina
di lavoro, interagendo perciò direttamente con quanto
disponibile in rete. Senza tale pannello di controllo l'aggiunta
di una nuova pagina all'interno del database utilizzato
risulterebbe un'operazione piuttosto laboriosa: bisognerebbe
infatti inserire il nuovo record agendo direttamente con Access
su una copia locale di archivio.mdb,
per poi sovrascrivere la copia in rete tramite, ad esempio, un
accesso FTP. Si tratta di un metodo altamente sconveniente, in
quanto per aggiungere pochi caratteri è necessario modificare,
trasportare e sovrascrivere un archivio che potenzialmente può
avere dimensioni rilevanti, causando anche dei momentanei
malfunzionamenti del servizio nel momento in cui si sovrascrive
la copia in rete. Un pannello di controllo via Web, invece,
rende notevolmente più semplice questa serie di operazioni.
L'inserimento di un nuovo record, in questo caso, può essere
eseguito semplicemente collegandosi ad una pagina Web, tramite
un normale browser, specificando quindi mediante un form HTML le
specifiche del nuovo record e quindi aggiornando in tempo reale
direttamente la copia disponibile in rete, senza causare disagi,
senza dover utilizzare altri aggiuntivi, e senza che
siano richieste particolari conoscenze tecniche. Il più delle
volte, infatti, capita che chi gestisca un servizio non sia la
stessa persona che lo ha realizzato. Si immagini ad esempio che
il motore di ricerca oggetto di questo studio stia venendo
realizzando per un ipotetico committente, che di programmazione
Web, di ASP, di ADO e di tutte le tematiche collegate è
completamente digiuno. Tramite un pannello di controllo il
cliente potrà aggiornare il database realizzato dallo
sviluppatore senza doversi rivolgere allo sviluppatore stesso.
Inoltre un pannello di controllo Web permette l'aggiornamento
dei dati da una qualsiasi postazione che abbia accesso ad
Internet e disponga di un comune Web browser, mentre
l'aggiornamento in locale richiede almeno l'utilizzo di una
copia di Access e di un client FTP, strumenti solitamente non in
mano all'utente medio. Per concludere: quando si sviluppa
un'applicazione Web basata sull'accesso ad una fonte di dati che
necessiti di continui aggiornamenti la realizzazione di un
pannello di controllo via Web è quasi un passo obbligato.
12.1 - Il form HTML
Premesso quanto detto nel paragrafo precedente ci si accinge ora
allo sviluppo di un basilare pannello di controllo in grado di
aggiornare archivio.mdb aggiungendo
in esso un nuovo record alla volta, specificato dal gestore del
servizio attraverso una semplice pagina Web. Si torni quindi a
lavorare nella stessa cartella utilizzata per testare i codici
presentati nel Capitolo 11, in quanto in questo momento si sta
completando l'esempio precedente, e non si sta realizzando
perciò un codice di per sé indipendente. Come già visto più
volte un utente è in grado di passare dei dati ad una pagina Web
sfruttando il costrutto FORM messo a disposizione da HTML. Come
prima cosa, quindi, sarà necessario realizzare un semplice
modulo in grado di consentire all'amministratore del servizio di
specificare i dati che insieme costituiscono il record che si
intende accodare a quelli già presenti nell'archivio. Si
realizzi quindi la pagina pannello.htm
come segue:
<html>
<head>
<title>Pannello di controllo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<p><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">BENVENUTO
NEL PANNELLO DI CONTROLLO!</font></b></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Grazie a questo
pannello è possibile inserire nuovi documenti all'interno del motore
di ricerca. Utilizza il modulo sottostante.</font></p>
<p> </p>
<form name="" method="post" action="inserisci_record.asp">
<table width="350" border="0" cellspacing="1" cellpadding="0">
<tr>
<td align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Password:</b></font></td>
<td align="right"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="password" name="password" size="30">
</font></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Titolo:</b></font></td>
<td align="right"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="titolo" size="30">
</font></td>
</tr>
<tr>
<td align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>URL:</b></font></td>
<td align="right"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="url" size="30" value="http://">
</font></td>
</tr>
<tr>
<td align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Descrizione:</b></font></td>
<td align="right"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="descrizione" size="30">
</font></td>
</tr>
<tr>
<td align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Keywords*:</b></font></td>
<td align="right"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="keywords" size="30">
</font></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr align="center">
<td colspan="2"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="submit" value="AGGIUNGI IL RECORD">
</font></td>
</tr>
</table>
</form>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>(*)</b> le
parole chiave devono essere separate tra di loro tramite uno spazio</font></p>
</div>
</body>
</html>
Analizzando il codice sopra riportato è possibile estrarre le
seguenti informazioni relativamente al form proposto.
-
action="inserisci_record.asp"
- questo significa che i dati inseriti verranno passati al
documento inserisci_record.asp,
del quale ci si occuperà nel prossimo paragrafo
-
method="post" - il metodo
utilizzato per l'invio dei dati è POST.
All'interno di inserisci_record.asp,
quindi, potranno essere recuperati utilizzando la sintassi
Request.Form("nomeCampo")
-
campo password
- naturalmente il pannello di controllo non deve essere
sfruttato da tutti, ma solo dalle persone autorizzate. Per
questo è prevista l'autentificazione mediante passoword.
-
campo titolo - qui andrà
specificato il titolo della pagina Web da indicizzare
-
campo url
- qui andrà specificato l'url della pagina Web da indicizzare
-
campo descrizione
- qui andrà specificata una breve descrizione per la pagina
Web da indicizzare
-
campo keywords - qui andrà
specificata la lista delle parole chiave da associare alla
pagina Web che si deve indicizzare
Si
osservi inoltre come gli ultimi quattro campi descritti (titolo,
url,
descrizione e keywords)
corrispondano esattamente ai quattro campi scelti per
rappresentare una pagina Web all'interno del database. Come è
facile intendere il contenuto di questi campi verrà dunque
prelevato ed inserito così come è all'interno dell'archivio.
12.2 - Inserimento del nuovo record
I
compiti di inserisci_record.asp, a
questo punto, possono essere riassunti nei seguenti passi:
-
recupero dei dati presentati nel form
-
validazione della password inserita
-
validazione dei quattro campi che costituiscono il nuovo
record da inserire
-
nel caso i precedenti controlli abbiano dato buon esito,
inserimento del nuovo record all'interno dell'archivio
-
visualizzazione di un responso dell'operazione nell'output
Tenendo a mente quanto detto nel capitoli precedenti
relativamente all'utilizzo di ADO se ne ricava il seguente
codice:
<%@ LANGUAGE = JScript %>
<%
// SPECIFICA QUI LA PASSWORD
var password_di_accesso = "pannello";
// RECUPERO DEL CONTENUTO DEL FORM
var password = String(Request.Form("password"));
var titolo = String(Request.Form("titolo"));
var url = String(Request.Form("url"));
var descrizione = String(Request.Form("descrizione"));
var keywords = String(Request.Form("keywords"));
// VARIABILI DI UTILITA'
var errore = 0;
var fatto = false;
// CONTROLLO PASSWORD
if (password!=password_di_accesso) errore = 1;
else {
// CONTROLLO CAMPI
if (titolo.length<1 || titolo.length>100) errore = 2;
if (url.length<1 || url.length>100) errore = 2;
if (descrizione.length<1) errore = 2;
if (keywords.length<1) errore = 2;
if (errore==0) {
// INSERIMENTO DEL NUOVO RECORD
stringaDiConnessione = "driver={Microsoft Access Driver (*.mdb)};dbq=";
stringaDiConnessione += Server.MapPath("archivio.mdb");
conn = new ActiveXObject("ADODB.Connection");
conn.Open(stringaDiConnessione);
rs = new ActiveXObject("ADODB.Recordset");
rs.Open("pagineweb",conn,3,3);
rs.AddNew();
rs("titolo") = titolo;
rs("url") = url;
rs("descrizione") = descrizione;
rs("keywords") = keywords;
rs.Update();
rs.Close();
conn.Close();
fatto = true;
}
}
%>
<html>
<head>
<title>Inserimento di un nuovo record</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<% if (errore==1) { %>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#660000"><b>ERRORE #1</b>: PASSWORD NON CORRETTA</font></p>
<% } %>
<% if (errore==2) { %>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#660000"><b>ERRORE #2</b>: CAMPI NON VALIDI</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Si ricordano le lunghezze massime previste:</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<b>TITOLO</b>: compreso tra 1 e 100 caratteri<br>
<b>URL</b>: compreso tra 1 e 100 caratteri<br>
<b>DESCRIZIONE</b>: almeno un carattere<br>
<b>KEYWORDS</b>: almeno un carattere
</font></p>
<% } %>
<% if (errore!=0) { %>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">< <a href="javascript:history.back()">TORNA INDIETRO</a> ></font></p>
<% } %>
<% if (fatto) { %>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>OPERAZIONE ESEGUITA CON SUCCESSO!</b></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">< <a href="pannello.htm">INSERISCI ALTRO RECORD</a> ></font></p>
<% } %>
</div>
</body>
</html>
Tralasciando i commenti relativi alla forma scelta per
realizzare il documento e alle tecniche sfruttate per eseguire i
controlli si passi all'analisi dei due punti chiave di
inserisci_record.asp. Il primo è
relativo all'autentificazione della password. Si è scelta una
via molto semplice: la password corretta è stata memorizzata
direttamente all'interno di una variabile JScript (password_di_accesso)
facente parte del codice stesso. Si tratta di una soluzione poco
pratica nei termini del servizio (se l'amministratore volesse
modificare la propria password dovrebbe mettere mano al codice,
con risultati spesso catastrofici!), ma comunque conveniente per
l'esempio in fase di studio, il cui obiettivo non è quello di
descrivere come si realizzino zone ad accesso limitato. Un tema
del genere sarà argomento di studio nei capitoli 15 e 16. La
seconda parte interessante è quella relativa all'accesso al
database e all'inserimento del nuovo record:
stringaDiConnessione = "driver={Microsoft Access Driver (*.mdb)};dbq=";
stringaDiConnessione += Server.MapPath("archivio.mdb");
conn = new ActiveXObject("ADODB.Connection");
conn.Open(stringaDiConnessione);
rs = new ActiveXObject("ADODB.Recordset");
rs.Open("pagineweb",conn,3,3);
rs.AddNew();
rs("titolo") = titolo;
rs("url") = url;
rs("descrizione") = descrizione;
rs("keywords") = keywords;
rs.Update();
rs.Close();
conn.Close();
La
parte evidenziata in verde è identica a quella già descritta nel
Capitolo 11, il cui scopo è quello di utilizzare l'oggetto
ADODB.Connection per connettersi ad
archivio.mdb. La parte in
arancione, invece, evidenzia l'inserimento del nuovo record
all'interno della tabella pagineweb,
mediante l'utilizzo dell'oggetto
ADODB.Recordset.
12.3 - Conclusioni e spunti
Si
conclude qui questo tutorial dedicato all'approfondimento delle
tecniche di accesso alle fonti di dati supportate da ADO. E'
stato anche fornito un approccio alla realizzazione dei pannelli
di controllo per interfaccia Web, strumenti da sempre apprezzati
dai clienti delle applicazioni. Si invita il lettore ad
approfondire l'argomento completando il pannello proposto con
l'aggiunta di altri servizi, quali ad esempio la possibilità di
cancellare record precedentemente inseriti (comando
DELETE di SQL) e quella di
modificare i contenuti di un record già esistente (comando
UPDATE di SQL). |