Un guestbook in ASP, XML ed XSLT con XMLDOM | |
![]() |
|
|
ASP Center
Articoli
Referenze
Script
FAQ
Downloads
Siti utili
Menu Javascript
Ricette
Cocktail
Corsi online
Registrazione domini
Area Aziende
|
Un guestbook in ASP, XML ed XSLT con XMLDOM
Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.
Un guestbook (in italiano libro degli ospiti ed in gergo chiamato anche muro) è un sistema utilizzato su moltissimi siti, per lo più amatoriali, per permettere ai propri utenti di lasciare un messaggio o un commento sul sito. Tutti i messaggi vengono esposti in sequenza in ordine di data decrescente, ovvero dal più recente al meno recente, in modo tale che tutti gli utenti abbiano la possibilità di leggere tutti i messaggi presenti, oltre al proprio.
Si tratta di un tipo di applicazione di input/output realizzabile e gestibile con un linguaggio di scripting lato server, in questo caso ASP, che si basa sulla memorizzazione dei dati su di una struttura stabile. In genere si utilizza un database per memorizzare i vari messaggi; alcuni utilizzano un file di testo; noi utilizzeremo una struttura XML, in modo sia da realizzare una simpatica utility per il nostro sito e per farci le ossa con l'utilizzo dell'XML, dell'XSLT e dell'XMLDOM, oggetto che fa da interfaccia tra ASP ed XML. Struttura dell'applicazione Un guestbook è composto, a livello di front-office, da un modulo di inserimento dati e da un'area riservata alla visualizzazione dei messaggi. A livello di back-office, invece, la questione è molto più complessa perchè c'è bisogno, oltre al modulo ed all'area di visualizzazione, anche di una struttura di dati e da uno script di controllo ed inserimento dei dati. Nello specifico dell'applicazione descritta in questo Articolo necessitiamo di
Il file di configurazione dell'applicazione Per comodità e per buona norma di programmazione utilizzeremo un file di appoggio in cui inserire alcuni codici ed alcune notizie comuni a tutti i file ASP dell'applicazione. Create il file config.asp e salvatelo nella cartella xguest sul vostro Web Server. Di seguito il codice commentato del file
<%
' Impostazioni di base della pagina
Option Explicit
On Error Resume Next
Response.Buffer = True
' Recupero i file XML ed XSLT dell'applicazione
Dim file_xml, file_xsl
file_xml = Server.MapPath("guestbook.xml")
file_xsl = Server.MapPath("guestbook.xsl")
%>
Trattandosi di un file che verrà incluso in altri file ASP ricordo che è necessario non inserire la dichiarazione @LANGUAGE all'inizio della pagina.Struttura del file XML La struttura XML della nostra applicazione è piuttosto semplice e prevede i campi id, nome, email, commento e data. Di seguito il codice del file guestbook.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<database>
<messaggio>
<id>1</id>
<nome>Nome Visitatore</nome>
<email>account@server.ext</email>
<commento>Testo del commento...</commento>
<data>28/06/2005 19.47.31</data>
</messaggio>
</database>
Salvate questo file nella cartella xguest sul vostro Web Server.Struttura del file XSLT Come anticipato nei paragrafi precedenti utilizzeremo XSLT per accedere ai dati del file XML del nostro guestbook
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table align="center" width="450">
<xsl:for-each select="database/messaggio">
<xsl:sort select="id" order="descending"/>
<tr>
<td>
<b>Messaggio di
<a href="mailto:{./email}">
<xsl:value-of select="nome"/>
</a></b>
<br/><br/>
<xsl:value-of select="commento"/><br/><br/>
<i>Inserito in data <xsl:value-of select="data"/></i>
</td>
</tr>
<tr><td><hr/></td></tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
La struttura è semplice: utilizziamo come template una tabella HTML per visualizzare i dati del file XML; effettuiamo un ciclo Il modulo di registrazione e la visualizzazione dei messaggi Alcuni guestbook utilizzano due file differenti per il modulo di inserimento dei messaggi e per la visualizzazione di questi ultimi; noi utilizzeremo un unico file per entrambe le cose. Create il file index.asp e salvatelo nella cartella xguest sul vostro Web Server. Di seguito il codice opportunamente commentato
<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
' Dichiaro le variabili della pagina
Dim oggetto, stile, errore
' Apro una connessione con file XML
Set oggetto = Server.CreateObject("Microsoft.XMLDOM")
oggetto.async = False
oggetto.load file_xml
' Apro una connessione col file XSLT
Set stile = Server.CreateObject("Microsoft.XMLDOM")
stile.async = False
stile.load file_xsl
' Recupero la variabile per parametrizzare eventuali
' messaggi di errore in fase di inserimento
errore = Request.QueryString("errore")
%>
<html>
<head>
<title>Un guestbook in ASP, XML ed XSLT</title>
</head>
<body>
<h1 align="center">Un guestbook in ASP, XML ed XSLT</h1>
<form method="post" action="nuovo.asp">
<table align="center" width="450">
<tr>
<td>
Nome<br>
<input
type="text"
name="nome"
value="<%=Session("nome")%>"
style="width: 100%;">
<br>
Email<br>
<input
type="text"
name="email"
value="<%=Session("email")%>"
style="width: 100%;">
<br>
Commento
<textarea
name="commento"
rows="10"
style="width: 100%;"><%=Session("commento")%></textarea>
</td>
</tr>
<tr>
<td align="right"><input type="submit" value=" OK "></td>
</tr>
</table>
</form>
<p align="center" style="color: #FF0000;">
<%
' Mostro a video un messaggio qualora si verifichi
' un errore durante l'inserimento dei dati
If errore > 0 Then
Select Case errore
Case 1
Response.Write "Inserisci il tuo nome"
Case 2
Response.Write "Inserisci il tuo indirizzo email"
Case 3
Response.Write "Inserisci un commento"
Case Else
Response.Write " "
End Select
End If
%>
</p>
<%
' Effettuo la trasformazione in XSLT
Response.Write oggetto.transformNode(stile)
%>
</body>
</html>
<%
' Un po di pulizia...
Set oggetto = Nothing
Set stile = Nothing
%>
Inserimento dei messaggi nel file XMLSiamo arrivati alla parte finale e maggiormente articolata dell'applicazione, ovvero la fase di controllo ed inserimento dei messaggi del guestbook nel file XML. Create il file nuovo.asp (a cui punta il modulo di inserimento contenuto nel file index.asp esaminato nel paragrafo precedente) e salvatelo nella cartella xguest nel vostra Web Server. Il suo scopo è semplice: controlla i dati inseriti ed una volta soddisfatte tutte le condizioni procede alla creazione di un nuovo nodo nel file XML; in fine effettua un redirect al file index.asp in cui verrà visualizzato il nuovo messaggio. Di seguito il codice opportunamente commentato
<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
' Recupero i dati dal modulo
Dim nome, email, commento
nome = Request.Form("nome")
email = Request.Form("email")
commento = Request.Form("commento")
' Memorizzo in una serie di variabili di sessione
' i dati recuperati dal modulo in modo da mostrarli
' all'interno dei relativi campi in fase di errore
' evitando all'utente di dover compilare di nuovo
' anche i campi già inseriti correttamente
Session("nome") = nome
Session("email") = email
Session("commento") = commento
' Espressione regolare per l'indirizzo email
Dim stringa, re
stringa = "^[\w\-\.]*[\w\.]\@[\w\.]*[\w\-\.]"
stringa = stringa & "+[\w\-]+[\w]\.+[\w]+[\w $]"
Set re = New RegExp
re.Pattern = stringa
re.IgnoreCase = True
' Controllo che i valori immessi siano validi
If Len(Trim(nome)) = 0 Then
Set re = Nothing
Response.Redirect "index.asp?errore=1"
ElseIf re.Test(email) = False Then
Set re = Nothing
Response.Redirect "index.asp?errore=2"
ElseIf Len(Trim(commento)) = 0 Then
Set re = Nothing
Response.Redirect "index.asp?errore=3"
Else
' Dichiaro le variabili che utilizzeremo
' in fase di inserimento dei dati
Dim oggetto, quanti, id, root
Dim nodoId, nodoNome, nodoEmail, nodoComm, nodoData
' Creo l'oggetto XMLDOM
Set oggetto = Server.CreateObject("Microsoft.XMLDOM")
oggetto.async = False
oggetto.load file_xml
' Creo dinamicamente il campo ID che funge da contatore
Set quanti = oggetto.getElementsByTagName("messaggio/id")
id = CInt(quanti.length + 1)
' Creo l'elemento madre per il recupero dei dati
Dim percorso
percorso = oggetto.createElement("messaggio")
Set root = oggetto.documentElement.appendChild(percorso)
' Creo i singoli nodi associati all'elemento madre
Set nodoId = root.appendChild(oggetto.createElement("id"))
nodoId.text = id
Set nodoNome = root.appendChild(oggetto.createElement("nome"))
nodoNome.text = nome
Set nodoEmail = root.appendChild(oggetto.createElement("email"))
nodoEmail.text = email
Set nodoComm = root.appendChild(oggetto.createElement("commento"))
nodoComm.text = commento
Set nodoData = root.appendChild(oggetto.createElement("data"))
nodoData.text = Now()
' Salvo il nuovo messaggio
oggetto.save file_xml
' Un po di pulizia...
Session.Abandon()
Set re = Nothing
Set oggetto = Nothing
Set root = Nothing
Set nodoId = Nothing
Set nodoNome = Nothing
Set nodoEmail = Nothing
Set nodoComm = Nothing
Set nodoData = Nothing
' Riporto l'utente sulla pagina principale
Response.Redirect "index.asp"
End If
%>
|
Newsletter
Stringhe di Conn.
|
||
| © 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Utenti online: 28 - Disclaimer | Pubblicità | Supportaci | Staff | Contatti | ||||
| Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | AlVerde.net | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones | ||||