Inte ett svar på din fråga, ett rent tips:
Byt från / till
strSQL = "UPDATE chattare SET onLine = 1 WHERE chattNamn ='" & strUser & "';"
strSQL = "UPDATE chattare SET onLine = 1 WHERE intID ='" & intID & "';"
83 svar · 1 674 visningar · startad av ptr_lks · sida 4 av 5
Inte ett svar på din fråga, ett rent tips:
Byt från / till
strSQL = "UPDATE chattare SET onLine = 1 WHERE chattNamn ='" & strUser & "';"
strSQL = "UPDATE chattare SET onLine = 1 WHERE intID ='" & intID & "';"
Det verkar som att Ja/Nej fälten i access har nummeriska värdet 0 för sant och -1 för falsk
Problemet som uppstod nu är att samtliga som finns i databasen loggas som online. Vill ju att bara de som är aktiva listas som online
nedanstående kod skall ju logga ut inaktiva medlemmar
<!-- #include virtual="/includes/dbkoppling.asp" -->
<!-- #include virtual="/includes/koll_inloggning.asp" -->
<%
Call PageAccess()
Call dbOpen()
Set rs = Server.CreateObject("ADODB.Recordset")
Do Until rs.EOF
If rs("onLine") = 0 AND DateDiff("n", RecSet("tidpkt"), Now) > 25 Then
rs("onLine") = -1
rs.Update
End If
rs.MoveNext
Loop
rs.Close
Call dbClose()
Response.Redirect "default.asp"
%>
Ovanstående kod har jag försökt para ihop med
<!-- #include virtual="/4testasp/includes/dbkoppling.asp" -->
<!-- #include virtual="/4testasp/includes/koll_inloggning.asp" -->
<%
Call PageAccess()
Response.Write "Anvndare online: <BR>"
Call dbOpen()
strSQL = "SELECT * FROM chattare WHERE onLine = 0"
Set rs = minCon.Execute(strSQL)
if rs.EOF Then
Response.Write("Ingen online")
Else
Do until rs.EOF
Response.Write rs("chattNamn") & "<BR>"
rs.MoveNext
Loop
end if
Call dbClose()
%>
dock misslyckats
hoppas på hjälp från Er
/ptr
HEJ!
Kontrollera att det som sker verkligen sker.
När man loggas in, titta i databasen att du verkligen ÄR det. För mig verkar det som att man aldrig loggas in, eftersom du får upp "Ingen online".
Skriv ut sql och variabler, så du ser att vad du tror händer, också severn tycker.
Har man fel, vinner servern...
Ser också en konstig sak i din första kodsnutt, där skriver du Do Until rs.EOF. På vilket rs? Raden ovanför skapar endast objektet rs.
Inte ett svar på din fråga, ett rent tips:
Byt från / till
strSQL = "SELECT * FROM chattare WHERE onLine = 0"
strSQL = "SELECT intID FROM chattare WHERE onLine = FALSE"
***
Jag väntar med spänning på hur du tänkt dig att användare som inte är online loggas...!
***
OK, jag ger två förslag:
1. En timer på varje användare. Alltså, om användaren är online men det gått mer än 15 minuter är den användaren sen offline.
dteCreated = now()
2. Reggar dig hos aleborg och utnyttjar möjligheterna med global.asa:
SUB Session_OnStart
Application.Lock
application("ActiveUsers") = application("ActiveUsers") + 1
application("visitors") = application("visitors") + 1
Application.UnLock
END SUB
SUB Session_OnEnd
Application.Lock
application("ActiveUsers") = application("ActiveUsers") - 1
Application.UnLock
END SUB
J.N. skrev:
HEJ!
Kontrollera att det som sker verkligen sker.
När man loggas in, titta i databasen att du verkligen ÄR det. För mig verkar det som att man aldrig loggas in, eftersom du får upp "Ingen online".
Som jag skrev i inlägg #62 så har detta löst sig...
Skriv ut sql och variabler, så du ser att vad du tror händer, också severn tycker.
Har man fel, vinner servern...
genom response.write(strSQL)?
Ser också en konstig sak i din första kodsnutt, där skriver du Do Until rs.EOF. På vilket rs? Raden ovanför skapar endast objektet rs.
den kodsnutten är inte kollad än..
Eclipse skrev:
Jag väntar med spänning på hur du tänkt dig att användare som inte är online loggas...!
De skrevs ju in i databasen, och sedan tänkte jag "snickra" en kod på pseudosvenska
1) Har besökaren lämnat sidan
2) SET onLine = -1
3) redirect
Då hoppas jag att med #2 kan jag behålla lösenord och anv namn i databasen, men ändrat till offline
Nej, jag skriver dåligt!
OK, jag är med på att när man loggar in så är man online.
Men om man loggar in och sen klickar runt lite och sen stänger webbläsaren, eller för den delen, lämnar webbläsaren öppen och går på lunch, så är man online forever i ditt system.
Med en timer skulle du kunna förhindra att användare är påloggade hela tiden.
Din kod för att få fram alla onlinechattare skulle alltså kunna vara nåt åt detta hållet:
SQL = SELECT intID, strName FROM chattare WHERE onLine = TRUE OR dteCreated <= dateCreated + 15 minuter"
Are you with?
Kolla funktionen dateAdd i dokumentationen:
NewDate = DateAdd("m", 1, "31-Jan-95")
Du skriver... dateAdd("m", 15, now())
En miss från min sida! Jag noterar nu att du har EN tabell för allt detta.
Lämpligare val av din timer kan vara dteTimer eller dteLoginTimer.
Varje gång du loggar in måste du givetvis sätta timern till now() för att logga in... men det gör du ju i samma kod som du sätter onLine = 1...
***
Usch nu blir det rörigt! Jag inser nu att om man surfar mer än 15 minuter på detta sättet kommer man vara utloggad...
***
Nytt förslag:
Jag hade gjort så här att varje gång användaren klickar så kör du en UPDATE på dteOnLineTimer och sätter den till now().
Sen skippar du [onLine] i din tabell och frågar bara om timern är nu eller 15 minuter gammal. Dom användarna är online!
Eclipse skrev:
***
Nytt förslag:
Jag hade gjort så här att varje gång användaren klickar så kör du en UPDATE på dteOnLineTimer och sätter den till now().Sen skippar du [onLine] i din tabell och frågar bara om timern är nu eller 15 minuter gammal. Dom användarna är online!
Innebär ditt förslag:
PS. Jag kanske skall nämna jag uppdaterar sidan med
<meta http-equiv="Refresh" content="8">
så detta borde funka
loggin.asp
<!-- #include virtual="/4testasp/includes/dbkoppling.asp" -->
<%
Call dbOpen()
strUser = replace(Request("chattnamn"), "'", "''")
strPasw = replace(Request("pword"), "'", "''")
strSQL = "SELECT * FROM chattare WHERE chattNamn = '"_
& strUser & "' AND chattPassw ='" & strPasw & "';"
Set rs = minCon.execute (strSQL)
if not rs.EOF then
strSQL = "UPDATE chattare [B]SET dteOnLineTimer = Now()[/B] WHERE chattNamn ='" & strUser & "';"
minCon.execute strSQL,,128
strSQL = "INSERT INTO chatMess (frChattare, mess, tidpkt) VALUES ("_
& "'System', '<i>" & strUser & "</i> Steg in i chatten', '" & Now & "');"
minCon.execute strSQL,,128
Session("Inloggad") = rs("anvID")
Call dbClose()
Response.Redirect "visa_online.asp"
else
Call dbClose()
Response.Redirect("error.htm")
end if
%>
visa_online.asp
<!-- #include virtual="/4testasp/includes/dbkoppling.asp" -->
<!-- #include virtual="/4testasp/includes/koll_inloggning.asp" -->
<meta http-equiv="Refresh" content="8">
<%
Call PageAccess()
Response.Write "Anvndare online: <BR>"
Call dbOpen()
strSQL ="SELECT * FROM chattare WHERE dteOnLineTimer>'"& DateAdd("n",-25,Now()) &"'"
Set rs = minCon.Execute(strSQL)
if rs.EOF Then
Response.Write("Ingen online")
Else
Do until rs.EOF
Response.Write rs("chattNamn") & "<BR>"
rs.MoveNext
Loop
end if
Call dbClose()
%>
får inte till min strSQL
strSQL = "UPDATE chattare [B]SET dteOnLineTimer = Now()[/B] WHERE chattNamn ='" & strUser & "';"
Har försökt med enkelfjuttar, apostorfer... men blir inte bra...
Som tidigare sagt så anv access 2003 och fältet är av typen Datum/tid
/ptr
devotion skrev:
Datum skall stå inom # #
Where datefield = #" & dtDate & "#Mvh
Henrik
fast i mitt fall handlar det mera om:
SET datefield = Now
Du tänker rätt men fel...
Byt från / till
strSQL = "UPDATE chattare SET dteOnLineTimer = Now() WHERE chattNamn ='" & strUser & "';"
strSQL = "UPDATE chattare SET dteOnLineTimer = #" & Now() & "# WHERE chattNamn ='" & strUser & "';"
är detta bättre databas-uppbyggnad?
tblchattUser
chattID
chattNamn
chattPassword
dteOnLineTimer
tblchattMeddelande
meddelandeID
chattText
avchattUser
skrivTid
logga ut från chatten
vill jag göra genom att klicka på knappen loggout för att komma till sidan loggut.asp
<%
<!-- #include virtual="/includes/koll_inloggningen.asp" -->
Session.Abandon
Response.Redirect "default.asp"
%>
koll_inloggningen.asp
Public Sub PageAccess()
If len(Session("Inloggad")) = 0 Then
Response.Redirect("error.htm")
End If
End Sub
Min fråga är:
är detta ett säkert och bra sätt för att logga ut?
Det tar i alla fall hand om destruktionen av alla sessionsvariabler.
Men det känns väldigt onödigt att du inkluderar inloggningskontroll-filen på den sidan.
@nders skrev:
Det tar i alla fall hand om destruktionen av alla sessionsvariabler.
Men det känns väldigt onödigt att du inkluderar inloggningskontroll-filen på den sidan.
Vilket sätt skulle du rekomendera?
Stort frågetecken: ?