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.
"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!
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)
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)
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
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" %>
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 %>
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
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
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
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
conn.execute("Update timer Set loggetind = "&now()&" where bruger = "&session("ID") -----------------------------------------------------------------------------------^
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"))
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)
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
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
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)
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
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)
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"))
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)
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
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 %>
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)
Synes godt om
Ny brugerNybegynder
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.