Avatar billede nicho Nybegynder
08. august 2005 - 03:24 Der er 55 kommentarer

Online-Tid

Hey You :)
Jeg er igang med at lave et community, nu vil jeg så lave en Tidstæller, den skal tælle fra man logger ind i community'et og til man logger ud. Den skal kun tælle timer og minutter.
Jeg vil meget gerne have i svarer fuldstændig præcist, altså siger hvor koden skal stå osv. Men her kommer noget af mit ...

"Tjek.asp" - Her har jeg mine sessions, og jeg har oprettet TID i databasen.

Session("ID") = rs("ID") 
Session("adgang") = True 
Session("status") = rs("status")
Session("tid") = now()

"Profil.asp" -
<%
mode = Request("mode")
Response.Buffer = True
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/db/community.mdb")
strSQL = "select * from brugere WHERE id=" & request("id") & " ORDER BY id"
set rs = Conn.execute(strSQL)%>
<br>
<br>
<b>Brugernavn:</b><br>
<%=Server.HtmlEncode(rs ("brugernavn"))%><br>
<br>
<b>Online-Tid</b><br>
- Hvordan skal jeg så sætte den præcise online tid i timer ind der?

"logud.asp" PT, ser min logud.asp sådan her ud.
<%
' slet værdierne i alle sessions
Session.Abandon
' og videresend brugeren
Response.Redirect "login/login.asp"
Conn.Close
Set Conn = Nothing
%>

Svar præcist hvor jeg skal sætte det ind og du vil være til stor nytte :D!
Avatar billede busschou Praktikant
08. august 2005 - 08:48 #1
Du har sikkert en login side ikke?
I din database bliver du så nød til at have to felter "loggetind" "totaltid"
Når vedkommende logger ind så laver du
"Update brugere Set loggetind = #"&Now()&"# Where id = "&request(id)
Når vedkommende logger ud så laver du
set rs = conn.execute("Select loggetind From brugere Where id = "request(id))
totaltid = DateDiff("n",rs("loggetind"),Now())
"Update brugere set totaltid = totaltid + "&totaltid&" Where id = "&request(id)
---
datediff regner tidsforskellen ud i minutter, som så lægges til totalen i databasen
Så sådan lignende kan du gøre
Læs evt min artikkel om global.asa
http://www.eksperten.dk/artikler/752
Du kan nemlig registrere at vedkommende logger ind  og ud i global.asa, og du kan registrere når vedkommende lukker sin browser som jo ikke er det samme som at logge ud på normal vis :o)
Avatar billede busschou Praktikant
08. august 2005 - 08:51 #2
jeg kommer lidt i tvivl om hvad det er du vil
1) om du vil vise hvor langt tid en bruger total har været online gennem tiderne
2) om du blot vil vise hvor lang tid en bruger har været online, imens han er online?

