Artiklar » ASP » Att skapa ett community. Del 1 - Inledningen

 
 

Att skapa ett community. Del 1 - Inledningen

Författare: SilvioF
Datum: den 5 juni 2002
Antal lästa: 14607
Ej stjärnmärkt

Att skapa ett community

Användarinformation
Vi börjar med att skapa databasen där vi skall lagra användarna i vårat community.
# Vad man nu måste tänka på är exakt vad man vill ha med för infomation om användaren. jag har bestämt mig för: Användarnamn (userLoginName)
# E-post (userEmail)
# Användarens lösenord (userPassword)
# Inloggad? Ja/Nej (userLoginStatus)
# När registrerade användaren sig? (userRegistred)
# När loggade användaren in senast? (userLoginLatest)
# Användarens riktiga namn (userFullName)
# En text som beskriver användaren (userpresentation)
# En länk till användarens hemsida (userURL)
# En adress där man kan hämta en bild på användaren (userPictureURL)
# Jag tyckte att ett poäng-system för detta community kunde vara roligt, så det behövs det också (userpoints)

Jag har även med en kolumn i databasen där jag lagrar ewtt unikt ID för användaren (userID).
Detta för att senare kunna hålla reda på vilken användare som gör vad och en massa saker som förklaras senare.

Databasen, tabellen "tblUsers"
Kolumnnamn / Datatyp / Förklaring
userID / Automatisk räknare / Unikt ID för användaren
userLoginName / Text (Varchar) / Användarnamn
userPassword / Text (Varchar) / Lösenord
userEmail / Text (Varchar) / Användarens e-post
userLoginStatus / Number (Tal, Int) / Är använderen inloggad?
userRegistred / Date/Time (Datum/Tid) / När registrerades användaren?
userLoginLatest / Date/Time (Datum/Tid) / När loggade användaren in senast?
userFullName / Text (Varchar) / Användarens riktiga namn
userPresentation / Memo (PM, Text) / En text som beskriver användaren
userURL / Text (Varchar) / Användarens hemsida
userPictureURL / Text (Varchar) / Adress till en bild på användaren
userPoints / Number (Tal, Int) / Hur många poäng har användaren?

Datatyperna inom parantes är motsvarande datatyper i diverse olika databaser.

Inloggningen
Vi börjar med att göra ett formulär där man kan fylla i användarnamn och lösenord. Formuläret skall även innehålla en knapp som vi trycker på när vi skall logga in.

För att hålla nere det antal sidor som skapas i det här projektet så väljer jag att använda samma fil för validering av inloggningen också (login.asp).

När vi har fyllt i vårat användarnamn, lösenord och klickat på "logga in" så skickas vi alltså tillbaka till samma sida där det görs en kontroll av min querystring. Jag valde att lägga till ?action=login i den url som skickas av formuläret.

Detta för att hålla reda på om man har klickat på knappen för att logga in eller inte (det finns andra sätt, men jag valde detta på grund av enkelheten).

Nu går vi över på ASP-koden.
Det första jag gör är att kontrollera om min querystring innehåller action=login. Gör den det så skall jag köra resten av ASP-koden, annars visas bara inloggningsformuläret igen.

Efter detta så passar jag på att lägga in värdena från formuläret i strängar, samtidigt som jag tar bort diverse ogiltiga tecken som kan störa min sql-sträng när jag sedan skall använda dessa strängar för att bygga denna.

Nu är det dags att bygga min sql-sträng som jag skall köra genom databasen sedan. Dett gör jag genom att välja ut ID(userID), användarnamn(userLoginName), fullständigt namn och epost(userEmail) från tabellen tblUsers där inmatad användarnamn och lösenord stämmer överens med de i databasen.

Nu är det dags att köra allting genom databasen och se om användaren har angett korrekta uppgifter. Detta gör jag genom att öppna mitt recordset och sedan kontrollera om jag fick något resultat tillbaka. Om jag inte fick något resultat betyder det att inloggningen misslyckades och jag skickar tillbaka användaren till inloggningen med ett meddelande.

Om jag däremot får ett rewsultat tillbaka så har inloggningen lyckats och jag lägger in ID(userID), användarnamn(userLoginName), fullständigt namn och epost(userEmail) i respektive session-variabler för att lättare kunna hålla reda på vilken användare som är inloggad just nu samtidigt som jag uppdaterar databasen med lite information, t.ex jag anger att användaren är inloggad, läggere på två poäng och sätter senaste inloggningsdatumet/tiden till Now().

Till sist så stänger vi databasen och skickar vidare användaren till nästa sida (den första efter inloggnigen).

login.asp

Kod:
<%

' Request.Querystring, det finns i formuläret som kommer längre ner.
  if Request.QueryString("action") = "login" then

' Deklarar värderna
  Dim objConn
  Dim strConn
  Dim strSQL
  Dim strLoginName
  Dim strPassword
  Dim rstUse

' Deklarera variabler för inloggningsnamn och lösenord och ogiltiga tecken i ASP.
  strLoginName = Replace(Request.Form("fldLoginName"), "'", "''")
  strPassword = Replace(Request.Form("fldpassword"), "'", "''")
  strLoginName = Replace(strLoginName, "%", "")
  strPassword = Replace(strPassword, "%", "")

' Skapa databaskopplingen i detta fall ligger den i en mapp som heter "db"
  Set objConn = server.CreateObject("ADODB.Connection")
  strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/community.mdb")
  objConn.Open strConn

' Kontrollerar från formuläret inloggningen så att den stämmer med databasens info.
  strSQL = ""
  strSQL = strSQL & "SELECT userID, userLoginName, userEmail, userFullName FROM tblUsers "
  strSQL = strSQL & "WHERE userLoginName = '" & strLoginName & "' AND userPassword = '" & strPassword & "'"

' Öppnar recordset
  Set rstUser = Server.CreateObject("ADODB.Recordset")
  rstUser.Open strSQL, objConn, 3, 3

' Om det blev fel inloggning.
  if (rstUser.EOF or rstUser.BOF) then

' Skicka tillbaka användaren till inloggninssidan med ett meddelande.
  Session("message") = "<font color=""red"">Misslyckad inloggning.<br>Försök igen</font>"
  Response.Redirect("login.asp")

' Inloggningen lyckades
  else

  Response.Write(strSQL)

' Deklarera sessions som är ett smidigare sätt.
  Session("userID") = rstUser(0)
  Session("userLoginName") = rstUser(1)
  Session("userEmail") = rstUser(2)
  Session("userFullName") = rstUser(3)

' Uppdatera information om användaren
  strSQL = ""
  strSQL = strSQL & "UPDATE tblUsers SET "
  strSQL = strSQL & "userLoginStatus = 1, " 'Användaren är inloggad
  strSQL = strSQL & "userLoginLatest = '" & Now() & "', " 'Användarens senaste inloggning
  strSQL = strSQL & "userPoints = userPoints+2 " 'Man får 2 poäng för att logga in
  strSQL = strSQL & "WHERE id = " & Session("userID")
  objConn.Execute(strSQL)

' Sedan efter allt, skickas tillbaka till startsidan.
  Response.Redirect("main.asp")

  End if

'Stäng recordset och databaskopplingen.
  rstUser.Close
  Set rstUser = nothing
  objConn.Close
  Set objConn = nothing

' Stänger End IF.
  end if

%>

<html>
<head>
<title>Inloggning</title>
</head>
<body>

<div align="center">

<%=Session("message")%>

// Ni ser att formuläret går till "action=login"
<form name="frmLogin" method="post" action="login.asp?action=login">

// Skapar textruta till användarnamnet.
Användarnamn: <input type="text" name="fldLoginName"><br>

// Skapar textruta till lösenordet
Lösenord: <input type="password" name="fldPassword"><br>

// Skapar knappen.
<input type="submit" value="Logga in">
</form>

<a href="register.asp">Registrera dig här</a>
</div>

</body>
</html>


Registreringen
Vi börjar med att göra ett formulär där användaren skall mata in de uppgifter vill ha.
Det vi vill ha med är: användarnamn, lösenord, e-post, fillständigt namn, adress till användarens hemsida, adress till en bild på användaren och en text där användaren presenterar sig själv.

Formuläret skickas till samma sida med querystringen action=register så att vi vet vad som skall göras. Nu skall vi gå över till ASP-koden.

Det första jag gör är att kontrollera om min querystring innehåller action=register. Om så är fallet, så skall vi behandla data, annars så skrivs formuläret på sidan som vanligt.

I min kontroll så börjar jag med att deklarera mina variabler, detta för att lättare hålla reda på vilka variabler som används i dokumentet, samt att det är god programmerings-sed att göra det. En kontroll görs för att se om någon sträng är tom.

Sedan så tar jag bort onödiga tecken som kan ställa till problem när jag skall skapa min sql-sträng (' och %).

Nu är det dags att skapa och öppna min databas-koppling. Detta gör jag på samma sätt som i login.asp.
Därefter skapar jag en sql-sträng för att kontrollera om användarnamnet redan finns och öppnar ett recordset som kör frågan mot databasen.

Om användaren finns så lägger jag in ett meddelande om detta i en session-variabel och skriver ut formuläret igen, där meddelandet skrivs ut och man får försöka igen med ett annat namn. Om det inte finns någon sådant användarnamn registrerat så skall jag bygga min sql-sträng som stoppar in all data i databasen.

Jag använder mig av INSERT INTO-kommandot eftersom det är bättre prestandamässigt sett om man jämför med .Update-kommandot som finns för recordsets.

Här stoppar jag in allting som har skickats med formuläret genom att köra sql-frågan mot databasen med hjälp av kommandot objConn.Execute(strSQL).

Nu är det dags att skicka tillbaka användaren till inloggningssidan med ett meddelande om att han/hon är registrerad.

register.asp

Kod:
<%

' Request.Querystring, det finns i formuläret som kommer längre ner.
  if Request.QueryString("action") = "register" then

' Deklarar värderna
  Dim objCon
  Dim strConn
  Dim strSQL
  Dim strLoginName
  Dim strPassword
  Dim strEmail
  Dim strFullName
  Dim strURL
  Dim strPictureURL
  Dim strPresentation
  Dim rstUser

' Kontrollera om någon sträng är tom if strLoginName = "" then strLoginName = " "
  if strPassword = "" then strPassword = " "
  if strEmail = "" then strEmail = " "
  if strFullName = "" then strFullName = " "
  if strURL = "" then strURL = " "
  if strPictureURL = "" then strPictureURL = " "

' Ta bort ogiltiga tecken från alla strängar (' och %)
  strLoginName = Replace(Request.Form("userLoginName"), "'", "''")
  strPassword = Replace(Request.Form("userPassword"), "'", "''")
  strEmail = Replace(Request.Form("userEmail"), "'", "''")
  strFullName = Replace(Request.Form("userFullName"), "'", "''")
  strURL = Replace(Request.Form("userURL"), "'", "''")
  strPictureURL = Replace(Request.Form("userPictureURL"), "'", "''")
  strPresentation = Replace(Request.Form("userPresentation"), "'", "''")
  strLoginName = Replace(strLoginName, "%", "")
  strPassword = Replace(strPassword, "%", "")
  strEmail = Replace(Request.Form("userEmail"), "%", "")
  strFullName = Replace(Request.Form("userFullName"), "%", "")
  strURL = Replace(Request.Form("userURL"), "%", "")
  strPictureURL = Replace(Request.Form("userPictureURL"), "%", "")

' Skapar databaskopplingen
  Set objConn = server.CreateObject("ADODB.Connection")
  strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/community.mdb")
  objConn.Open strConn

' Skapar SQL-sträng för att kontrollera om användaren finns.
  strSQL = "SELECT userLoginName FROM tblUsers WHERE userLoginName = '" & strLoginName & "'"

' Skapa och öppna recordset
  Set rstUser = objConn.Execute(strSQL)

' Sedan om namnet var ledigt, då skriver den in i databasen.
  if (rstUser.EOF or rstUser.BOF) then

' Skapar SQL-sträng för att skapa en ny användare och kör strängen mot databasen.
  strSQL = ""
  strSQL = strSQL & "INSERT INTO tblUsers ("
  strSQL = strSQL & "userLoginName, userPassword, userEmail, userFullname, userURL, userPictureURL, "
  strSQL = strSQL & "userPresentation, userLoginStatus, userRegistred, userLoginLatest, userPoints"
  strSQL = strSQL & ")"
  strSQL = strSQL & "VALUES ("
  strSQL = strSQL & "'" & strLoginName & "', " 'Användarnamn
  strSQL = strSQL & "'" & strPassword & "', " 'Lösenord
  strSQL = strSQL & "'" & strEmail & "', " 'E-post
  strSQL = strSQL & "'" & strFullName & "', " 'Fullständigt namn
  strSQL = strSQL & "'" & strURL & "', " 'Hemsida
  strSQL = strSQL & "'" & strPictureURL & "', " 'Bild-adress
  strSQL = strSQL & "'" & strPresentation & "', " 'Presentation
  strSQL = strSQL & "0, " 'Inte inloggad
  strSQL = strSQL & "'" & Now() & "', " 'Registrerad dagens datum och tid
  strSQL = strSQL & "'" & Now() & "', " 'Senast inloggad
  strSQL = strSQL & "0" 'Antal poäng
  strSQL = strSQL & ")"

  objConn.Execute(strSQL)

' Skicka tillbaka användaren till inloggningsidan och meddela personen att den är registrerad.
  Session("message") = "<font color=""green"">Du är registrerad.<br>Du kan nu logga in.</font>"
  Response.Redirect("login.asp")

' Om namnet var upptaget
  else

' Skapa ett meddelande till användaren
  Session("regmess") = "<font color=""red""><b>Namnet finns redan, försök med någonting annat.</b></font>"

' Stänger End IF.
  end if
  end if

%>

<html>
<head>
<title>Registrera användare</title>
</head>
<body>
<%

' Skriver ut så att användaren får ett meddelande.
  Response.Write(Session("regmess"))
  Session("regmess") = ""

%>

// Formuläret är precis som inloggningen, "action=register"
  <form name="frmRegister" method="post" action="register.asp?action=register">

  <input type="text" name="userLoginName" value="<%=Request.Form("userLoginName")%>">Användarnamn<br>
  <input type="password" name="userPassword" value="<%=Request.Form("userPassword")%>">Lösenord<br>
  <input type="text" name="userEmail" value="<%=Request.Form("userEmail")%>">E-post<br>
  <input type="text" name="userFullName" value="<%=Request.Form("userFullName")%>">Fullständigt namn<br>
  <input type="text" name="userURL" value="<%=Request.Form("userURL")%>">Hemsida<br>
  <input type="text" name="userPictureURL" value="<%=Request.Form("userPictureURL")%>">Adress till en bild på dig<br>
  En presentation om dig själv<br>
  <textarea name="userPresentation" cols="40" rows="10"><%=Request.Form("userPresentation")%></textarea><br>
  <input type="submit" value="Registrera">
  <input type="reset" value="Rensa fält">

  </form>

</body>
</html>  


Observera att även om denna kod fungerar, så är det ingen speciellt avancerat applikation. Koden är endast till för att beskriva hur man kan gå tillväga när man bygger ett inloggningssystem. Det är alltså ingen idé att maila mig angående förbättringar av denna kod, det får ni klara själva. ;-)

Om ni däremot skulle hitta något fel i artikeln så är ni hemskt välkomna att maila mig så skall jag rätta till detta.

Silvio Fumei (silvio@fumei.net)
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,2227 sekunder att ladda sidan