asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 4164
ASPCode.it - Store
<< lezione precedente lezione successiva >>

ASP: la guida introduttiva - Capitolo 7 - Un libro degli ospiti in ASP

   7.0   Introduzione al tutorial
   7.1   Conservazione e lettura dei messaggi
   7.2   Form di invio del messaggio
   7.3   Inserimento di un nuovo messaggio

7.0 - Introduzione al tutorial

E' finalmente giunto il momento di mettere a frutto le conoscenze acquisite nel corso dei capitoli precedenti, realizzando una prima applicazione ASP di una certa entità. Lavorando con JScript, oggetti built-in, oggetti ActiveX e accesso al File System realizzeremo un semplice guestbook, in Italia meglio noto come "libro degli ospiti". Si tratta sostanzialmente di una pagina Web all'interno della quale un visitatore può inserire un messaggio, in maniera abbinata ad alcune informazioni, quali il proprio nome, l'indirizzo e mail e l'URL della propria Home Page. Insomma, il classico servizio che molti siti amatoriali ospitano per dare voce ai propri visitatori. Il codice e le regole che esamineremo, comunque, avranno ancora una volta valore generale, per cui con un po' di maestria sarà possibile ottenere tantissime varianti sul tema, realizzando ad esempio delle bacheche per scambio annunci e altri servizi basati fondamentalmente sullo stesso meccanismo del guestbook.

Il progetto sarà costituito da 4 files distinti in rapporto tra di loro, lo schema sarà quello rappresentato qui di seguito:

I FILE DEL PROGETTO "LIBRO DEGLI OSPITI"

  1. messaggi.txt - file di testo utilizzato per conservare i messaggi degli utenti. Da questo file verranno letti i messaggi da visualizzare, e in questo file sarà introdotto ogni nuovo messaggio.
  2. guestbook.asp - pagina ASP in grado di prelevare i messaggi contenuti in messaggi.txt e di formattarli in un opportuno output HTML da inviare al browser del visitatore.
  3. nuovo_messaggio.htm - pagina di semplice HTML contenente un form da utilizzare per l'invio di un nuovo messaggio alla pagina inserisci_messaggio.asp, con metodo POST
  4. inserisci_messaggio.asp - pagina ASP che raccoglie i dati inviati dall'utente, li controlla, li formatta e li inserisce in cima a messaggi.txt.

E' bene stabilire ora la struttura di un singolo messaggio, analizzando quali campi possano di fatto costituirlo. Selezioneremo ora alcuni campi esemplificativi, alcuni dei quali dovranno essere inseriti obbligatoriamente, mentre altri potranno essere anche tralasciati. Ecco uno schema relativo alla struttura di un singolo messaggio:

NOME IDENTIFICATIVO (campo obbligatorio)
E MAIL (campo facoltativo)
HOMEPAGE URL (campo facoltativo)
CORPO DEL MESSAGGIO (campo obbligatorio)

Nei paragrafi successivi vedremo come trasformare questa concettualizzazione del problema in una forma appetibile per un computer, attraverso appunto la tecnologia ASP.

7.1 - Conservazione e lettura dei messaggi

Il fulcro dell'intero progetto è rappresentato da messaggi.txt, il semplice file di testo che utilizzeremo come supporto e come contenitore dei messaggi inseriti dagli utenti. Vediamo allora come organizzare, o per meglio dire formattare, questo file affinché possa ospitare una rappresentazione del messaggio teorizzato nel paragrafo precedente. La cosa più ovvia che ci viene in mente è quella di inserire ogni campo su righe distinte, ed è una soluzione piuttosto accettabile per questo nostro primo e semplice tutorial. Potrebbe poi darsi che in certe occasioni ci venga utile agire manualmente sul file di testo, quindi per pura chiarezza in fase di lettura da parte dell'uomo divideremo ogni messaggio con un invio, ossia con una riga bianca. Ecco un esempio di un file di testo in grado di soddisfare le regole appena annunciate:

--- INIZIO ---
Sauron
sauron@sauronsoftware.it
http://www.sauronsoftware.it
Ciao a tutti i lettori!

Tizio


Io non ho messo e mail e url...
tanto sono facoltativi!

--- FINE ---