1 kan du løse som jeg har beskrevet
2 kan løse ved at du, som du vist allerede gør, husker tidspunktet for hvornår han er logget ind i en session, der hvor du vil vise tidsforskellen laver du så en datediff som tidligere beskrevet blot på denne session. Den finder forskellen i minutter men så er det jo blot at dividere med 60 :o)
Avatar billede busschou Praktikant
08. august 2005 - 08:53 #3
ps, hvis du allerede ved login opretter en session("ID") , så er det bedre på dine sider at referere til session("ID") fremfor request("ID")
Avatar billede nicho Nybegynder
08. august 2005 - 15:04 #4
Jeg vil vise, hvor lang tid han har været online ialt! :)
Avatar billede busschou Praktikant
08. august 2005 - 15:19 #5
ok så burde du kunne benytte mit første forslag
Det opdaterer så totaltiden bliver rettet i databasen når vedkommende logger ud
Du kan så enten på siden vise det som står i databasen, men det er klart at det ikke er helt så præcist i og med den kun opdaterer når der logges ud
Hvis du vil vise det helt præcist så laver du en
set rs = conn.execute("select total,loggetind from brugere where where id = "&session("ID"))
herved har du rs("total") og rs("loggetind") for hvornår brugeren loggede ind
tidIdag = DateDiff("n",rs("loggetind"),now())
nyTotal = tidIdag + rs("total")
og det er så i minutter
Avatar billede nicho Nybegynder
08. august 2005 - 15:49 #6
Kan du så ikke sætte det ind i min kode? For jeg forstår ikke hvor det skal være, sæt det præcist ind tak ;)
Avatar billede nicho Nybegynder
08. august 2005 - 15:51 #7
Jeg kunne også godt tænke mig at man fik 10 mønter i timen? Hvis du ved hvordan man gør, så bar sæt det med ind i koden :)
Avatar billede nicho Nybegynder
08. august 2005 - 15:53 #8
Eller nej, 1 mønt i timen ... :P
Avatar billede busschou Praktikant
08. august 2005 - 16:01 #9
jeg går ud fra at tjek.asp er den hvor man logger ind ikke?
---
"Tjek.asp"
---
Session("ID") = rs("ID")
Session("adgang") = True
Session("status") = rs("status")
Session("tid") = now()
conn.execute("Update din_tabel Set loggetind = "&now()&" where bruger = "&session("ID")
---
"logud.asp"
---
<%
set rs = conn.execute("select * from din_tabel where bruger = "&session("ID"))
onlinetid = DateDiff("n",rs("loggetind"),Now())
conn.execute("Update din_tabel Set total = total + "&onlinetid&" where bruger = "&session("ID"))
Session.Abandon
Response.Redirect "login/login.asp"
Conn.Close
Set Conn = Nothing
%>
----
"Profil.asp"
----
<%
mode = Request("mode")
Response.Buffer = True
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/db/community.mdb")
strSQL = "select * from brugere WHERE id=" & request("id") & " ORDER BY id"
set rs = Conn.execute(strSQL)%>
<br>
<br>
<b>Brugernavn:</b><br>
<%=Server.HtmlEncode(rs ("brugernavn"))%><br>
<br>
<b>Online-Tid</b><br>
<%
timer = rs("total")/60
minutter = rs("total") mod 60
response.write timer&" timer og "&minutter&" minutter"
%>
Avatar billede nicho Nybegynder
08. august 2005 - 16:02 #10
Prøver lige :)
Avatar billede nicho Nybegynder
08. august 2005 - 16:02 #11
Men skal Session("tid") = now() Fjernes?
Avatar billede busschou Praktikant
08. august 2005 - 16:03 #12
bedre kan jeg ikke gøre det
Hvis du vil have at man skal have en mønt i timen så må du opdatere det når man logger ud
---
<%
set rs = conn.execute("select * from din_tabel where bruger = "&session("ID"))
onlinetid = DateDiff("n",rs("loggetind"),Now())
conn.execute("Update din_tabel Set total = total + "&onlinetid&" where bruger = "&session("ID"))
monter = onlinetid/60
conn.execute("Update din_tabel Set monter = monter + "&monter&" where bruger = "&session("ID"))

Session.Abandon
Response.Redirect "login/login.asp"
Conn.Close
Set Conn = Nothing
%>
Avatar billede nicho Nybegynder
08. august 2005 - 16:04 #13
Kan jeg få din msn ?
Avatar billede busschou Praktikant
08. august 2005 - 16:05 #14
jeg har ikke hele din kode så det kan jeg ikke sige
Hvis ikke du bruger den til noget, så ja, og hvis du bruger den til noget, så nej
---
Jeg har skitseret hvordan jeg ville gøre
1) når der logges ind så registrer "loggetind" i databasen og evt i en session
2) når der logges ud så find logind tidspunktet og find antal minutter online og læg det til total i databasen
3) når der skal vises hvor lang tid man har været online så hiv total ud at databasen og divider med 60 for timer og tag modulus med 60 for minutter
Avatar billede busschou Praktikant
08. august 2005 - 16:05 #15
helst ikke :o)
Avatar billede nicho Nybegynder
08. august 2005 - 16:06 #16
Det hele vil bare være nemmere hvis jeg fik din msn :p
Avatar billede busschou Praktikant
08. august 2005 - 16:07 #17
ja det ved jeg, men så ville vi for det første bryde reglerne på eksperten, og for det andet ville min msn være fyldt med folk :p
..
Anyway er det ikke sværere end jeg lige har skitseret
Avatar billede nicho Nybegynder
08. august 2005 - 16:07 #18
Men nu har jeg sat det ind i "Tjek.asp"

