asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 13638
ASPCode.it - Store

  > > Articoli

Realizziamo un Guestbook (JScript)

Data di pubblicazione: 06/11/2002        Voto della community: 4,37 (Votanti: 9)

Non credo ci sia bisogno di spiegare cosa sia un Guestbook, altresì detto libro degli ospiti; offrire la possibilità agli utenti di lasciare un messaggio o un commento sul sito, o su che dir si voglia, mediante un simile strumento, è ormai pratica comune sulla maggior parte dei siti.

ASP offre la possibilità di realizzare una simile applicazione semplicemente registrando dei dati su di un database e ristampandoli a video in un secondo momento.

Vediamo dunque di cosa abbiamo bisogno per realizzare una simile utility, dando per scontato che il lettore disponga di un server Web con supporto sia di ASP che di un modulo server non troppo datato di Ms Access, dobbiamo realizzare i seguenti file per gestire al meglio l'applicazione:

guestbook.mdb
E' il database su cui ci appoggeremo per realizzare la nostra applicazione, più avanti dettaglieremo la sua struttura.

index.asp
Tramite questo file stamperemo a video i messaggi inseriti nel database dal più recente fino al primo messaggio inserito da un utente; onde evitare uno spreco di risorse includeremo in questo file anche il modulo da compilare per firmare il Guestbook.

inserisci.asp
Questo file svolge una funzione di back-office, il suo solo scopo è quello di controllare la regolarità dei campi e, a condizioni soddisfatte, inserirà il messaggio nel database rimandandoci al file index.asp per leggere il messaggio.

Costruzione del database

Avviamo ora la nostra copia di Access e creiamo il file guestbook.mdb salvandolo nella cartella guestbook all'interno del nostro server Web personale, creiamo una tabella salvandola come messaggi in cui creeremo 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

Chiudiamo Access, il database è pronto.

Inserimento e lettura dei messaggi

Come già accennato utilizzeremo un solo file sia per inserire che per leggere i messaggi; è possibile scompattare il tutto in due file semplicemente creando un file .htm che contenga il modulo e che effettui il post al file inserisci.asp, ma procediamo come da copione.

Questo è il codice completo del file index.asp, in un secondo momento lo analizzeremo:

<%@ LANGUAGE = JScript %>
<%
   var Cn = new ActiveXObject("ADODB.Connection");
   var Str = "driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("guestbook.mdb");
   Cn.Open(Str);
   var Sql = "SELECT * FROM messaggi ORDER BY id DESC";
   var leggi = Cn.Execute(Sql);
%>
<html>
 <head>
  <title>lukeonweb.net Guestbook - http://www.lukeonweb.net</title>
  <basefont face="Verdana">
  <style type="text/css">
   a { text-decoration:None; }
  </style>
 </head>
<body text="#003366" link="#FFFFFF" alink="#FFFFFF" vlink="#FFFFFF">

<div align="center"><b>Firma il mio Guestbook</b></div><br>

<div align="center">
   <font color="#FF3333" size="2">
      I campi contrassegnati da <b>*</b> sono obbligatori
   </font>
</div><br>

<table align="center">
 <form method="post" action="inserisci.asp">
  <tr>
    <td><font size="2"><b>Nickname *</b></font></td>
    <td><input type="text" name="nickname"></td>
  </tr>
  <tr>
    <td><font size="2"><b>Email</b></font></td>
    <td><input type="text" name="email"></td>
  </tr>
  <tr>
    <td><font size="2"><b>Homepage</b></font></td>
    <td><input type="text" name="homepage"></td>
  </tr>
  <tr>
    <td><font size="2"><b>Città *</b></font></td>
    <td><input type="text" name="citta"></td>
  </tr>
  <tr>
    <td><font size="2"><b>Oggetto *</b></font></td>
    <td><input type="text" name="oggetto"></td>
  </tr>
  <tr>
    <td colspan="2"><font size="2"><b>Messaggio *</b></font></td>
  </tr>
  <tr>
    <td colspan="2"><textarea name="messaggio" rows="7" 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>

<%while(!leggi.EOF){%>

<table align="center" width="700" cellspacing="0" style="border: Solid 1px #003366;">
 <tr bgcolor="#003366">
   <td width="500">
      <font color="#FFFFFF" size="2"><b>Messaggio di <%=leggi("nickname")%>
      (da <%=leggi("citta")%>)</b></font>
   </td>
   <td width="200" align="right">
      <font color="#FFFFFF" size="2">
         <%if((leggi("email") == "") || (leggi("email") == "undefined")){%>
          
         <%}%>
         <%else {%>
         <a href="mailto:<%=leggi("email")%>">[email]</a>
         <%}%>
         <%if((leggi("homepage") == "") || (leggi("homepage") == "undefined")){%>
          
         <%}%>
         <%else {%>
         <a href="<%=leggi("homepage")%>" target="_blank">[homepage]</a>
         <%}%>
      </font>
   </td>
 </tr>
 <tr>
   <td colspan="2">
      <font size="2">
         <b><%=leggi("oggetto")%></b><br><br>
         <%=leggi("messaggio")%><br><br>
         <div align="right">
            <font size="1">
               Pubblicato in data <%=leggi("data")%>
            </font>
         </div>
      </font>
   </td>
 </tr>
</table><br>

<%
   leggi.MoveNext();
}
%>

