>> Torna all'Homepage <<
Contattaci Entra nei forum Cerca nel sito
News della settimana ASP: esempi di pagine dinamiche Trucchi e suggerimenti per il PC Manuali e guide I dossier e gli approfondimenti di AmicoPc Il sito della settimana I racconti di Armando Staffa Chi siamo
     
 

 

Scarica i file
Scarica i file
citati in questa pagina

 


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

rs.AddNew

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.

rs.update

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 >&nbsp;</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!

 

Insieme per un mondo migliore

Utenti connessi: 34

Invia questa pagina ad un amico

 

 

 

Chi siamo | Pubblicità | Note sulla privacy | Dicono di noi
Grafica cura di Paolo Omero
- Stefania Migliorucci

La riviera delle azalee