Session("ID") = rs("ID") 
Session("adgang") = True 
Session("status") = rs("status")
Session("tid") = now()
conn.execute("Update timer Set loggetind = "&now()&" where bruger = "&session("ID")
sql = "update brugere set ip = '" & request.servervariables("remote_addr") & "' where id = " & session("id") & ""
conn.execute(sql)
Response.redirect "menu/menu.asp"

Er det rigtigt? Og skal Session("tid") = now()  Tid fjernes? Og hvorfor nogle tables skal laves i databsen?
Avatar billede busschou Praktikant
08. august 2005 - 16:10 #19
du kunne lave en tabel "timer" med felterne "brugerid", "loggetind", "loggetud", "total"
Så kunne du nemlig også registrere hvornår brugeren sidst er set,
Hvis det er sådan noget community noget så kan den så skrive "Ib er sidst set fredag den 13 kl 17:20"
--
Du kan godt beholde session("tid"), og droppe "loggetind" i databasen
Så slipper du for at lave et database opslag
Men du skal have en total i databasen, for ellers husker den det jo ikke
Avatar billede nicho Nybegynder
08. august 2005 - 16:13 #20
Skal der ikke også være noget der starter mønter?
Avatar billede busschou Praktikant
08. august 2005 - 16:14 #21
men som sagt i min indledning
Hvis en bruger lukker sin browser, så bliver din logud.asp aldrig kørt
Derfor er du nød til at kigge på global.asa hvis du vil have at det skal funke ordentlig

Så det vil jeg foreslå dig at kigge på først
Jeg har i min artikkel til sidst vist et eksempel på hvordan login og logud udelukkende kan styres i global.asa, og det vil være rimelig snildt at rette til med mønter og timer og minutter, da det jo blot er tre variable
Så slipper du for at kode det andre steder end der
Avatar billede nicho Nybegynder
08. august 2005 - 16:17 #22
Jamen, du kan jo bruge en popup når folk logger ud? Der au2matisk lukker sig ned ... Men der skal ikke være noget session i Tjek.asp med mønter?
Avatar billede nicho Nybegynder
08. august 2005 - 16:18 #23
Microsoft VBScript compilation error '800a03ee'

Expected ')'

/community/Tjek.asp, line 22

conn.execute("Update timer Set loggetind = "&now()&" where bruger = "&session("ID")
-----------------------------------------------------------------------------------^

Nu kommer den med den her fejl ...
Avatar billede busschou Praktikant
08. august 2005 - 16:19 #24
ja i IE kan du som den eneste browser. Alle andre kan du ikke!
Avatar billede nicho Nybegynder
08. august 2005 - 16:19 #25
Men, Jeg har jo ikke noget der hedder "timer" i min database? Hvad skal jeg kalde den tabel? Jeg har oprettet de databaser du sagde ...
Avatar billede busschou Praktikant
08. august 2005 - 16:20 #26
du skal jo lave et felt i databasen til mønterne
Så kan du vel hive det ud altså
Session("monter") = rs("monter")
Jeg tror du gør det sværere end det er :o)
----
Expected ')'
betyder den forventer en parantes
som du kan se har jeg glemt en hvis du tæller efter :o)
conn.execute("Update timer Set loggetind = "&now()&" where bruger = "&session("ID"))
Avatar billede busschou Praktikant
08. august 2005 - 16:20 #27
hjælp
Avatar billede busschou Praktikant
08. august 2005 - 16:23 #28
læs min kommentar 08/08-2005 08:48:33 eller 08/08-2005 16:05:19
De forklarer alt der er nødvendig
Hvis du vil have jeg skal skrive hele din kode kan jeg godt det men så må du annoncere det som en programmeringsopgave til penge et eller andet sted

