Realizzare una chat in ASP
a cura di Nanni Bassetti (digitfor@gmail.com) 
(requisiti: conoscenza ASP ed HTML, fondamenti Microsoft Access)

Chattare che passione ! Tutti ci siamo trovati almeno una volta a chattare ed abbiamo incontrato i più disparati software di chat on-line, ma alla fine il più semplice e veloce è sempre risultato la chat su web in HTML puro, dunque è arrivato il momento di creare la nostra chat personalizzata, semplice e veloce, come ? Ma in ASP (Active Server Pages) naturalmente.
Innanzi tutto dobbiamo realizzare un modello logico di quello che vogliamo fare:
1) Un modulo on-line di registrazione utenti. Questo serve a rendere unici gli utenti, cioè bisogna evitare che ci siano due utenti con lo stesso nome o nomignolo altrimenti quando incontreremo l'utente Zorro non sapremo se è il nostro amico di chat oppure uno sconosciuto.
2) Dal modulo ci si può registrare oppure entrare direttamente nell'area di chat se si è già utenti registrati, quindi in ASP bisogna realizzare il software che registra il nuovo utente su un database ed il software che legge dal database per riconoscere gli utenti registrati.
3) Creare una pagina HTML con due frames, uno che visualizza l'area di chat e l'altro che visualizza la casella di testo dove scrivere i propri messaggi ed inviarli.
4) Quindi creare il software in asp che permette di leggere e scrivere da un database i messaggi da visualizzare.
Cominciamo a realizzare il form d'ingresso alla chat default.asp:

DEFAULT.ASP:

<html>
<head>
<title>Chat Italiana in ASP</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head> L'inclusione del file delete.asp serve, per cancellare i messaggi dal database dopo un certo numero, così alla visualizzazione dell'area di chat non ci siano anche i messaggi del giorno prima, 
comunque esamineremo in seguito il file delete.asp. 
<!-- #include file="delete.asp" --> 
<body bgcolor="#FFFFFF">
<center> Ecco il tag form che sottomette i dati al file pass.asp per far entrare gli utenti già registrati.

<form method="post" action="pass.asp" name="chat">
<p align="center"><b><font size="6" color="#FF0066">ASP-Chat the best chat !</font></b><br><br>
<br>
<font size="4"><b>Se sei gi&agrave; registrato:</b></font><br>
<b><i>Nome:</i></b> 

<input type="text" name="ui">
</p>
<p align="center"><i><b>Password:</b></i> 
<input type="text" name="pw">
</p>

Le variabili ui e pw rappresentano il nome e la password dell'utente

<p align="center"> 
<input type="submit" name="Submit" value="Entra nella Chat">
</p>
<p align="center"><b>Se non sei gi&agrave; registrato...allora</b> <font color="#FF66CC"><i><b><font color="#FF0000">REGISTRATI 
ORA !!! </font></b></i></font><br>
<b><i>Cos&igrave; manterrai il tuo nome e la tua password per le prossime 
chat ! </i></b></p>
</form> Il file pass2.asp serve, invece, a registrare i nuovi utenti !
<form method="post" action="pass2.asp">
<p align="center"><b><i>Nome:</i></b> 
<input type="text" name="ui">
</p>
<p align="center"><i><b>Password:</b></i> 
<input type="text" name="pw">
</p>
<p align="center"> 
<input type="submit" name="submit" value="Registrati">
</p>
</form>
</center>
</body>
</html>

    Adesso vediamo cosa c'è dentro il file pass.asp:

PASS.ASP:

<% 
rem legge dal DB
dim pass
ui=request.form("ui")
pw=request.form("pw")

Le variabili ui e pw vengono "caricate" coi valori presi dal form

sql="select * from utenti where nick='"&ui&"' and pw='"&pw&"'"
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\chat\utenti.mdb"
Set RS=OBJdbConnection.Execute(sql) %>


Qui abbiamo la stringa SQL (Structured Query Language) per interrogare il database utenti.mdb (creato con MS ACCESS), che contiene la tabella utenti composta dai due campi NICK e PW, che vengono confrontati con ui e pw quindi se il matching va a buon fine allora viene lanciato il file mainchat.asp altrimenti sarà visualizzato il file pena.htm che contiene un messaggio del tipo:
"ATTENZIONE ! UserID o Password errati o gia' in uso !!!!"
La condizione "If rs.eof" significa che se il ricerca è giunta alla fine del recordset allora vuol dire che non è andata a buon fine altrimenti si sarebbe fermata prima della fine del file (End Of File).


<%if rs.eof then%>
<!-- #include file="pena.htm" -->
<%end if%>
<% if not rs.eof then
pass="ok"
%>
<!-- #include file="mainchat.asp" -->
<%end if%>


    Vediamo ora cosa c'è dentro il file pass2.asp:

Pass2.asp:

<% 
rem legge dal DB
dim pass
ui=request.form("ui")
pw=request.form("pw")
sql="select * from utenti where nick='"&ui&"'"
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\chat\utenti.mdb"
Set RS=OBJdbConnection.Execute(sql) %>

Qui il discorso è inverso di quello visto in pass.asp, infatti il programma compie una ricerca nel database e se trova già un utente con lo stesso nome allora include il file pena.htm, altrimenti include il file adduser.asp, che serve ad aggiungere nel database il nuovo utente.

<%if not rs.eof then%>
<!-- #include file="pena.htm" -->
<%end if%>
<% if rs.eof then
pass="ok"
%>
<!-- #include file="adduser.asp" -->
<%end if%>

Adesso dobbiamo solo costruire il file che aggiunge i nuovi utenti (adduser.asp) e poi finalmente entriamo nella chat vera e propria:

Adduser.asp :

