Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Ricette Cocktail Registrazione domini Area Aziende



Un Forum di discussione in ASP - Parte 1

Home + Articoli + Messaggistica + Articolo # 135
Autore: Luca Ruggiero

Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.


Introduzione

Un Forum di discussione è un sistema di comunicazione per mezzo del quale è possibile ottenere una riproduzione informatizzata di un'assemblea in cui, con un certo criterio ed un certo ordine, ad una domanda posta da un partecipante, tutti gli altri partecipanti possono dare una risposta.

Le domande possono essere divise ed accorpate in categorie omogenee, al fine di conservare il suddetto ordine tra le discussioni e garantire un criterio di ricerca ottimale.

Per partecipare ad una discussione, o per aprire una nuova discussione (dette in gergo anche topic), ogni utente deve essere iscritto e possedere delle credenziali di accesso, ovvero username e password.

Al fine di conservare tutti i dati degli utenti e delle discussioni utilizzeremo un database Ms Access, preferibilmente nella versione 2000.

Struttura del database

Si crei sul proprio server Web personale (IIS o PWS che sia) la cartella vbforum e si crei al suo interno il file di database forum.mdb composto dalle seguenti tabelle e dai relativi campi:
  • utenti
    • id (Contatore) identifica un codice univoco dell'utente
    • username (Testo, 15) nome dell'account dell'utente
    • password (Testo, 15) parola chiave di accesso da associare alla username
    • email (Testo, 50) indirizzo email dell'utente per essere agevolmente contattato in privato dall'amministratore del Forum o da altri utenti
  • sezioni
    • id (Contatore) identifica un codice univoco da associare alla sezione in cui verranno poi inseriti i relativi messaggi
    • nome (Testo, 50) nome fisico della sezione in cui inserire i relativi messaggi
  • messaggi
    • id (Contatore) identifica univocamente il messaggio
    • id_sezione (Numerico) associa il messaggio alla sezione corrispondente
    • id_autore (Numerico) associa il messaggio all'autore, sia che si tratti di una domanda o di una risposta
    • titolo (Testo, 50, Consenti lunghezza zero: SI) titolo, o che dir si voglia, oggetto del messaggio
    • messaggio (Memo) corpo del messaggio
    • id_risposte (Numerico) contiene l'id di riferimento del messaggio; quando si tratta di una domanda il suo valore sarà zero (0) oppure, se si tratta di una risposta, avrà l'id della domanda a cui è associata
    • data (Data/ora) definisce la data e l'ora del messaggio e serve per ordinare i messaggi cronologico dal più recente al meno recente e fa tornare in alto il messaggio quando riceve una nuova risposta
Non preoccupatevi di specificare alcuna chiave primaria, faremo tutto via codice.

Il file di configurazione

Per la definizione di alcune variabili e caratteristiche generiche che dovranno essere comuni ad ogni pagina utilizzeremo un file di inclusione che chiameremo config.asp composto dal seguente codice:
<%
Option Explicit

On Error Resume Next

Response.Buffer = True

Dim StrCn
StrCn = ""
StrCn = StrCn & "driver={Microsoft Access Driver (*.mdb)};"
StrCn = StrCn & "dbq=" & Server.MapPath("forum.mdb")
%>
dove
Option Explicit
indica che tutte le variabili utilizzate devono essere dichiarate e dimensionate
On Error Resume Next
serve alla gestione degli errori
Response.Buffer = True
imposta su True il buffer del server dedicato a questa applicazione
Dim StrCn
' e quanto segue...
definisce la stringa di connessione al database.

Attenzione: non inserire in questo file la dichiarazione @LANGUAGE per la definizione del linguaggio di scripting (in questo caso VBScript) perchè questo file verrà incluso con la direttiva #include delle SSI.

Menu del Forum

Da tutte le pagine del Forum sarà possibile, attraverso un menu di navigazione, raggiungere altre pagine del Forum stesso, ovvero la Homepage (che vedremo nel prossimo paragrafo), la pagina di iscrizione, la pagina di elenco degli utenti, la pagina di inserimento di un nuovo messaggio e la pagina di login e di logout.

