webForumDet fria alternativet

webbchat

83 svar · 1 674 visningar · startad av ptr_lks · sida 4 av 5

EclipseMedlem sedan juli 20003 825 inlägg
#61

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 & "';"

ptr_lksMedlem sedan juni 2005584 inlägg
#62

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

ptr_lksMedlem sedan juni 2005584 inlägg
#63

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

J.N.Medlem sedan apr. 20031 660 inlägg
#64

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.

EclipseMedlem sedan juli 20003 825 inlägg
#65

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
ptr_lksMedlem sedan juni 2005584 inlägg
#66

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..

ptr_lksMedlem sedan juni 2005584 inlägg
#67

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

EclipseMedlem sedan juli 20003 825 inlägg
#68

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())

EclipseMedlem sedan juli 20003 825 inlägg
#69

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!

ptr_lksMedlem sedan juni 2005584 inlägg
#70

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:

  1. att jag i tabell chattare skapar en fält = dteOnLineTimer
  2. strSQL = "UPDATE chattare SET dteOnLineTimer = Now()"

PS. Jag kanske skall nämna jag uppdaterar sidan med

<meta http-equiv="Refresh" content="8">
ptr_lksMedlem sedan juni 2005584 inlägg
#71

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()

%>
ptr_lksMedlem sedan juni 2005584 inlägg
#72

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

devotionMedlem sedan jan. 20013 582 inlägg
#73

Datum skall stå inom # #

Where datefield = #" & dtDate & "#

Mvh
Henrik

ptr_lksMedlem sedan juni 2005584 inlägg
#74

devotion skrev:

Datum skall stå inom # #

Where datefield = #" & dtDate & "#

Mvh
Henrik

fast i mitt fall handlar det mera om:

SET datefield = Now
EclipseMedlem sedan juli 20003 825 inlägg
#75

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 & "';"

ptr_lksMedlem sedan juni 2005584 inlägg
#76

är detta bättre databas-uppbyggnad?
tblchattUser
chattID
chattNamn
chattPassword
dteOnLineTimer

tblchattMeddelande
meddelandeID
chattText
avchattUser
skrivTid

ptr_lksMedlem sedan juni 2005584 inlägg
#77

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?

@ndersMedlem sedan juni 200032 969 inlägg
#78

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.

ptr_lksMedlem sedan juni 2005584 inlägg
#79

@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?

@ndersMedlem sedan juni 200032 969 inlägg
#80

Stort frågetecken: ?

134 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)