Questo piccolo esempio presenta un file di testo contenente due messaggi. Le scritte INIZIO e FINE sono da considerarsi escluse e sono state utilizzate solo per mettere in risalto come, anche alla fine del secondo ed ultimo messaggio, sia stata introdotta comunque una riga bianca.
Una volta in possesso di questi dati realizzare la pagina guestbook.asp rimane abbastanza semplice. Si realizzi per prima cosa il file messaggi.txt inserendo al suo interno i due messaggi di poche righe sopra, in modo da predisporlo a divenire "cavia" della pagina ASP che stiamo per andare a creare. Ecco cosa dovremo dire al server tramite la pagina guestbook.asp:

  1. tramite l'oggetto ActiveX denominato Scripting.FileSystemObject apri uno stream verso messaggi.txt
  2. se non sei alla fine dello stream (raggiungimento dell'ultima riga del file di testo) procedi al passo 3, altrimenti chiudi lo stream e concludi
  3. leggi una riga, questo è il nome di un messaggio, stampalo nell'output
  4. leggi una riga, questa è l'e mail. Il campo è facoltativo. In caso dovesse essere vuoto non fare nulla, altrimenti stampa l'indirizzo e mail nell'output HTML generando un collegamento ipertestuale di tipo mailto: ad esso
  5. leggi una riga, questo è l'url per la home page. Il campo è facoltativo. In caso dovesse essere vuoto non fare nulla, altrimenti stampa l'indirizzo nell'output HTML generando un collegamento ipertestuale
  6. leggi una riga, questo è il messaggio, stampalo nell'output
  7. salta una riga nello stream
  8. torna al passo 2 e reitera il ciclo a partire da lì

Questi 8 passi descrivono alla perfezione l'algoritmo che abbiamo intenzione di utilizzare. Nella concettualizzazione di esso, ovviamente, si è esclusa ogni forma di ritocco grafico e ci si è concentrati solo sul meccanismo principale. Questa è una maniera molto efficiente di procedere, le aggiunte grafiche possono poi essere fatte indipendentemente in un secondo momento. Ecco come viene ora formulata la pagina guestbook.asp:

<%@ LANGUAGE = JScript %>
<%
// Apertura dello stream verso il file di testo
var fso = new ActiveXObject("Scripting.FileSystemObject");
var stream = fso.OpenTextFile(Server.MapPath("messaggi.txt"));
%>
<html>
<head><title>Libro degli ospiti</title></head>
<body>
<h1>Libro degli ospiti</h1>
<h4><a href="nuovo_messaggio.htm">Firmalo anche tu!</a></h4>

<%
while (!stream.AtEndOfStream) {
  Response.Write("<hr>");
  aux = stream.ReadLine();
  Response.Write("<b>Nome:</b> " + aux + "<br>");
  aux = stream.ReadLine();
  if (aux!="") Response.Write("<b>E mail:</b> <a href='mailto:" + aux + "'>" + aux + "</a><br>");
  aux = stream.ReadLine();
  if (aux!="") Response.Write("<b>Home Page:</b> <a href='" + aux + "'>" + aux + "</a><br>");
  aux = stream.ReadLine();
  Response.Write("<b>Messaggio:</b><br>" + aux + "<br>");
  stream.SkipLine();

stream.Close();
%>

<hr>
<p><font size="2">Powered by "ASP: la guida introduttiva"</font></p>
</body>
</html>

Con questo codice già è possibile sperimentare la prima parte del libro degli ospiti. Qualora dovesse insorgere un errore il consiglio è di controllare attentamente ciò che è stato inserito in messaggi.txt, in particolare la presenza della sola ed unica riga vuota finale.
Svuotando completamente messaggi.txt potrete ottenere un guestbook totalmente "vergine".

7.2 - Form di invio del messaggio

La seconda parte del progetto è costituita da quei due file che permettono l'inserimento di un nuovo messaggio nell'archivio. Si parte dalla pagina HTML nuovo_messaggio.htm, contenente il form da compilare ed inviare per portare a compimento l'operazione. Non ci si soffermerà più di tanto su di esso, data la banalità della cosa:

<html>
<head><title>Firma il libro degli ospiti</title></head>
<body>
<h1>Libro degli ospiti</h1>
Introduci il tuo messaggio ed invia il modulo
<hr>
<form action="inserisci_messaggio.asp" method="post">
<b>Nome: (*)</b><br>
<input type="text" name="nome"><br>
<b>E mail:</b><br>
<input type="text" name="email"><br>
<b>Home Page:</b><br>
<input type="text" name="homepage" value="http://"><br>
<b>Messaggio: (*)</b><br>
<textarea rows="5" cols="30" name="messaggio"></textarea>
<br>
<input type="submit" value="Invia">
<input type="reset" value="Cancella">
</form>
<hr>
I campi contrassegnati da (*) sono <b>obbligatori</b>
</body>
</html>

Come è possibile vedere i dati sono inviati con metodo POST alla pagina inserisci_messaggio.asp, oggetto di studio del sucessivo paragrafo.

7.3 - Inserimento di un nuovo messaggio

Si è finalmente giunti alla parte conclusiva, ma anche più laboriosa, del progetto. Il file inserisci_messaggio.asp dovrà agire in base ai seguenti passi:

  1. recupera i dati inviati tramite il form
  2. controlla questi dati, in caso di problemi interrompi la procedura e dai notifica dell'accaduto
  3. esamina i dati, correggili e ottimizzali per la loro archiviazione

  4. apri uno stream in lettura verso messaggi.txt
  5. leggi e conserva l'intero contenuto di messaggi.txt
  6. chiudi lo stream in lettura

  7. crea un nuovo messaggi.txt vuoto sovrascrivendo quello precedente e instaura uno stream in scrittura con esso
  8. inserisci in esso il nuovo messaggio
  9. inserisci in esso la lista dei messaggi precedenti
  10. chiudi lo stream in scrittura

Questo algoritmo illustra quindi le operazioni necessarie. I singoli passi sono stati raggruppati in tre diverse classi, in modo da rendere ancora più chiare le tre operazioni base: leggere e validare il form, prelevare il contenuto del file di testo, generare una nuova lista di messaggi contenente in cima ad essa quanto appena inviato dall'utente. Questa doppia operazione di lettura/scrittura di messaggi.txt è dettata dall'esigenza di inserire in testa alla lista il nuovo messaggio, in modo da tale che accedendo a guestbook.asp questo risulti il primo ad essere letto. Qualora si fosse invece optato per un inserimento in coda alla lista sarebbe allora bastato accedere a messaggi.txt una sola volta, in modalità ForAppending. Il messaggio, in questo caso, verrebbe però visualizzato come l'ultimo della lista.
Il codice del documento può essere ora presentato:

<%@ LANGUAGE = JScript %>
<%
function togliInvio(str) {
  var cars;
  var str2 = "";
  for (c=0;c<str.length;c++) {
    cars = str.charCodeAt(c);
    if (cars!=13 && cars!=10) {
      str2 += str.charAt(c);
    } else {
      if (cars==13) str2 += " ";
    }
  }
  return str2;
}

// Ricezione del form
var nome = String(Request.Form("nome"));
if (nome=="undefined") nome = "";
var email = String(Request.Form("email"));
if (email=="undefined") email = "";
var homepage = String(Request.Form("homepage"));
if (homepage=="undefined" || homepage=="http://") homepage = "";
var messaggio = String(Request.Form("messaggio"));
if (messaggio=="undefined") messaggio = "";

// Controllo campi obbligatori
if (nome=="" || messaggio=="") {
  Response.Write("Non hai compilato tutti i campi obbligatori! Torna indietro e correggi.");
  Response.End;
}

// Elimina eventuali "invii" dai vari campi
// Evita così che un campo possa andare su più di una riga
nome = togliInvio(nome);
email = togliInvio(email);
homepage = togliInvio(homepage);
messaggio = togliInvio(messaggio);

var fso = new ActiveXObject("Scripting.FileSystemObject");

// Legge i messaggi vecchi
var in_stream = fso.OpenTextFile(Server.MapPath("messaggi.txt"));
var vecchi = in_stream.ReadAll();
in_stream.Close();

// Crea il nuovo file
var out_stream = fso.CreateTextFile(Server.MapPath("messaggi.txt"));
out_stream.WriteLine(nome);
out_stream.WriteLine(email);
out_stream.WriteLine(homepage);
out_stream.WriteLine(messaggio);
out_stream.WriteLine();
out_stream.Write(vecchi);
out_stream.Close();

Response.Redirect("guestbook.asp");
%>

La particolare funzione togliInvio fornita nel codice si occupa di eliminare ogni eventuale andata a capo presente nei vari campi. Un invio, infatti, verrebbe riportato come tale all'interno dello stesso file di testo e perciò il nostro modello di messaggio non verrebbe più rispettato. Davanti alle "conquiste" fatte nel corso dei capitoli precedenti la comprensione del codice dovrebbe risultare piuttosto agevole. In ogni caso i blocchi di codice sono commentati e divisi tra di loro seguendo la stessa logica utilizzata per raggruppare i diversi passi dell'algoritmo utilizzato.
Si lascia ora al lettore la facoltà di migliorare e di arricchire il progetto secondo la propria fantasia. Ecco alcune possibili tracce di lavoro sulle quali esercitarsi:

  • disabilitare la possibilità da parte dell'utente di inserire codice HTML nei messaggi
  • creare una console di amministrazione del guestbook, attraverso la quale sia possibile cancellare messaggi indesiderati
  • limitare il numero di messaggi presenti nel file di testo ad un numero finito, ad esempio facendo in modo che all'inserimento del ventunesimo messaggio venga automaticamente eliminato il primo

Buon lavoro!

<< lezione precedente lezione successiva >>


Utenti connessi: 4164