<%
nome=request.form("ui")
pw=request.form("pw")
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\chat\utenti.mdb"
Set RS=Server.CreateObject("ADODB.Recordset")
RS.Open "utenti",OBJdbConnection,3,3 
RS.AddNew
rs("nick")=nome
rs("pw")=pw
rs.update
RS.Close

E' abbastanza chiaro il funzionamento di questo programma, in pratica prende le variabili ui e pw dal form di registrazione, poi le scrive nella tabella utenti del database utenti.mdb con il metodo Addnew e Update dell'oggetto Recordset. 

OBJdbConnection.Close
set rs=nothing
set objdbconnection=nothing
%>
<center>
<h1><b>Registrazione Effettuata !</b></h1><br>
Premi BACK per tornare all'home page !
</center> 

Entriamo nella chat !

Il file Mainchat.asp

<HTML>
<HEAD>
<TITLE>Chat italiana,web chat italiana,web chiacchierare su internet,chattare</TITLE>
</HEAD>

Legge la ui (userid o nome dell'utente) dalla querystring (linea di comando) solo se la ui=""

<%if ui="" then ui=request.querystring("ui")
%>

Crea i due frames e poi utilizza il gestore di eventi Javascript OnLoad per ricaricare se stesso con la condizione "if (self != top) top.location = self.location;", per avere sempre la schermata aggiornata

<Frameset rows="77%,23%" onLoad="if (self != top) top.location = self.location;">

Nel frame inferiore c'è il file barra.asp e nel frame superiore (area di chat) c'è il file text.asp.

<frame src="text.asp" name="testo">
<frame src="barra.asp?ui=<%=ui%>&pw=<%=pw%>" name="barra">
</Frameset>
</HTML>

Diamo un'occhiata ai due file barra.asp e text.asp:

Barra.asp:

Questo è un semplice file che visualizza una casella di testo di nome "msg", la quale contiene il messaggio che si vuole inviare, ed un tasto di SUBMIT che serve a scriverlo nel database dei messaggi.

<html>
<head>
</head>
<body bgcolor="cyan">

La variabile ui è presa dalla querystring

<%
ui=request.querystring("ui")
%>
<FORM method="post" action="addmsg.asp">
<Input type=text value="" size="35" name="msg">
<input type="hidden" value="<%=ui%>" name="nome">
<Input type=submit value="Aggiorna la chat" name="go">
</FORM>

Alla pressione del tasto "Aggiorna la chat", le variabili "ui" e "msg" sono inviate al file addmsg.asp, che le scriverà nel database utenti.mdb nella tabella "messaggi".

<center>
<a href="mailto:digitfor@gmail.com"><b>Per informazioni clicca qui !</b></a>
</center>
</body>
</html>

Addmsg.ASP:

<%
nome=request.form("nome")
msg=request.form("msg")
if nome="" then nome=request.querystring("ui")

Le variabili nome e msg vengono caricate coi valori provenienti dal form di barra.asp oppure, solo per la "nome", dalla querystring solo se nome=""

Set OBJdbConnection = Server.CreateObject("ADODB.Connection") OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\chat\utenti.mdb"
Set RS=Server.CreateObject("ADODB.Recordset")
if msg<>"" then
msg=msg&" <br>Data:"&date()&" Ore: "&time()
RS.Open "utenti2",OBJdbConnection,3,3 
RS.AddNew
rs("nick")=nome
rs("msg")=msg
rs.update
end if
response.redirect "mainchat.asp?ui="&nome
%>

Modifichiamo il contenuto della variabile msg concatenandole la stringa " <br>Data:"&date()&" Ore: "&time(), grazie all'operatore di concatenazione "&", così sotto il messaggio apparirà sempre la data e l'ora in cui è stato inviato. Poi sempre con Addnew scriviamo il messaggio ed il suo mittente (msg e nome) nei campi msg e nick della tabella utenti2 del database utenti.mdb. 

<%
RS.Close
OBJdbConnection.Close
set rs=nothing
set objdbconnection=nothing
%>

TEXT.ASP:
Questo file si commenta da solo, infatti non fa altro che leggere dalla tabella utenti2 di utenti.mdb tutti i records contenuti, quindi visualizza tutti i messaggi ed i rispettivi mittenti.

<html>
<body bgcolor="white">
<%
sql="select * from utenti2 order by id desc"
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\chat\utenti.mdb"
Set RS=OBJdbConnection.Execute(sql)%> 
<%
Do while NOT RS.EOF%> 
<b><%=rs("nick")%>:</b><i><%=rs("msg")%></i><p>
<%
rs.movenext
loop 
rs.close
%>
</body>
</html>

Ed infine Delete.asp:

<% 
sql="select * from utenti2"
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\chat\utenti.mdb"
Set RS=OBJdbConnection.Execute(sql)
i=0
DO WHILE NOT RS.EOF
i=i+1
if i>15 then
sql2="delete * from utenti2" 
Set RS2=OBJdbConnection.Execute(sql2)
end if
rs.movenext
loop
%>

Questo file che viene chiamato ogni volta che si arriva nella home page (default.asp) della chat, non fa altro che contare i records contenuti nella utenti2 e quindi se sono maggiori di 15 allora cancella tutti i messaggi ed i loro rispettivi mittenti. Sembra un po' traoumatica come soluzione, ma se ci pensate una chat non è un forum, quindi non ci interessa conservare un "ciao come va?" scritto all'inizio della nostra chiacchierata telematica, comunque se si vuole basta aumentare il numero 15 nella condizione "if i>15" oppure eliminare l'inclusione di delete.asp dal file default.asp e tutto rimane conservato.
E' chiaro che questa chat non è il massimo della vita però è un sistema facile ed espandibile, che con un po' di approfondimento asp e di buona volontà può diventare una bellissima chat-online !!!
Buona chiacchiera !