|

CREARE E GESTIRE UN ‘LIBRO DEGLI OSPITI’ (GUESTBOOK)

Ora
che abbiamo capito le procedure mediante cui prelevare,
aggiungere o eliminare informazioni da un database,
vediamo di dar loro un’utilità pratica.
Facciamo
l’esempio del guestbook, ovvero una sezione in
cui i visitatori del sito possano lasciare i propri
commenti e i propri dati. In genere si ricorre a siti
che offrono, quasi sempre in maniera gratuita, questo
servizio.
Meglio
sarebbe gestirlo personalmente, in modo da personalizzarne
l’interfaccia grafica e il funzionamento stesso.
Per
comprenderne il funzionamento si faccia riferimento
alla sezione ‘guestbook’ del sito AmicoPc, all’indirizzo
http://www.amicopc.com/guestbook/leggi.asp
Prima
di cominciare vale solo la pena ricordare che un ‘libro
degli ospiti’ si compone di due sezioni: ‘firma il nostro
libro degli ospiti’ e ‘consulta il nostro libro degli
ospiti’.
Anche
noi quindi utilizzeremo questa procedura.
Avremo
pertanto bisogno di sei file: firma.htm, firmato.htm,
errore.asp, registra.asp, leggi.asp e il database ‘guest.mdb’.
I
primi quattro servono per aggiungere i commenti al database
‘guest.mdb’, mentre il quinto serve per leggere i commenti
stessi.
GUEST.MDB
Anche
in questo caso utilizziamo un database di Ms Access
(97 o 2000) che dovrà contenere una tabella (di nome
‘guest’) con i seguenti campi:
-
id (ovvero il campo contatore)
- nome
(campo ‘testo’ che conterrà il nome del visitatore)
- cognome
(campo ‘testo’ in cui, se inserito nel modulo, verrà
memorizzato il cognome)
- email
(campo ‘testo’ che conterrà il suo indirizzo email)
- homepage
(campo ‘testo’ che conterrà in cui, se se inserito
nel modulo, verrà memorizzato l’indirizzo del sito
del visitatore)
- commenti
(campo ‘memo’ in cui saranno inseriti i commenti
del visitatore)
FIRMA.HTM
Questo
è il modulo che il visitatore compila per lasciare un
commento nel guestbook. Lo
possiamo creare normalmente con qualsiasi editor html,
avendo cura di inserire un form che faccia riferimento
alla pagina ‘registra.asp’ con il metodo ‘post’.
Tale
modulo dovrà contenere i seguenti campi:
- campo
testo che chiameremo ‘form_nome’
- campo
testo che chiameremo ‘form_cognome’
- campo
testo che chiameremo ‘form_email’
- campo
testo che chiameremo ‘form_homepage’
- campo
testo a scorrimento che chiameremo ‘form_commenti’
Di
tutti questi campi gli unici due che consideriamo obbligatori
sono il campo ‘form_nome’ e il campo ‘form_commenti’
Il
codice html di questa pagina potrebbe essere il seguente:
|
<html>
<body>
<form
method="POST" action="registra.asp">
<p>Nome<br>
<input
type="text" name="form_nome"
size="20"></p>
<p>Cognome<br>
<input
type="text" name="form_cognome"
size="20"></p>
<p>Email<br>
<input
type="text" name="form_email"
size="20"></p>
<p>Homepage<br>
<input
type="text" name="form_homepage"
size="20"></p>
<p>Commenti<br>
<textarea
rows="2" name="form_commenti"
cols="20"></textarea></p>
<p><input
type="submit" value="Invia"
name="B1"><input type="reset"
value="Reimposta" name="B2"></p>
</form>
</body>
</html>
|
FIRMATO.HTM
Una
volta compilato il modulo viene caricata una pagina
di conferma, 'firmato.htm' appunto.
Si tratta di un semplice file html che ringrazia il
visitatore per aver firmato il nostro guestbook.
|
<p
align="center">Grazie per aver firmato
il nostro libro degli ospiti.</p>
<p
align="center">Arrivederci!</>
|
REGISTRA.ASP
Una
volta compilato il modulo presente nella pagina appena
create, viene caricata la pagina ‘registra.asp’ che,
innanzitutto prende i dati dal modulo (mediante la funzione
‘request.form’ che già abbiamo visto) e li memorizza
nella relative variabili
|
<%
dim
nome1
dim
cognome1
dim
email1
dim
homepage1
dim
commenti1
nome1
= request.form("form_nome")
cognome1
= request.form("form_cognome")
email1
= request.form("form_email")
homepage1
= request.form("form_homepage")
commenti1
= request.form("form_commenti")
|
A
questo punto verifichiamo che siano stati compilati
i campi ‘form_nome’ e ‘form_commenti’ del modulo stesso.
In
caso contrario carichiamo la pagina ‘errore.asp’ passandole
il parametro ‘error’ (per il codice della pagina ‘error.asp’
si veda più sotto).
|
if
nome1 = "" then
response.redirect("error.asp?error=1")
end
if
if
commenti1 = "" then
response.redirect("error.asp?error=2")
end
if
|
Nel
caso in cui invece le variabili nome1 e commenti1 non
siano vuote (quindi i relativi campi del modulo sono
stati compilati), controlliamo le altre variabili. Infatti
abbiamo detto che i due campi citati sono gli unici
obbligatori del form: se vuole, l’utente può segnalare
il proprio cognome, la propria email e l’indirizzo del
proprio sito. Se
però non compila questi campi, le relative variabili
che abbiamo appena creato saranna vuote.
Dato
che non è possibile aggiungere un record contenente
campi vuoti, occorre sostituire a tali campi vuoti un
qualsiasi carattere: per convenzione useremo il simbolo
'+'
|
if
cognome1 = "" then
cognome1
= "+"
end
if
if
email1 = "" then
email1
= "+"
end
if
if
homepage1 = "" then
homepage1
= "+"
end
if
|
Sempre
grazie alla funzione ‘if... then... end if’ controlliamo
che tali variabili non siano vuote. Nel caso in cui
lo siano, le variabili assumeranno come valore il carattere
‘+’.
Ora
creiamo la solita connessione con il database ‘guest.mdb’
che abbiamo memorizzato nella sottocartella ‘database’
del nostro web
|
Dim
Conn
Set
Conn = Server.CreateObject("ADODB.Connection")
conn.Open
"driver={Microsoft Access Driver (*.mdb)};dbq="
& server.mappath("database/guest.mdb")
Dim
rs
Set
rs = Server.CreateObject("ADODB.Recordset")
|
Come
già fatto in precedenza, selezioniamo i valori presenti
nella cartella ‘guest’
|
rs.Open
"select * from guest", conn, 3, 3
|
A
questo punto creiamo un nuovo record all’interno di
tale tabella mediante il comando
Ora
scriviamo i dati prelevati dal modulo (e memorizzati
nelle variabili) all’interno del database
|
rs.Fields("nome")=nome1
rs.Fields("cognome")=cognome1
rs.Fields("email")=email1
rs.Fields("homepage")=homepage1
rs.Fields("commenti")=commenti1
|
In
questo modo nel campo ‘nome’ verrà inserito il valore
preso dalla variabile ‘nome1’ (che a sua volta ha preso
i dati dal campo ‘form_nome’ del modulo); nel campo
‘cognome’ inseriremo il valore della variabile ‘cognome1’
e così via...
Una
volta terminata l’aggiunta dei dati aggiorniamo il database.
Come
tutti i guestbook che si rispettano anche noi vogliamo
che, ad ogni aggiunta di un commento di un visitatore,
ci venga inviata un’email contenente i dati inseriti
nel guestbook stesso. In
questo modo sapremo in tempo reale quando il nostro
‘libro degli ospiti’ viene firmato.
Per
l’invio dell’email utilizzeremo il cosidetto Cdonts:
nel caso in cui il vostro server non lo supporti dovrete
ignorare questa parte e passare direttamente alla chiusura
del database.
In
caso contrario ecco come si presenta il codice da inserire
|
Dim
email
Set
email = CreateObject("CDONTS.NewMail")
email.From
= email1
email.To
= "tuo_indirizzo@email"
email.Subject
= "Nuova firma sul guestbook"
email.MailFormat
= 0
email.Body
= commenti1
email.Send
set
email = Nothing
|
Vediamo
come è composto:
- Dim
email: creiamo una variabile che chiamiamo appunto
email
- email.From
= email1:
in questo modo l’indirizzo email inserito risulta
come mittente del messaggio
- email.To
= tuo_indirizzo_email : qui va inserito l’indirizzo
a cui inviare l’email di segnalazione
- email.Subject
= "Nuova firma sul guestbook":
questo è l’oggetto dell’email che vi giungerà. Come
vedete il testo deve essere racchiuso dalle virgolette
doppie.
- email.MailFormat
= 0: qui specifichiamo il formato dell’email
(0 = solo testo; 1 = formato html)
- email.Body
= commenti:
questo è il testo dell’email, ovvero il commento
del visitatore
- email.Send:
ora inviamo l’email
- set
email = Nothing:
svuotiamo la variabile utilizzata
Una
volta inviata l’email chiudiamo recordset e connessione.
|
RS.Close
Set
RS=Nothing
conn.Close
Set
conn=Nothing
|
Come
utlima cosa carichiamo la pagina di conferma
|
response.redirect("firmato.htm")
%>
|
ERROR.ASP
Questa
pagina viene caricata nel caso in cui il visitatore
non abbia inserito il proprio nome o i propri commenti
all’interno del modulo.
Come
già abbiamo visto nella sezione ‘verifica di un modulo’,
anche qui preleviamo il valore del parametro ‘error’
contenuto nella stringa di collegamento utilizzata per
caricare tale pagina e ci regoliamo di conseguenza
|
<%
dim
error1
error1
= request.querystring("error")
if
error1 = "1" then
response.write("<font
face=‘Verdana’ size=‘2’> <b>Attenzione!</b>
<br>Non hai compilato il campo NOME!</font>")
end
if
if
error1 = "2" then
response.write("<font
face=‘Verdana’ size=‘2’> <b>Attenzione!</b>
<br>Non hai compilato il campo COMMENTI!</font>")
end
if
%>
|
Una
volta pronte le pagine per la ‘firma del libro degli
ospiti’ non rimane che creare la pagina per consultarlo.
Tale
pagina avrà nome
LEGGI.ASP
Per la visualizzazione dei record del database ‘guest.mdb’
useremo un file ASP con paginazione, con dieci risultati
per pagina (in modo da non appesantirne troppo la consultazione).
Riprendiamo lo stesso codice utilizzato nella precedente
sezione ‘Paginazione’ (per la spiegazione del codice
e i relativi commenti vi rimando alle pagine precedenti)
|
<!--
#INCLUDE FILE="adovbs.inc" -->
<%
Dim
conn
'La solita variabile di connessione
Dim
iPageSize
'Numero di record da visualizzare per ogni pagina
Dim
iPageCount
'Numero di pagine totali che otteniamo dalla query
Dim
iPageCurrent
'Pagina corrente
Dim
strOrderBy
'Parametro in base a cui definire l'ordinamento
Dim
strSQL
'Comando da eseguire per effettuare la ricerca
Dim
RS
'Il nostro solito recordSet
Dim
iRecordsShown
'Variabile usata per definire i record mostrati
Dim
nome1
'Variabile in cui memorizziano il nome del visitatore
che prendiamo dal database
Dim
cognome1
'Variabile in cui memorizziamo il suo cognome
Dim
email1
'Variabile in cui memorizziamo la sua email
Dim
homepage1
'Variabile in cui memorizziamo l’indirizzo del
suo sito
Dim
commenti1
'Variabile in cui memorizziamo i commenti che
ha inserito nel database
iPageSize
= 10
'NUMERO DI RECORD MOSTRATI PER PAGINA!
If
Request.QueryString("page") = ""
Then
iPageCurrent = 1
Else
iPageCurrent = CInt(Request.QueryString("page"))
End
If
If
Request.QueryString("order") = ""
Then
strOrderBy = "id"
Else
strOrderBy = Request.QueryString("order")
End
If
Set
Conn = Server.CreateObject("ADODB.Connection")
conn.Open
"driver={Microsoft Access Driver (*.mdb)};dbq="
& server.mappath("database/guest.mdb")
Set
RS = Server.CreateObject("ADODB.Recordset")
sql
= "SELECT * FROM guest ORDER BY " &
strOrderBy & " DESC;"
RS.Open
sql, conn, adOpenKeyset
RS.PageSize
= iPageSize
RS.CacheSize
= iPageSize
iPageCount
= RS.PageCount
If
iPageCurrent > iPageCount Then iPageCurrent
= iPageCount
If
iPageCurrent < 1 Then iPageCurrent = 1
If
iPageCount = 0 Then
Response.Write("<p
align center><font face=‘verdana’ size=‘2’>Nessuno
ha ancora firmato il mio Libro degli Ospiti. <br>Che
ne diresti di essere tu il primo?</font></p>")
Else
RS.AbsolutePage = iPageCurrent
iRecordsShown
= 0
Do
While iRecordsShown < iPageSize And Not RS.EOF
|
La
parte mostrata da questo punto fino a ‘iRecordsShown
= iRecordsShown + 1’ viene ripetuta per dieci volte
(ovvero per ogni record visualizzato).
Cominciamo
a memorizzare nelle variabili le informazioni prelevate
dal database
|
nome1
= rs("nome")
cognome1
= rs("cognome")
email1=
rs("email")
homepage1=
rs("homepage")
commenti1=
rs("commenti")
%>
|
A
questo punto cominciamo a mostrare i dati prelevati
dal database. Dato
che li abbiamo selezionati con ‘id DESC’ (ovvero in
base al campo contatore decrescente), i commenti più
recenti saranno visualizzati per primi.
Creiamo
quindi una tabella in cui nella colonna a sinistra scriveremo
‘nome’, ‘cognome’, ‘email’, ‘homepage’, ‘commenti’.
Ricordiamo
però che gli unici campi obbligatori sono ‘nome’ e ‘commenti’.
Gli altri campi potrebbero essere vuoti: quindi facciamo
in modo che le righe della tabella siano visualizzate
solo se necessario.
Pertanto
avremo sicuramente due righe (‘nome’ e ‘commenti’) e,
in base alle scelte del visitatore, potremo avere anche
le righe ‘email’, ‘email’ e ‘homepage’.
Per
far questo utilizziamo ancora una volta la funzione
‘if... then... end if’, unita a ‘response.write’.
Come
già abbiamo accennato, quest’ultima funzione serve sia
a mostrare il contenuto di una variabile, sia a mostrare
un testo a nostra scelta. Con opportuni accorgimenti
(ovvero sostituendo le virgolette doppie con l’apice
o apostrofo) possiamo fare in modo di visualizzare,
all’interno del codice ASP, normale codice html, tra
cui, appunto, le righe della tabella in questione.
Cominciamo
a creare la prima riga della tabella in cui, nella prima
colonna, scriviamo ‘Nome’ mentre nella seconda colonna
visualizziamo il contenuto della variabile ‘nome1’.
|
<table
width="100%" border="0" cellspacing="0"
cellpadding="0" align="center">
<tr>
<td><font
face = "verdana" size = "2">
Nome</font></td>
<td><font
face = "verdana" size = "2"
><% = nome1 %></font></td>
</tr>
|
A
questo punto, mediante la funzione ‘if... then... end
if’, controlliamo che cognome1’ sia diverso da ‘+’:
infatti quando il campo ‘form_cognome’ e gli altri campi
non obbligatori del modulo sono lasciati vuoti, tali
‘vuoti’ sono colmati dal carattere ‘+’. Quindi se il
visitatore ha inserito il proprio cognome, tale campo
sarà diverso dal carattere ‘+’.
Se il cognome1 è diverso da "+" (if
cognome1 <> "+") allora creiamo una
seconda riga in cui scrivere, nella prima colonna la
parola ‘Cognome’ mentre nella seconda colonna mostriamo
il valore preso dal database e memorizzato nella variabile
‘cognome1’.
Nel
caso in cui cognome1 = "+" questa parte
di codice viene saltata e la riga della tabella non
è nemmeno mostrata.
|
<%
if
cognome1 <>"+" then
response.write("<tr><td
width='50%'><font face = 'verdana' size
= '2' >Cognome</font></td><td
width=‘50%’><font face = ‘verdana’ size
= '2' > ")
response.write(cognome1)
response.write("</font></td></tr>")
end
if
|
Allo
stesso modo per ‘email1’, aggiungendo però il fatto
che tale email deve essere ‘cliccabile’, quindi deve
avere un link del tipo
<a
href="mailto:indirizzo@email.com">indirizzo@email.com</a>
Naturalmente ‘indirizzo@email.com’ è l’indirzzo email
prelevato dal nostro database e che abbiamo memorizzato
nella variabile ‘email1’.
Pertanto
se email1<>"+" (quindi il visitatore
ha inserito il proprio indirizzo email) avremo un'ulteriore
riga della tabella contenente appunto l'email del visitatore.
|
if
email1<>"+" then
response.write
"<tr><td width='50%'><font
face = 'verdana' size = '2' >Email</font></td><td
width='50%'><font face = 'verdana' size
= '2' ><a href='mailto:"&email1&"'>"&
email1 &"</a></font></td></tr>"
end
if
|
Sicuramente
avrete notato che per mostrare l'indirizzo email ho
utilizzato il consueto response.write.
In questo caso però la struttura è leggermente
diversa: infatti anzichè fare un response.write
per ogni variabile e per ogni pezzo di codice ho
raggruppato tutto in un unica stringa.
Infatti apro le virgolette e comincio ad inserire il
codice html che desidero sia visualizzato. Al momento
di visualizzare il contenuto di una variabile, chiudo
le virgolette (altrimenti vedrei il nome della
variabile e non il suo contenuto), aggiungo l' &
(in modo da non interrompere la stringa) e inserisco
il nome della variabile. Se dopo la variabile voglio
visualizzare altro codice dovrò riscrivere l'
& seguita dall virgolette, quindi il codice
e finalmente chiudo tutto con le virgolette.
Schematizzando avremo
response.write
"testo" & variabile & "testo"
Per quanto riguarda invece l’indirizzo del sito del
visitatore, avremo che il relativo link sarà nella forma
<a
href="http://www.indirizzo.com"> http://www.indirizzo.com</a>
dove, anche in questo caso, ‘http://www.indirizzo.com’
è prelevato dal database e memorizzato in ‘homepage1’.
Quindi
se homepage1<>"+" (ovvero il visitatore
ha inserito l’indirizzo del proprio sito) creiamo un'altra
riga. Altrimenti passiamo direttamente alla visualizzazione
die 'commenti'
|
if
homepage1<>"+" then
response.write("<tr><td
width='50%'><font face = 'verdana' size
= '2' >Homepage</font></td><td
width='50%'><font face = 'verdana' size
= '2' > <a href='"&
homepage1 &"'
target='_blank'>"& homepage1
&"</a>
</font></td></tr>"
end
if
%>
|
Come
ultima cosa visualizziamo i commenti che il visitatore
ha inserito nel modulo. Dato che si trattava di un campo
obbligatorio, la variabile ‘commenti1’ sarà necessariamente
diversa da ‘+’, quindi inutile verificarla mediante
la funzione ‘if... then... end if’.
Quindi
il codice da inserire diventa
|
<tr><td
width="50%"><font face= "verdana"
size="2">Commenti</font></td>
<td
width="50%"> <font face="verdana"
size="2"><% = commenti1 %>
</table></font>
<p
> </p>
|
A
questo punto non rimane che spostarci al record successivo
del nostro database e ripetere la procedura riportata.
Fatto
questo si chiude la connessione e si svuota il RecordSet
|
<%
iRecordsShown
= iRecordsShown + 1
RS.MoveNext
Loop
End
If
RS.Close
Set
RS = Nothing
Conn.Close
%>
|
Creiamo
ora i link per andare Avanti e Indietro
|
<%
If
iPageCurrent <> 1 Then
%>
<a
href="leggi.asp?page=<%= iPageCurrent
- 1 %>&order=<%= Server.URLEncode(strOrderBy)
%>"> Indietro</a>
<%
End
If
%><br>
<%
If
iPageCurrent < iPageCount Then
%>
<a
href="leggi.asp?page=<%= iPageCurrent
+ 1 %>&order=<%= Server.URLEncode(strOrderBy)
%>">Avanti</a>
<%
End
If
%>
|
A
questo punto il nostro ‘Libro degli ospiti’ è pronto
all’uso!
|