Vale quindi la pena di creare un file esterno anche per la gestione del menu, che chiameremo menu.asp composto dal seguente codice:
<table width="700" align="center">
<tr>
<td width="350"><b>Forum</b></td>
<td width="350" align="right">
<a href="index.asp">Homepage</a> |
<a href="iscriviti.asp">Iscriviti</a> |
<a href="utenti.asp">Utenti</a> |
<a href="nuovo.asp">Nuovo messaggio</a> |
<%If Session("username") = "" Then%>
<a href="login.asp">Login</a>
<%Else%>
<a href="logout.asp">Logout</a>
<%End If%>
</td>
</tr>
</table><br>
Dal codice è possibile dedurre che il layout del Forum sarà contenuto in una tabella centrata di 700 pixel di larghezza. Le voci contemplate nel menu sono:
  • Homepage - ritorna alla Homepage del Forum
  • Iscriviti - va alla pagina di iscrizione al Forum
  • Utenti - mostra l'elenco degli utenti del Forum
  • Nuovo messaggio - permette, all'utente iscritto, di aprire una nuova discussione
  • Login - effettua l'autenticazione dell'utente registrato
  • Logout - disconnette l'utente loggato
Attenzione: i link Login e Logout non compariranno contemporaneamente sulla pagina ma si alternano a seconda del fatto che l'utente connesso alle pagine del Forum si sia autenticato o meno, sfruttando la seguente condizione:
<%If Session("username") = "" Then%>
<a href="login.asp">Login</a>
<%Else%>
<a href="logout.asp">Logout</a>
<%End If%>
che verifica se la variabile di sessione Session("username") sia vuota o meno.

La Homepage

La Homepage del Forum si concretizza nel file index.asp che si occuperà di:
  • mostrare l'elenco delle categorie del messaggi
  • mostrare il numero di messaggi presenti in ciascuna categoria
  • mostrare il numero di utenti iscritti ed il totale delle discussioni presenti
Di seguito il codice commentato del file index.asp:
<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
' VARIABILI CHE MI SERVONO ALL'INTERNO DELLA PAGINA
Dim Cn, Rs, Conta, Colore, N_Iscr, N_Disc, N_Disc_Sez

' APRO LA CONNESSIONE
Set Cn = Server.CreateObject("ADODB.Connection")
Cn.Open StrCn

' ESTRAGGO LE SEZIONI DEL FORUM
Set Rs = Cn.Execute("SELECT * FROM sezioni ORDER BY nome ASC")

' NUMERO DI ISCRITTI AL FORUM
Set N_Iscr = Cn.Execute("SELECT COUNT(*) AS id FROM utenti")

' NUMERO DI NUOVI MESSAGGI,
' INTESI COME DOMANDE, NON COME RISPOSTE
Dim SQL_Disc
SQL_Disc = "SELECT COUNT(*) AS id FROM messaggi "
SQL_Disc = SQL_Disc & "WHERE titolo <> ''"
Set N_Disc = Cn.Execute(SQL_Disc)

' CONTATORE PER I COLORI ALTERNATI PER LE SEZIONI
Conta = 0
%>
<html>
<head>
   <title>Forum</title>
</head>
<body>

<!--#include file="menu.asp"-->

<table width="700" align="center" border="1">
<tr bgcolor="#CCCCCC">
<td width="600"><b>Elenco sezioni<b></td>
<td width="100" align="center"><b>N. Messaggi<b></td>
</tr>
<%
' MOSTRO LE SEZIONI...

' AVVISO SE NON CI SONO SEZIONI NEL FORUM...
If Rs.EOF Then
With Response
.Write "<tr><td colspan=2>"
.Write "Nessuna sezione presente</td></tr>"
.Write "</td></tr>"
End With
' OPPURE LE MOSTRO A VIDEO IMPAGINATE IN UNA TABELLA HTML
Else While Not Rs.EOF
Colore = "#FFFFFF"
If Conta Mod 2 <> 0 Then Colore = "#EEEEEE"
%>
<tr bgcolor="<%=Colore%>">
<td>
<a href="sezione.asp?id=<%=Rs("id")%>"><%=Rs("nome")%></a>
</td>
<td align="center">
<%
' ESTRAGGO IL NUMERO DI MESSAGGI A SECONDA DELLA DISCUSSIONE
Dim SQL
SQL = ""
SQL = SQL & "SELECT COUNT(*) AS id FROM messaggi "
SQL = SQL & "INNER JOIN sezioni "
SQL = SQL & "ON messaggi.id_sezione = sezioni.id "
SQL = SQL & "WHERE sezioni.id = "
SQL = SQL & Rs("id") & " AND messaggi.titolo <> ''"
Set N_Disc_Sez = Cn.Execute(SQL)
Response.Write N_Disc_Sez("id")
%>
</td>
</tr>
<%
Conta = Conta + 1
Rs.MoveNext
Wend
End If
%>
</table>

<p align="center">
Ci sono
<b><%=N_Iscr("id")%></b>
utenti iscritti e
<b><%=N_Disc("id")%></b>
discussioni
</p>

</body>
</html>
<%
' UN PO DI PULIZIA...
Cn.Close
Set Cn = Nothing
%>
© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | 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