14. august 2005 - 12:15Der er
38 kommentarer og 1 løsning
Unik Besøgstæller
Hejsa..
Nogle der kan hjælpe mig med at lave en unik besøgstæller? Når jeg skriver en unik besøgstæller mener jeg en besøgstæller der registrer ens IP så man kun bliver talt EN gang om dagen selvom man nu besøger siden 15 gange. Det os noget at gøre med at man ikke bare kan sidde og trykke F5 også den bliver ved med at tælle.
lav en tabel,og i session_start, smider du dato og ip som primary key, sammensæt dem, så du ikke får flere records fra samme dato og ip.. altså vil derførst være mulighed for at smide en ny record i tabellen, hvis man endten har en ny dato eller en ny ip...
Det med sammensatte nøgler lyder smart, har jeg bare ingen forstand på ;o) Global.asa, det kunne være en god nok ide læs evt en artikkel om global.asa her http://www.eksperten.dk/artikler/752
Angående unikke besøg på ip adressen, så skal du blot have i tankerne at flere og flere nu om dage går på trådløse net og får tildelt en dynamisk ip Dvs du kan godt risikere at flere forskellige mennesker besøger din side fra samme ip
mit forslag kræver i princippet flere resoucer end jokkejensens men --- set antal = conn.execute("select coun(*) from tabel where ip = '"&request.servervarables("HTTP_REMOTE_ADDR")&"' and dato = #"&date()&"#") if antal(0) = 0 then conn.execute("Insert into tabel (ip,dato) values ('"&request.servervarables("HTTP_REMOTE_ADDR")&"',#"&date()&"#)") end if ----
jeg tænkte egentlig ikke på global.asa, men det er smart da du slipper for at lave tjekket på hver eneste side
Min metode tæller først om der allerede er en record i tabellen, hvis ikke så indsætter den en Jokkejensen snakker om en sammensat nøgle som gør at man slipper for at tjekke om der er en record, og det kender jeg desværre ikke til i access
Ja også der hvor tælleren skal være skriver man vel:
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/Database.mdb") taelantalnyheder = 0 strSQL = "Select * from Tæller" Set rs = Conn.Execute(strSQL) if rs.eof then response.write "" else do taelantalnyheder = taelantalnyheder + 1 rs.MoveNext loop while not rs.eof end if
det jeg skrev 14/08-2005 12:26:59 kan du i princippet have på alle siderne, så vil den på hver eneste side altid lave et opslag og se om man eksisterer jo
et ps kunne være at du ved lejlighed læser om global.asa, kan forstå på dig du ønsker en hurtig løsning og det er fint nok :o), men den kan nu nogle gode ting den global.asa så det er bare et ps, det andet her kan du selvfølgelig fint få til at virke
nu er det jo sådan at ved at bruge connection så har jeg da forstået det sådan at hele tabellen låses, hvorved resten sættes i kø, derved vil der jo til acces kun være en aktiv bruger ad gangen :o) -- Jeg er enig i at global.asa er en bedre løsning, men hvis det er for meget for ham at sluge her og nu, så er det andet da en mulig løsning -- Man kunne også nøjes med at lave tjekket på sin index side, men så igen, så kunne man også lade være med at lave det, jeg har da i hvert fald mange sider jeg går ind på hvor jeg går direkte ind på en anden side end index siden, så der vil der tilsvarende være besøg man ikke får talt med
ellers må du give ham noget kode der gennem en Session ser om man allerede har kørt det kode i den inklude fil.. et request til DB hvergang er i hvert fald ikke optimalt...
har heller aldrig sagt det var optimalt ;o) men ok da ---- if session("logget") = "" then conn.execute("Insert into tabel (ip,dato) values ('"&request.servervarables("HTTP_REMOTE_ADDR")&"',#"&date()&"#)") session("logget") = "JEP" end if
hov men den skal stadig tjekke om den er i tabellen i tilfælde af sessionen er en ny session selvfølgelig ---- if session("logget") = "" then set antal = conn.execute("select coun(*) from tabel where ip = '"&request.servervarables("HTTP_REMOTE_ADDR")&"' and dato = #"&date()&"#") if antal(0) = 0 then conn.execute("Insert into tabel (ip,dato) values ('"&request.servervarables("HTTP_REMOTE_ADDR")&"',#"&date()&"#)") end if session("logget") = "JEP" end if
I forvirer mig lidt ;) Jokkejensen kan du give mig koden på global.asa for så kan det da ske det er klogere og indsætte..
Eller har jeg forsøgt med:
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/Database.mdb") set antal = conn.execute("select count(*) from Taeller where ip = '"&request.servervarables("HTTP_REMOTE_ADDR")&"' and dato = #"&date()&"#") if antal(0) = 0 then conn.execute("Insert into Taeller (ip,dato) values ('"&request.servervarables("HTTP_REMOTE_ADDR")&"',#"&date()&"#)") end if %>
du laver bare en fil kaldet global.asa i den skriver du --- <SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Session_OnStart //her indsætter du database forbindelse og tjek som før End Sub </SCRIPT> --- Fordelen er at den bliver kun kørt een gang, nemlig hver den første gang en bruger går ind på en vilkårig asp side
<SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Session_OnStart Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/Database.mdb") set antal = conn.execute("select count(*) from Taeller where ip = '"&request.servervarables("HTTP_REMOTE_ADDR")&"' and dato = #"&date()&"#") if antal(0) = 0 then conn.execute("Insert into Taeller (ip,dato) values ('"&request.servervarables("HTTP_REMOTE_ADDR")&"',#"&date()&"#)") end if End Sub </SCRIPT>
men det er muligt at jokkejensen forslag med en sammenkædet nøgle og en on error resumen next er smartere, jeg har bare ingen erfaring med at fange fejl i asp desværree
ja sådan ville jeg mene, det eneste jeg ikke forstår er din "../" i din server.mappath, for ideen med server.mappath er vel netop at man slipper for sådanne relative stier eller hvad de nu hedder
øhh det kunne ligne at din ip ikke må være tom, og hvorfor er den så det,, jo fordi jeg er en taste spade :o/ Det hedder ikke HTTP_REMOTE_ADDR det hedder blot REMOTE_ADDR sorry
yes, håber jeg da det gør ellers må du råbe højt igen :o) ps: du må lige vurdere om jokkejensen skal have point, var jo ham som foreslog global.asa først :o)
Synes der er ventet noget tid nu :) Jokkejensen hvis du ikke svarer her inden for et par dage så bliver jeg nok nød til at give busschou pointene.. Ikke for at være ond men den kan jo ikke være åben altid :)
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.