Hur man skriver en chatt i ASP
Förord
I min förra artikel så skrev jag om hur man gör ett inloggningssystem med hjälp av en databas och sessioner. I den här artikeln så tänkte jag fortsätta med en påbyggnad till det och göra en chatt där man kan chatta med alla användare som är inloggade.I min förra artikel så skrev jag om hur man gör ett inloggningssystem med hjälp av en databas och sessioner. I den här artikeln så tänkte jag fortsätta med en påbyggnad till det och göra en chatt där man kan chatta med alla användare som är inloggade.
En egen chatt är inte så svår att göra, det gäller bara att förstå hur metodiken är.
I en chatt har man en textruta där man skriver in texten och en knapp som man använder för att skicka meddelandet. För att skriva ut inläggen så kan man antigen skriva ut det direkt på skärmen eller använda sig av en flytande ram, en så kallad Iframe (Inline Frame).
Texten man skriver in i textrutan sparas i databasen när man trycker på knappen och när texten är sparad så uppdateras sidan och inläggen inklusive ditt egna visas för alla inloggade direkt på sidan. Eftersom det lätt blir många rader i en chatt så kan man om man vill radera de äldsta posterna eller så kan man låta dem vara och bara visa de 30 senaste så att nytillkomna chattare får en liten aning om vad som har sagts.
För att komma igång och börja med chatten så ska en ny tabell in i databasen för att kunna spara inläggen på ett ställe. Du kan kalla tabellen och kolumnamnen vad du vill men jag kommer att kalla tabellen för ’Chatten’.
I Tabellen Chatten så måste vi ha en unik räknare för att kunna sortera inläggen i fallande ordning så att de senaste visas först. En kolumn för datum och en för tid skall också finnas. En kolumn för namn och för meddelandet är ju förstås en nödvändighet för att det skall fungera och sen avslutar vi med en kolumn med IP-nummer för att man ev. ska kunna såra dem som kommer med ”icke önskvärda texter”.
Så här ser våran uppbyggnad ut just nu.
chatID chatDatum chatTid chatNamn chatMeddelande chatIP
Det är viktigt att man väljer unika och passande namn för att slippa konflikter med reserverade ord. Det är därför jag har ex. chatDatum och inte Datum eller Date. Date är reserverat för att skriva ut datum, vi ska nämligen använda Date() för datumkolumnen.
För att vi ska kunna spara data i databasen för att chatten skall fungera så måste det finnas en koppling till databasen. Eftersom jag i min förra artikel skrev om en bra koppling så kommer jag att använda mig av den.
Så här ser den ut:
Nu när tabellen för chatten är uppsatt i databasen och kopplingen är klar så är det dags att skriva koden som sparar ner all våran info i databasen.
Först börjar vi med att kolla så att inte vårat textfält som man skriver sin text i är tomt, vi vill ju inte spara tomma fält i databasen. Om fältet är tomt så skickas vi tillbaka till chatten så att innehålle bara uppdateras. Om det finns text så börjar vi med att deklarera de variabler vi ska använda. Här visar vi även datumen och tiden som vi ska lägga in i tabellen.
När detta är klart så läggs användarens namn och meddelande in i variabler som är lättare att hantera, även tid och datum läggs i variabler.
När våran information ligger i variabler så instansierar vi databaskopplingen och lägger till informationen i en ny rad med en INSERT INTO.
Som en liten felsökning kan man kolla så att vi verkligen får in informationen i databasen och det gör vi geno att skriva
Innan SQL-satsen körs och exekverar koden. Response.Write chat skriver ut vad som läggs i variablerna och Response.End ser till att körningen avslutas innnan koden kan exekveras. Dessa två rader kan du ha med innan
Se bara till att kommentera bort raderna med ‘ så att koden kan köras om ingen felsökning behövs.
Nu har vi kommit så långt så att vi har tabellen klar, databaskopplingen och vi kan spara data i tabellen. tblUsers får du byta ut mot vad din användartabell heter och Chatten får du byta ut om din chattabell heter något annat.
Visa posterna på sidan
Det första vi ska göra är att sätta SQL-satsen på den sidan som vi vill visa chatten på, det gör vi med:
För att vi ska kunna använda användarnamnet som befinner sig I en annan tabell än chatten så måste vi använda en Joinad tabell, en Inner Join. Här anger vi först att inga dubletter skall förekomma med DISTINCT och att de 60 senaste raderna ska visas, att det är de senaste visas med DESC (Decending=Fallande ordning) som du ser i slutet. För att kunna använda det så måste vi använda räknaren som ger unika nummer. DESC ger ex 10, 9, 8 o s v och ASC ger 8, 9, 10 och det vill vi inte ha i en chatt.
Efter att vi har satt 60 senaste så väljer vi kolumnerna vi vill ha med från chattabellen och att användartabellen ska användas (Joinas). Chatten.chatNamn = tblUsers.username visar att username ska användas som chatNamn.
Innan vi börjar loopa ut alla poster så kan det vara en god idé att formatera tiden och datumet lite, det gör vi med:
Datumet lägger vi i en variabel som ska formateras. Detta gör vi med FormatDateTime och att vi ska göra det från höger till vänster. Siffran 2 anger datumformat ex. 2004-06-30 (XXXX-XX-XX) och siffran 5 anger att det ska vara 5 tecken från höger till vänster 06-30 (XX-XX), en 6-a ger -06-30 (-XX-XX) och en 7-a ger 4-06-30 (X-XX-XX)
Efter det så gör vi likadant med tiden fast här anger vi bara tidsformat, en 4 ger ex. 13:05 (XX:XX)
Nu kan vi börja loopa ut posterna och ange vilka tabeller vi vill visa, här ska vi ha med Datum, Tid, Namn och Meddelande
Detta är allt som vi behöver för att visa de 60 senaste posterna med följande kolumnnamn.
Metodiken bakom
En egen chatt är inte så svår att göra, det gäller bara att förstå hur metodiken är.I en chatt har man en textruta där man skriver in texten och en knapp som man använder för att skicka meddelandet. För att skriva ut inläggen så kan man antigen skriva ut det direkt på skärmen eller använda sig av en flytande ram, en så kallad Iframe (Inline Frame).
Texten man skriver in i textrutan sparas i databasen när man trycker på knappen och när texten är sparad så uppdateras sidan och inläggen inklusive ditt egna visas för alla inloggade direkt på sidan. Eftersom det lätt blir många rader i en chatt så kan man om man vill radera de äldsta posterna eller så kan man låta dem vara och bara visa de 30 senaste så att nytillkomna chattare får en liten aning om vad som har sagts.
Modifiera databasen
För att komma igång och börja med chatten så ska en ny tabell in i databasen för att kunna spara inläggen på ett ställe. Du kan kalla tabellen och kolumnamnen vad du vill men jag kommer att kalla tabellen för ’Chatten’.I Tabellen Chatten så måste vi ha en unik räknare för att kunna sortera inläggen i fallande ordning så att de senaste visas först. En kolumn för datum och en för tid skall också finnas. En kolumn för namn och för meddelandet är ju förstås en nödvändighet för att det skall fungera och sen avslutar vi med en kolumn med IP-nummer för att man ev. ska kunna såra dem som kommer med ”icke önskvärda texter”.
Så här ser våran uppbyggnad ut just nu.
chatID chatDatum chatTid chatNamn chatMeddelande chatIP
Det är viktigt att man väljer unika och passande namn för att slippa konflikter med reserverade ord. Det är därför jag har ex. chatDatum och inte Datum eller Date. Date är reserverat för att skriva ut datum, vi ska nämligen använda Date() för datumkolumnen.
Kopplingen till databasen
För att vi ska kunna spara data i databasen för att chatten skall fungera så måste det finnas en koppling till databasen. Eftersom jag i min förra artikel skrev om en bra koppling så kommer jag att använda mig av den.Så här ser den ut:
<%
Function connect()
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= "& server.MapPath("db/Inloggning.mdb") & ";"
Set connect = objConn
End Function
set objConn = Connect()
%>
Spara informationen i databasen
Nu när tabellen för chatten är uppsatt i databasen och kopplingen är klar så är det dags att skriva koden som sparar ner all våran info i databasen.
<%If Request.Form("txtText") = "" Then
response.redirect "/chat/default.asp"
Else
Dim objConn, SQL
Dim varFullName, varText, varChattDate, txtFullName, txtText, txtChattDatum
CDatum=Date()
CTime=Time()
varFullName = Session ("username")
varText=Request.Form ("txtText")
varChattDatum = Date()
varChattTid = Time()
SET objConn = connect()
chat = "INSERT INTO tblUsers_chat"
chat = chat & "(chatNamn, chatDatum, chatTid, chatMeddelande)"
chat = chat & "VALUES('"& varFullName &"',#"& varChattDatum &"#,#"& varChattTid &"#,'"&varText &"')"
objConn.Execute(chat)
response.redirect "/chat/default.asp"
End If
%>
Först börjar vi med att kolla så att inte vårat textfält som man skriver sin text i är tomt, vi vill ju inte spara tomma fält i databasen. Om fältet är tomt så skickas vi tillbaka till chatten så att innehålle bara uppdateras. Om det finns text så börjar vi med att deklarera de variabler vi ska använda. Här visar vi även datumen och tiden som vi ska lägga in i tabellen.
När detta är klart så läggs användarens namn och meddelande in i variabler som är lättare att hantera, även tid och datum läggs i variabler.
När våran information ligger i variabler så instansierar vi databaskopplingen och lägger till informationen i en ny rad med en INSERT INTO.
Som en liten felsökning kan man kolla så att vi verkligen får in informationen i databasen och det gör vi geno att skriva
Response.Write chat
Response.End
Innan SQL-satsen körs och exekverar koden. Response.Write chat skriver ut vad som läggs i variablerna och Response.End ser till att körningen avslutas innnan koden kan exekveras. Dessa två rader kan du ha med innan
objConn.Execute(chat)
response.redirect "/chat/default.asp"
Se bara till att kommentera bort raderna med ‘ så att koden kan köras om ingen felsökning behövs.
Nu har vi kommit så långt så att vi har tabellen klar, databaskopplingen och vi kan spara data i tabellen. tblUsers får du byta ut mot vad din användartabell heter och Chatten får du byta ut om din chattabell heter något annat.
Visa posterna på sidan
Det första vi ska göra är att sätta SQL-satsen på den sidan som vi vill visa chatten på, det gör vi med:
<%Set chatt=objConn.Execute("SELECT DISTINCT TOP 60 userID, username, chatTid, chatDatum, chatMeddelande, chatNamn, chatID "&_
"FROM Chatten INNER JOIN tblUsers ON Chatten.chatNamn = tblUsers.username "&_
"ORDER BY Chatten.chatID DESC")
do until chatt.eof or chatt.bof%>
För att vi ska kunna använda användarnamnet som befinner sig I en annan tabell än chatten så måste vi använda en Joinad tabell, en Inner Join. Här anger vi först att inga dubletter skall förekomma med DISTINCT och att de 60 senaste raderna ska visas, att det är de senaste visas med DESC (Decending=Fallande ordning) som du ser i slutet. För att kunna använda det så måste vi använda räknaren som ger unika nummer. DESC ger ex 10, 9, 8 o s v och ASC ger 8, 9, 10 och det vill vi inte ha i en chatt.
Efter att vi har satt 60 senaste så väljer vi kolumnerna vi vill ha med från chattabellen och att användartabellen ska användas (Joinas). Chatten.chatNamn = tblUsers.username visar att username ska användas som chatNamn.
Innan vi börjar loopa ut alla poster så kan det vara en god idé att formatera tiden och datumet lite, det gör vi med:
strDate=Right(FormatDateTime(chatt("chatDatum"), 2),5)
strTime=FormatDateTime(chatt("chatTid"), 4)
Datumet lägger vi i en variabel som ska formateras. Detta gör vi med FormatDateTime och att vi ska göra det från höger till vänster. Siffran 2 anger datumformat ex. 2004-06-30 (XXXX-XX-XX) och siffran 5 anger att det ska vara 5 tecken från höger till vänster 06-30 (XX-XX), en 6-a ger -06-30 (-XX-XX) och en 7-a ger 4-06-30 (X-XX-XX)
Efter det så gör vi likadant med tiden fast här anger vi bara tidsformat, en 4 ger ex. 13:05 (XX:XX)
Nu kan vi börja loopa ut posterna och ange vilka tabeller vi vill visa, här ska vi ha med Datum, Tid, Namn och Meddelande
<%=strDate%>
<%=strTime%>
<%=chatt("chatnamn"))%>
<%=chatt("chatText")%>
<%chatt.MoveNext
Loop%>
Detta är allt som vi behöver för att visa de 60 senaste posterna med följande kolumnnamn.
Robert Åhs
234