Jeg vil gerne hjælpe men det kræver også man gør lidt selv
Man får ikke noget ud af at få det hele forærende jo :o)
Hvis du aldrig har arbejdet med sessions og databaser før så forstår jeg godt du synes det er svært
Men så vil jeg anbefale dig at starte med at gå ind på html.dk og w3schools.com og læse deres tutorials :o)
Avatar billede nicho Nybegynder
08. august 2005 - 16:24 #29
Session("monter") = rs("monter") Eih, nu siger den der er fejl i monter? Jeg har en tabel der hedder monter i databasen ...

Session("monter") = rs("monter") Den skal da ind i Tjek.asp ikke?
Avatar billede busschou Praktikant
08. august 2005 - 16:24 #30
når jeg har sagt timer, loggetind, loggetud, total
Så er det jo fordi jeg ikke ved hvad dine felter i tabellen hedder
Nu lyder det som om du ingen tabel har
Men så laver du jo bare en med de felter jeg har foreslået
Avatar billede busschou Praktikant
08. august 2005 - 16:25 #31
har du en tabel der hedder monter?
rs("monter") refererer ikke til en tabel men til en kolonne i en tabel!!!
Avatar billede nicho Nybegynder
08. august 2005 - 16:25 #32
Please, jeg har arbejdet med Databaser og sessions i timevis ..
Avatar billede nicho Nybegynder
08. august 2005 - 16:25 #33
Sorry, mente og kolonne ...
Avatar billede nicho Nybegynder
08. august 2005 - 16:28 #34
Skal jeg sende min database?
Avatar billede busschou Praktikant
08. august 2005 - 16:28 #35
jamen jeg ved ikke hvordan jeg kan forklare dig det bedre
1) Jeg har forklaret at den måde du vil løse det på ikke er optimal eftersom alle dem som lukker vinduerne ikke tælles med
2) Jeg har forklaret 08/08-2005 08:48:33 og 08/08-2005 16:05:19 hvordan du kan gøre
3) Jeg har ingen indsigt i hvilke databaser du ellers har og hvilken kode du ellers har
4) Jeg kan ikke forklare det bedre uden at kode det hele for dig og det er jeg ikke interessret i - sorry
Avatar billede busschou Praktikant
08. august 2005 - 16:30 #36
nej det skal du ikke
om du kalder feltet for "monter" eller "grunker" eller "loggetind" eller "tid" og hvad du kalder din tabel er jo total underordnet :o)
pointen er hvordan det kan gøres og det har jeg vist dig
så kan du kalde dine felter lige det du ønsker :o)
Avatar billede busschou Praktikant
08. august 2005 - 16:30 #37
man lærer ikke sessions og databaser på et par timer, jo nogen gør måske
Men øvelse gør mester
Avatar billede busschou Praktikant
08. august 2005 - 16:32 #38
jeg vil gerne hjælpe men jeg vil også gerne at du forstår hvorfor det skal gøres som det skal, så du lærer noget
---
hvad indeholder din tjek.asp
Så ser vi på den først og alene
Avatar billede busschou Praktikant
08. august 2005 - 16:36 #39
bare du er klar over at det _ikke_ kan gøres perfekt uden brug af global.asa, og selv der er det ikke 100% perfekt
For det er jo spild at lave en masse som du så vil lave om fordi du senere indser at du ikke "bare" kan lave en popup som logger folk korrekt ud :o)
Avatar billede nicho Nybegynder
08. august 2005 - 16:40 #40
Den siger fejl her -v-
conn.execute("Update brugere Set loggetind = "&now()&" where brugernavn = "&session("ID"))

Min database ser sådan her ud:
Community.mdb

Brugere
- ID
- Loggetind
- Loggetud
- Brugernavn
- Icq
- Timer
- Monter
- Billed
- Total
- IP
- adgangskode