</body>
</html>
<%Cn.Close()%> 

Analizziamo i passi salienti, il file inizia con l'usuale dichiarazione dell'ASP e con l'apertura della connessione verso il database:

<%@ LANGUAGE = JScript %>
<%
   //Creo la connessione
   var Cn = new ActiveXObject("ADODB.Connection");
   //Creo la stringa di connessione
   var Str = "driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("guestbook.mdb");
   //Apro la connessione e le passo la stringa
   Cn.Open(Str);
   //Creo l'Sql che mi serve per stampare i messaggi a video come suddetto
   var Sql = "SELECT * FROM messaggi ORDER BY id DESC";
   var leggi = Cn.Execute(Sql);
%>

Tralasciamo tutta la struttura della pagina HTML ed il codice per la creazione della tabella contenente il modulo che, ripeto, può essere importato in una pagina dedicata, lascio questo aspetto al giudizio del lettore.

Torniamo all'ASP. A questo punto dobbiamo stampare i messaggi a video, per l'esempio ho creato una tabella non graficamente pretenziosa ma abbastanza elegante, eseguo di volta in volta un ciclo su detta tabella per ricrearla ogni volta che dal database viene estratto un nuovo messaggio.

Facciamo un piccolo passo indietro e focalizziamo la nostra attenzione sulla variabile leggi:

var leggi = Cn.Execute(Sql);

grazie a questa variabile che esegue la stringa Sql possiamo "allineare" tutti i campi del database facente parte di un unico messaggio, ovvero i vari record, il codice seguente costruisce dinamicamente la tabella che stamperà a video i messaggi:

<!-- ESEGUO IL CICLO -->
<%while(!leggi.EOF){%>

<table align="center" width="700" cellspacing="0" style="border: Solid 1px #003366;">
 <tr bgcolor="#003366">
   <td width="500">
      <!-- STAMPO A VIDEO IL NICKNAME E LA CITTA' DELL'AUTORE DEL MESSAGGIO -->
      <font color="#FFFFFF" size="2"><b>Messaggio di <%=leggi("nickname")%>
      (da <%=leggi("citta")%>)</b></font>
   </td>
   <td width="200" align="right">
      <font color="#FFFFFF" size="2">
      <!-- CONTROLLO CHE L'EMAIL SIA STATA INSERITA -->
         <%if((leggi("email") == "") || (leggi("email") == "undefined")){%>
         <!-- SE NON E' STATA INSERITA STAMPO A VIDEO UNO SPAZIO VUOTO -->
          
         <%}%>
         <%else {%>
         <!-- OPPURE CREO UN LINK MAILTO: VERSO L'EMAIL INSERITA -->
         <a href="mailto:<%=leggi("email")%>">[email]</a>
         <%}%>
         <!-- STESSO DISCORSO PER L'HOMEPAGE -->
         <%if((leggi("homepage") == "") || (leggi("homepage") == "undefined")){%>
          
         <%}%>
         <%else {%>
         <a href="<%=leggi("homepage")%>" target="_blank">[homepage]</a>
         <%}%>
      </font>
   </td>
 </tr>
 <tr>
   <td colspan="2">
      <font size="2">
         <!-- STAMPO A VIDEO L'OGGETTO, IL MESSAGGIO -->
         <b><%=leggi("oggetto")%></b><br><br>
         <%=leggi("messaggio")%><br><br>
         <!-- E LA DATA D'INSERIMENTO -->
         <div align="right">
            <font size="1">
               Pubblicato in data <%=leggi("data")%>
            </font>
         </div>
      </font>
   </td>
 </tr>
</table><br>

<!-- CHIUDO IL CICLO E MI MUOVO VERSO IL PROSSIMO RECORD -->
<%
   leggi.MoveNext();
}
%>
 

Alla fine del file chiudo la connessione:

</body>
</html>
<%Cn.Close()%>

Tutto il resto è puro HTML!

Registrazione dei messaggi

Ok, ma dobbiamo ancora registrare i dati sul database e controllare che i campi obbligatori siano stati compilati, è arrivato il turno del file inserisci.asp, il codice è opportunamente commentato:

<%@ 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 è molto semplice, solo il controllo sui campi obbligatori potrebbe essere potenziato lanciando un messaggio di errore all'utente se dimentica di compilarne uno.


Si ringrazia LukeOnWeb per la gentile concessione dell'articolo.




Utenti connessi: 13638