Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:15 Der 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.

På forhånd tak
Avatar billede jokkejensen Novice
14. august 2005 - 12:18 #1
Hej..

Du skal have fat i global.asa..

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...
Avatar billede busschou Praktikant
14. august 2005 - 12:18 #2
Hvis du har adgang til en database så kan du jo (i princippet på alle dine sider) tjekke om den givne ip allerede findes den angivne dag
Avatar billede jokkejensen Novice
14. august 2005 - 12:19 #3
normalt siger man at unikke besøg er med intervaller på 20minutter og ikke en hel dag..
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:23 #4
jokkejensen -> Dit forslag lyder meget svært synes jeg.. Kan ske det ikke er det..
men derimod  busschou forslag lyder lidt nemmere..

Jokkejensen måske du kunne give et eksempel?
Avatar billede busschou Praktikant
14. august 2005 - 12:23 #5
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
Avatar billede jokkejensen Novice
14. august 2005 - 12:26 #6
hjemmeskoen... jeg skulle mene mig og busschou siger det samme, jeg anbefaler bare at bruge global.asa
Avatar billede busschou Praktikant
14. august 2005 - 12:26 #7
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
----
Avatar billede busschou Praktikant
14. august 2005 - 12:28 #8
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
Avatar billede jokkejensen Novice
14. august 2005 - 12:31 #9
den spytter bare en exception ud, kender heller ikke til exceptions i asp :)

men er det ikke bare noget On Error Resume Next .. eller sådan noget..
Avatar billede jokkejensen Novice
14. august 2005 - 12:31 #10
bagefter tæller man bare alle poster i tabellen... gem eventuelt useragent mm deri til statestik..
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:31 #11
Det som du lige har skrevet der busschou kan man ikke bare smide det op i en include også ligge den ud på alle siderne? Også funker det?
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:33 #12
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

Response.Write "Der er ialt <b><u>" & taelantalnyheder & "</u></b> besøg."
%>
Avatar billede busschou Praktikant
14. august 2005 - 12:34 #13
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
Avatar billede busschou Praktikant
14. august 2005 - 12:36 #14
du kan ligeså godt lade sql tælle for dig
set antal = Conn.Execute("select count(*) from Tæller")
response.write "der er nu så mange : "&antal(0)
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:36 #15
Ja det har jeg os tænkt mig også der hvor tælleren skal udskrives skriver jeg det jeg skrev 14/08-2005 12:33:05.

Men det er muligt og smide det du skrive 14/08-2005 12:26:59 i en include ik´?
Avatar billede busschou Praktikant
14. august 2005 - 12:37 #16
jo selvfølgelig du laver bare en include fil, der skal jo også laves en database forbindelse før det virker :O)
Avatar billede busschou Praktikant
14. august 2005 - 12:38 #17
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
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:41 #18
Jahr tror os det er en ekstremt god idé for jeg fatter ingenting af global.asa ;)
(Tester lige det andet)
Avatar billede jokkejensen Novice
14. august 2005 - 12:45 #19
lad være med at anbefale ham at lave et request til en access database på hver side...

Det kommer selvfølgeligt an på om han sjældent har flere end 20 aktive brugere som en access database max tillader..

Men på større sider, vil en access hurtigt "dø"
Avatar billede busschou Praktikant
14. august 2005 - 12:49 #20
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

fordele og ulemper ved alt :o)
Avatar billede jokkejensen Novice
14. august 2005 - 12:54 #21
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...
Avatar billede busschou Praktikant
14. august 2005 - 12:56 #22
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
Avatar billede busschou Praktikant
14. august 2005 - 12:57 #23
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
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 12:58 #24
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
%>

Til din busschou tilbød.
Avatar billede busschou Praktikant
14. august 2005 - 13:01 #25
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
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 13:03 #26
<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>


Så den kommer til at se sådan ud? :s
Avatar billede busschou Praktikant
14. august 2005 - 13:03 #27
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
Avatar billede busschou Praktikant
14. august 2005 - 13:05 #28
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
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 13:13 #29
Får fejl:

Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'request.servervarables'

/LM/w3svc/1330048937/root/global.asa, line 5
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 13:14 #30
Linie 5 = set antal = conn.execute("select count(*) from Taeller where ip = '"&request.servervarables("HTTP_REMOTE_ADDR")&"' and dato = #"&date()&"#")
Avatar billede busschou Praktikant
14. august 2005 - 13:32 #31
jeg kan jo bare lære at stave :o)
request.servervariables
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 13:41 #32
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Microsoft Access Driver] Field 'Taeller.ip' cannot be a zero-length string.

/LM/w3svc/1330048937/root/global.asa, line 7


Et eller andet sir´mig at der er noget der ikke er sat ordentligt sammen? =)
Avatar billede busschou Praktikant
14. august 2005 - 13:47 #33
ø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
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 14:02 #34
Hehe ;)
Ja så skulle det vidst virke..
Mange tak for hjælpen må jeg be om et svar.
Avatar billede busschou Praktikant
14. august 2005 - 14:06 #35
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)
Avatar billede hjemmeskoen Nybegynder
14. august 2005 - 14:14 #36
Ja det kan godt ske jeg skal dele dem.. Men på den anden side han hjalp jo ikke specielt men jo Jokkejensen du må os hellere hoste op med et svar.
Avatar billede busschou Praktikant
14. august 2005 - 14:25 #37
jeg vil bare helst være fair ;o), men det er jo altid op til spørgeren selvfølgelig.. se om ik han svarer
Avatar billede hjemmeskoen Nybegynder
02. september 2005 - 18:48 #38
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 :)
Avatar billede jokkejensen Novice
02. september 2005 - 19:00 #39
ja det er okay, han har vist også fortjent dem :)
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