Tagwall
- Id
Avatar billede nicho Nybegynder
08. august 2005 - 16:40 #41
Kan fandme ikke se fejlen ...
Avatar billede busschou Praktikant
08. august 2005 - 16:42 #42
det er nok fordi der skal # omkring datoer i access :o)
Skrev jeg vist i det aller første indlæg men glemte i det her
--
conn.execute("Update brugere Set loggetind = #"&now()&"# where brugernavn = "&session("ID"))
Avatar billede busschou Praktikant
08. august 2005 - 16:43 #43
for din egen skyld ville jeg overveje om det bør hedde "brugernavn"
Det forbinder man jo med et navn
Men når du sammenligner det med et ID
Så kommer man i tvivl om hvad der er hvad for et ID er jo normalt et tal :o)
Avatar billede nicho Nybegynder
08. august 2005 - 16:44 #44
Den siger stadig fejl ;s
Avatar billede busschou Praktikant
08. august 2005 - 16:47 #45
så må du jo sige hvilken fejl for jeg kan jo trods alt ikke gætte alt vel :o)
Avatar billede nicho Nybegynder
08. august 2005 - 16:50 #46
Så nu kan man logge ind :D?

Session("ID") = rs("ID") 
Session("adgang") = True 
Session("status") = rs("status")
Session("monter") = rs("monter")
sql = "Update Brugere Set loggetind = #"&now()&"# where brugernavn = "&session("ID")
sql = "update brugere set ip = '" & request.servervariables("remote_addr") & "' where id = " & session("id") & ""
conn.execute(sql)
Response.redirect "menu/menu.asp"

Nu kan man logge ind, men den siger en fejl når man logger ud i linje 2 'conn'
Avatar billede nicho Nybegynder
08. august 2005 - 16:52 #47
Og i ens profil ved online tid står der  Microsoft VBScript runtime error '800a01f5'

Illegal assignment: 'timer'

/community/Profil/profil.asp, line 81
Avatar billede busschou Praktikant
08. august 2005 - 16:52 #48
ja det er fint,
hvis du vil have hjælp bliver du nød til at altid vise hvilken fejl den giver samt linjen eller linjerne omkring der hvor den giver fejlen
Ellers er det jo umuligt det her
Avatar billede busschou Praktikant
08. august 2005 - 16:54 #49
det er muligt at timer er reserveret ord
kald det evt _timer i stedet
Avatar billede nicho Nybegynder
08. august 2005 - 16:59 #50
I Linie 2 siger det at det Conn.execute der er fejlen ...

<%
set rs = conn.execute("select * brugere where brugernavn = "&session("ID"))
onlinetid = DateDiff("n",rs("loggetind"),Now())
conn.execute("Update brugere Set total = total + "&onlinetid&" where bruger = "&session("ID"))
monter = onlinetid/60
conn.execute("Update brugere Set monter = monter + "&monter&" where bruger = "&session("ID"))

Session.Abandon
Response.Redirect "login/login.asp"
Conn.Close
Set Conn = Nothing
%>
Avatar billede busschou Praktikant
08. august 2005 - 17:00 #51
der mangler "from"
hmm hvor meget havde du læst om databaser ;o)

anyway jeg er altså desværre nød til at smutte lidt
Håber du klarer dig lidt! :o)
Avatar billede nicho Nybegynder
08. august 2005 - 17:06 #52
Ehm, den siger stadig der er fejl, Den siger stadig det med 'conn'
Avatar billede nicho Nybegynder
08. august 2005 - 17:14 #53
Er virkelig lost, og skal minutter ikke også oprettes i databasen?
Avatar billede nicho Nybegynder
08. august 2005 - 17:14 #54
Vi snakkes ved senere :P
Avatar billede busschou Praktikant
08. august 2005 - 17:19 #55
hvem har snakket om at timer og minutter skulle oprettes i databasen?
jeg har hele tiden snakket om "total" som er angivet i total antal minutter
Så hvor får du det fra

Brug lige pausen på at puste ud og træk vejret og læs alle kommentarene igennem een gang til stille og roligt
Det lyder enten som om du er helt helt helt ny, eller også at du jager rundt
Og det er der ingen grund til, omvendt er det et galt sted at starte som helt ny

Jeg ved ikke lige hvornår jeg er tilbage i aften

Ses :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester