Här kommer jag med ett inloggningsscript, men det är någonting som buggar tror jag. Ibland när man skriver i grejer för att logga in (då kommer man alltså hit där man verifieras), så händer det ingenting, det blir fel, man kommer bara till loginsidan igenm, utan några som helst Session("meddelande") eller servergenererade fel, det är mycket märkligt.
Är det någon som ser något fel här? Går det att utföra dessa saker på något annat vis, direkt i SQL-strängar eller någonting etc. Jättetacksam för all hjälp! /Patrik
<!-- #include file="adovbs.inc" -->
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/fanclub.mdb")&";pwd=losen"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "Select * From members"
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
Do Until RecSet.EOF
If RecSet("status") = "online" AND DateDiff("n", RecSet("datum"), Now) > 45 Then
RecSet("status") = "offline"
Response.Redirect "default.asp?visaSida=start"
RecSet.Update
End If
RecSet.MoveNext
Loop
RecSet.Close
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
Do Until RecSet.EOF
If LCase(RecSet("username")) = LCase(Request.Form("username")) AND RecSet("losen") = Request.Form("losen") Then
RecSet("datum") = Now
RecSet("status") = "online"
RecSet.Update
Session("namn") = RecSet("fnamn") & " " & RecSet("enamn")
Session("fnamn") = RecSet("fnamn")
Session("enamn") = RecSet("enamn")
Session("username") = RecSet("username")
Session("login") = "ok"
Session("id") = RecSet("id")
Session("status") = "Online"
Session("epost") = RecSet("epost")
Session.TimeOut = 40
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
Response.Redirect "default.asp?visaSida=fanclub"
End If
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
Session("meddelande") = "Fel användarnamn och/eller lösenord!"
Response.Redirect "default.asp?visaSida=start"
%>
Du loopar igenom hela tabellen för att uppdatera vilka som är online / offline. Helt onödigt. Ställ en enda UPDATE-fråga mot tabellen.
Du öppnar samma recordset igen, genom att exekvera samma SQL-fråga igen. Onödigt.
Du loopar igenom hela tabellen för att se om man loggat in riktigt. Illa, ställ villkoren i SQL-frågan.
Du skapar väldigt många sessionsvariabler. Behöver du verkligen alla?
Du borde byta till OLEDB-connectionstring (lite snabbare) istället för att använda Access-drivern till din databasanslutning.
Koden du postar går att få ner till c:a 15 rader, mycket snabbare och effektivare.
Där fick du något att tugga på. :)
Jepp, behöver alla sessionvariablar.
Jag vore väldigt väldigt tacksam om du kunde hjälpa mig med att skriva ihop det jag behöver, snälla snälla @? *Hundvalpsögon*
Jag ser ju helst att du skriver ihop det själv, så du lär dig saker och ting, men men...
Eftersom du måste ha så många sessionsvariabler så blev det inte riktigt femton rader, men, om du ersätter hela ditt kodschabrak med följande, så borde det kanske funka lite bättre och mer effektivt:
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/fanclub.mdb")&";password=losen"
strUpdateSQL = "UPDATE members SET status = 'offline' WHERE datediff('n', datum, now()) > 45"
Connect.Execute strUpdateSQL,,128
strSQL = "SELECT * FROM members WHERE lcase(username) = '" & replace(request.form("username"), "'", "''") & "' AND losen = '" & replace(request.form("losen"), "'", "''") & "'"
Set RecSet = Connect.Execute (strSQL)
If not RecSet.EOF Then
' Inloggningen lyckades!
objConn.Execute "UPDATE members SET datum = now(), status = 'online' WHERE id = " & RecSet("ID")
Session("namn") = RecSet("fnamn") & " " & RecSet("enamn")
Session("fnamn") = RecSet("fnamn")
Session("enamn") = RecSet("enamn")
Session("username") = RecSet("username")
Session("login") = "ok"
Session("id") = RecSet("id")
Session("status") = "Online"
Session("epost") = RecSet("epost")
Session.TimeOut = 40
strURL = "default.asp?visaSida=fanclub"
Else
Session("meddelande") = "Fel användarnamn och/eller lösenord!"
strURL = "default.asp?visaSida=start"
End if
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
Response.Redirect strURL
%>