|
|
|
|
|

|
Cosa manca in questo portale |
|
|
|
|
|
|

|
LOGIN |
|
|
|
|
|
|
|
|
|
|
Data : 09-03-2003 |
Autore : Luca Ruggiero |
Tipo : Tutorial | Settore : asp |
Titolo : Creazione di un guestbook |
|
Si ringrazia LUKEONWEB per la gentile concessione dell'articolo
:-Introduzione-:
Un guestbook, detto anche libro degli ospiti, è un sistema che molti siti utilizzano per permettere ai propri utenti di lasciare un messaggio o un commento.
Si tratta di un servizio molto grazioso e di semplice realizzazione, si dispone di un modulo da compilare per inserire una serie di dati richiesti, di una pagina in cui i messaggi vengono mostrati in ordine cronologico inverso (dal più recente fino al primo), e di un file che, lavorando in back-office, effettua in primis un controllo sulla validità dei dati richiesti nel modulo, poi, a condizioni soddisfatte, effettua l'inserimento del messaggio.
:-Cosa ci serve per realizzare il guestbook-:
Come già detto ci serviremo di soli tre file per realizzare il guestbook, il file index.asp conterrà il modulo per l'invio del messaggio e stamperà a video i messaggi ordinati come detto in precedenza; il file inserisci.asp effettuerà già detti controlli e la registrazione del messaggio; in fine, il file guestbook.mdb è il database che utilizzeremo per conservare stabilmente i messaggi sul server Web.
Nota: Possiamo utilizzare due file diversi per presentare il modulo e per visualizzare i messaggi, ma per un discorso pratico si è scelto di inglobare in un unico file i due servizi. Inoltre, la demo risultante da questo articolo è stata corredata di un nuovo servizio rispetto alla versione precedente, ovvero la possibilità di leggere soli 10 messaggi per pagina, grazie alla tecnica della paginazione.
:-Struttura del database-:
Si è scelto, per praticità e compatibilità con Asp, di utilizzare Ms Access (preferibilmente edizione 2000) come DBMS per questa applicazione, avviamo quindi la nostra copia di detto software e creiamo il file guestbook.mdb all'interno della cartella guestbook sul nostro server Web personale, creiamo una Nuova tabella in visualizzazione struttura e configuriamola con i seguenti campi:
id - tipo dato: contatore | selezioniamolo ed assegniamogli la chiave primaria
data - tipo dato: testo | non utilizziamo il campo data/ora, per la cronologia utilizzeremo il campo id.
nickname - tipo dato: testo
email - tipo dato: testo | in corrispondenza della voce Consenti lunghezza zero selezioniamo Si
homepage - tipo dato: testo | in corrispondenza della voce Consenti lunghezza zero selezioniamo Si
oggetto - tipo dato: testo
citta - tipo dato: testo
messaggio - tipo dato: memo | per consentire l'inserimento di testi lunghi.
Salviamo la tabella col nome messaggi e chiudiamo Access, il database è pronto.
:-Inserimento e lettura dei messaggi-:
Come opportunamente segnalato nella nota del secondo paragrafo di questo articolo, utilizzeremo un solo file, index.asp, per un triplice scopo: offrire il modulo per inserire il messaggio, stampare a video i messaggi dal più recente fino al primo, impaginare solo 10 messaggi alla volta, splittando in più pagine i messaggi residui, sempre solo 10 per volta.
Di seguito espongo il codice opportunamente commentato, in seguito focalizzeremo l'attenzione sui punti cruciali:
Nota: La stilizzazione utilizzata non verrà commentata, l'aspetto estetico del guestbook può essere personalizzato a seconda dei guisti del lettore.
<%@LANGUAGE = JScript%>
<%
// Apro la connessione verso il database
var Cn = new ActiveXObject("ADODB.Connection");
var Sc = "driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("guestbook.mdb");
Cn.Open(Sc);
// Recupero i dati dalla tabella via Sql
var Sql = "SELECT * FROM messaggi ORDER BY id DESC";
// Utilizzo l'oggetto recordset per generare la paginazione
var Mostra = new ActiveXObject("ADODB.Recordset");
Mostra.Open(Sql,Cn,1);
// Setto una variabile di tipo QueryString per muovermi nella stessa pagina
// e mostrare a video messaggi diversi
var pag = parseInt(Request.QueryString("id"));
// Mi assicuro che il valore passato nella QueryString sia numerico
if (isNaN(pag) || pag < 1) pag = 1;
// Finchè non finisce il file continuo il conteggio ed imposto
// a 10 il numero di record che voglio vengano estratti
if (!Mostra.EOF) {
Mostra.PageSize = 10;
Mostra.AbsolutePage = pag;
}
// A questo scopo mi serve un contatore che imposto a zero (0) ed incrementerò in seguito
var i = 0;
%>
<html>
<head>
<title>lukeonweb.net Guestbook - www.lukeonweb.net</title>
<style type="text/css">
td, div { font-size: 12px; font-family: Verdana; }
a { color: #FFFFFF; text-decoration: None; }
a:hover { color: #FFFFFF; text-decoration: None; }
a.x { color: #3366CC; text-decoration: None; }
a:hover.x { color: #FF0000; text-decoration: Underline; }
</style>
</head>
<body text="#192939">
<div align="center"><b>Firma il mio Guestbook</b></div>
<br>
<div align="center" style="color: #FF0000;">I campi contrassegnati da <b>*</b> sono obbligatori</div>
<br>
<!-- Creo il modulo per l'inserimento dei messaggi -->
<table align="center" cellpadding="1" cellspacing="0">
<form method="post" action="inserisci.asp">
<tr>
<td><b>Nickname *</b></td>
<td align="right"><input type="text" name="nickname"></td>
</tr>
<tr>
<td><b>Email</b></td>
<td align="right"><input type="text" name="email"></td>
</tr>
<tr>
<td><b>Homepage</b></td>
<td align="right"><input type="text" name="homepage"></td>
</tr>
<tr>
<td><b>Città *</b></td>
<td align="right"><input type="text" name="citta"></td>
</tr>
<tr>
<td><b>Oggetto *</b></td>
<td align="right"><input type="text" name="oggetto"></td>
</tr>
<tr>
<td colspan="2"><b>Messaggio *</b></td>
</tr>
<tr>
<td colspan="2"><textarea name="messaggio" rows="5" cols="30"></textarea></td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" value=" Firma ">
<input type="reset" value="Cancella">
</td>
</tr>
</form>
</table>
<br>
<!--
Creo il ciclo che eseguirà due controlli, la verifica che i record vengano letti tutti
e che non ne vengano mostrati più di 10 per volta
-->
<%while((!Mostra.EOF) && (i<10)){%>
<table align="center" width="700" cellpadding="1" cellspacing="0" style="border: Solid 1px #192939;">
<tr bgcolor="#192939">
<td width="500" style="color: #FFFFFF;">
<!-- Stampo a video il nickname del firmatario e la città -->
<b>Messaggio di <%=Mostra("nickname")%> (da <%=Mostra("citta")%>)</b>
</td>
<td width="200" align="right">
<!-- Controllo che l'email sia stata inserita, in caso negativo stampo a video uno spazio vuoto, -->
<!-- altrimenti eseguo un link di tipo mailto: verso l'indirizzo segnalato -->
<%if((Mostra("email") == "") || (Mostra("email") == "undefined")){%>
<%}%>
<%else {%>
<a href="mailto:<%=Mostra("email")%>"><email></a>
<%}%>
<!-- Lo stesso discorso vale per l'eventuale URL segnalata dal firmatario come propria Homepage -->
<%if((Mostra("homepage") == "") || (Mostra("homepage") == "undefined")){%>
<%}%>
<%else {%>
<a href="<%=Mostra("homepage")%>" target="_blank"><homepage></a>
<%}%>
</td>
</tr>
<tr>
<td colspan="2">
<!-- Stampo a video l'oggetto, il messaggio e la data -->
<b><%=Mostra("oggetto")%></b><br><br>
<%=Mostra("messaggio")%><br><br>
<div align="right" style="font-size: 10px;">
Pubblicato in data <%=Mostra("data")%>
</div>
</td>
</tr>
</table>
<br>
<!-- Incremento il contatore e mi muovo verso il primo record -->
<%
i++;
Mostra.MoveNext();
}
%>
<!-- Stampo a video i link verso i precedenti ed i successivi 10 messaggi, i quali si attiveranno -->
<!-- solo nel caso in cui effettivamente, scorrendo i record, ne vengano trovati altri -->
<table align="center" width="700" cellpadding="0" cellspacing="0">
<tr>
<td width="50%">
<%if (pag > 1) {%>« <a href="index.asp?id=<%=pag - 1%>" class="x">Precedenti</a><%}%>
<%else {%><font color="#778899">« Precedenti</font><%}%>
</td>
<td width="50%" align="right">
<%if (!Mostra.EOF) {%><a href="index.asp?id=<%=pag + 1%>" class="x">Successivi</a> »<%}%>
<%else {%><font color="#778899">Successivi »</font><%}%>
</td>
</tr>
</table>
<!-- Chiudo la connessione -->
</body>
</html>
<%Cn.Close()%>
Beh, rileggendo i commenti al codice appena proposto forse ulteriori osservazioni sono superflue, si dà infatti per scontato che il lettore abbia un minimo di pratica con Asp e con le tecniche di manipolazione dei record estratti da una fonte di dati di tipo ADO.
:-Registrazione dei messaggi-:
La fase successiva, nonchè conclusiva del lavoro, è quella della registrazione dei messaggi sul database, implementiamo il file inserisci.asp, di cui adesso esaminiamo il codice:
<%@LANGUAGE = JScript%>
<%
//Recupero i dati dal form
var nickname = new String(Request.Form("nickname"));
var email = new String(Request.Form("email"));
var homepage = new String(Request.Form("homepage"));
var citta = new String(Request.Form("citta"));
var oggetto = new String(Request.Form("oggetto"));
var messaggio = new String(Request.Form("messaggio"));
//Scrivo la data
var oggi = new Date();
var data = oggi.getDate() + "/"
+ (oggi.getMonth() + 1) + "/"
+ oggi.getYear() + " alle ore "
+ oggi.getHours() + ":"
+ oggi.getMinutes() + ":"
+ oggi.getSeconds();
//Controllo i campi obbligatori
if ((nickname == "") || (nickname == "undefined")) Response.Redirect("index.asp");
if ((citta == "") || (citta == "undefined")) Response.Redirect("index.asp");
if ((oggetto == "") || (oggetto == "undefined")) Response.Redirect("index.asp");
if ((messaggio == "") || (messaggio == "undefined")) Response.Redirect("index.asp");
//Creo la connessione ed il recordset
var Cn = new ActiveXObject("ADODB.Connection");
var Rs = new ActiveXObject("ADODB.Recordset");
//Creo la stringa di connessione
var Str = "driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("guestbook.mdb");
//Apro la connessone
Cn.Open(Str);
//Apro il recordset, inserisco i nuovi dati, lo aggiorno e lo chiudo
Rs.Open("messaggi",Cn,3,3);
Rs.AddNew();
Rs("nickname") = nickname;
Rs("email") = email;
Rs("homepage") = homepage;
Rs("citta") = citta;
Rs("oggetto") = oggetto;
Rs("messaggio") = messaggio;
Rs("data") = data;
Rs.Update();
Rs.Close();
//Chiudo la connessione
Cn.Close();
//Reindirizzo immediatamente l'utente verso index.asp
Response.Redirect("index.asp");
%>
Il funzionamento è semplice, recupero i dati richiesti dal modulo, scrivo manualmente la data impostata sull'ora del server Web su cui è pubblicato lo script, controllo i campi obbligatori, supponendo che l'email e la homepage non siano richiesti obbligatoriamente.
A questo punto mi connetto al database, inserisco i dati passati dal modulo, chiudo la connessione e reindirizzo istantaneamente l'utente al file originale, aggiornato con il proprio messaggio in capo alla lista.
|
|

|
|