Creare a mano un guestbook per il nostro sito non è così complicato come può sembrare. Un guestbook infatti, è un "libro" virtuale firmato dagli utenti di passaggio sul sito. Non abbiamo quindi, necessità di cancellare/modificare i messaggi scritti dagli utenti (visto che ognuno è libero di scrivere quello che vuole) e questo, dal lato tecnico, è un grande risparmio di lavoro.
Ma partiamo subito con la creazione del guestbook.
Concentriamoci prima di tutto sulla grafica: teniamo conto che dovranno essere
inserite queste informazioni:
- nome dell'autore del messaggio
- email dell'autore
- testo del messaggio
- data e ora del messaggio
- bottone "nuovo messaggio"
- bottone "invia messaggio"
- bottoni su/giu per lo scroll del campo di testo "messaggio"
- bottoni avanti/indietro per visualizzare i vari messaggi
Detto questo, possiamo impostare la grafica per il nostro guestbook.
Bene, per la parte riguardante il codice, ho deciso di suddividere in quattro
lezioni: in questa e nella prossima mi dedicherò al codice ASP e Flash per la lettura dei messaggi, mentre nelle ultime due, del codice ASP e Flash per
l'inserimento di nuovi messaggi.
Leggere i messaggi dal database con ASP
Ho pensato di strutture il database in questo modo:
Struttura database
il tutto inserito in un'unica tabella chiamata tbMsg.
Quando l'utente apre per la prima volta la pagina con il guestbook, deve poter vedere l'ultimo messaggio scritto nel guestbook. Niente di più semplice! Dopo aver scritto il codice che riguarda la connessione al database, assegniamo la stringa SQL seguente:
"SELECT * FROM tbMsg ORDER BY IDMsg DESC"
(DESC permette di ordinare in modo decrescente)
In questo modo avremo come primo record del RecordSet, l'ultimo record inserito nel database. È possibile visualizzare le informazioni del record in Flash, inviando le variabili tramite questa stringa:
Response.Write("id="
& rs("IDMsg") & "&mittente=" & _ rs("Mittente")
& "&email=" & rs("Email") & "&msg="
& _ rs("Msg") & "&datora=" & rs("Data")
& " - " & rs("Ora"))
Prima di procedere, salvate la pagina ASP e testatela (ovviamente dopo aver inserito manualmente almeno un record nel database). Il risultato a video dovrebbe apparire più o meno così:
id=1&mittente=ZofM&email=webmaster@flash5.it&msg=testo del messaggio&datora=05/03/2001-20.30.15
Arrivati a questo punto, siamo già in grado di visualizzare da Flash le informazioni sul primo, o meglio, l'ultimo messaggio inserito. Ora, cerchiamo di pensare ad un modo su come agire nel caso in cui l'utente desidera selezionare il messaggio precedente o successivo. A mio parere, la strada migliore è utilizzare il metodo .Find
dell'oggetto RecordSet. Questo metodo permette di spostarci nel RecordSet e selezionare il record desiderato.
Supponiamo di avere 25 record all'interno del database. Il primo (l'ultimo) record visualizzato ha IDMsg uguale a 25. L'utente, da Flash, clicca su "messaggio precedente".
Dobbiamo fare in modo che da Flash venga inviato sia l'id del record corrente che il valore "next" o "prev" (successivo o precedente) assegnato alla variabile muovi (l'id del record corrente è già stato inviato nel momento in cui inviamo per la prima volta le info a Flash). Ricevendo questi dati, in ASP risulta semplice scorrere all'interno del db. Ecco come:
'Controllo che id e muovi siano stati inviati
if request.querystring("id")<>"" and request.querystring("muovi")<>"" then
'Valori inviati, procedo allo spostamento del cursore
rs.find "IDMsg=" & request.querystring("id")
'Controllo il valore di muovi
if request.querystring("muovi")="next" then
'Record successivo (ovvero precedente nel RecordSet)
rs.movePrevious
'Controllo se è all'inizio del RecordSet
if rs.bof then rs.moveNext
else
'Record precedente (ovvero successivo nel RecordSet)
rs.moveNext
'Controllo se è alla fine del RecordSet
if rs.eof then rs.movePrevious
end if
end if
Da Flash riceviamo id uguale a 25 e muovi uguale a "prev". Il primo controllo è per evitare di spostarsi tra i record la prima volta che l'utente apre la pagina. Se la condizione è vera, allora viene ricercato il record con IDMsg uguale a id. Una volta che il cursore si è posizionato, gestiamo il suo spostamento: avanti o indietro. Questo è possibile tramite i metodi .moveNext
e .movePrevious
.
Essendo, in questo caso, muovi uguale a "prev", viene saltata la prima condizione e si sposta in avanti il cursore nel RecordSet con rs.moveNext
.
Viene poi fatta la verifica sulla fine del RecordSet. Se la condizione risulta vera (End Of File) allora ritorniamo indietro di un record: if rs.eof then rs.movePrevious
La stessa cosa, ma al contrario, viene fatta per lo spostamento "successivo". In questo caso però non viene verificata la fine del file, bensì l'inizio tramite: if rs.bof then rs.moveNext
Dopo di ciò segue la chiusura del RecordSet.