06. juni 2007 - 20:25Der er
27 kommentarer og 1 løsning
Track ip hjælp
Hey skal have lavet en simpel hitcount hvor jeg kun vil have et hit hver gang en ny person kikker siden, det tænkte jeg at man kunne gøre ved evt. at tracke deres IP eller mac og smide den ind i en db og så kan jeg se antallet af hits ved at se hvor mange ip/mac adresser jeg har hentet... men delen ved at man henter den besøgenes ip/mac adresse kan jeg ikke finde ud af.. iøvrrigt vis der er nogle der har nogle kommentare til mit "projekt"
Din plan er god nok, Snooby, men erfaring siger mig, at der kommer til at ligge rigtig mange ip-adresser i din database lynhurtigt!
Du bør nok i stedet lave ét til felt i databasen med antallet af hits pr. ip-nr., samt en kode, der 1) Tjekker om ip'en findes! 2) Hvis ip'en findes lægges ét "hit" til antallet af hits for denne ip. Ellers oprettes ip'en.
jamen, jeg vil have sådan at vis ipen allerede findes i dben skal den ikke tælles som et hit. sådan at om folk kikker 100 gange eller 2 bliver den person(computer) kun talt som et hit.
men jeg har lavet sådan at jeg kan hente ipen og sætte den ind i en db. men kan ikke lige helt hitte ud af at gøre sådan at vis ipen allerede findes i dben skal den ikke logges der i.
men det er vel noget i stilen med at vis ip = nogen afdem der står i dben sker der ikke noget, og hvis der ikke er et mach så bliver ipen skrevet ind i dben.. aner bare ikke lige hvordan man skriver koderne til det ?
Jeg læste dit spørgsmål som om at det kun var delen med at finde de besøgendes IP adresse du havde besvær med...
En mere komplet løsnining kunne se sådan her ud:
ip = Request.ServerVariables("REMOTE_ADDR")
sql = "SELECT count(*) AS antal FROM dinIpTabel WHERE ip = '" & ip & "'" Set rs = conn.Execute(sql) antal = rs("antal")
If antal = 0 Then sql = "INSERT INTO dinIpTabel (ip) VALUES ('" & ip & "')" conn.Execute(sql) Else ' Her kan du vælge at tælle op hvor mange gange du har haft besøg af det ip End If
set RS = objconn.Execute("INSERT INTO tblVisits (VisitorIP) Values ('" & strvisitor & "')")
else
response.write "ingen ip fundet" End if %>
sådan så smider den de iper ind i dben som går ind på siden. men vil gerne have sådan at vis fx ip 10.10.10.10 bliver registreret i dben skal den ikke registreres næste gang den kommer ind.. dvs. alle iper der kommer ind på siden bliver kun registreret EN gang... også selvom de besøger siden X antal gange... men det vel noget i stilen med
if strvisitor "findes i tblVisits" skal der ikke ske noget, men hvis den ikke findes i tblVisits skal den uploade ipen til tblvisits..
du mener vel at jeg skal lave VisitorIP til et unikt felt. og hvordan gør man det :/ har lige været der inde og kikke på det.. synes ikek jeg kan finde ud a det
Det kode-skelet som jeg beskriver 08/06-2007 20:51:30 vil faktisk sikre at der ikke kommer dubletter i basen.
Morhans' løsnings model vil også virke men der er sjældent god kodestil at lave kode som med vilje generere en fejl i visse situationer (her hvis du indsætter en dublet) og så reagere på denne fejl.
jaah synes nu også det virkede lidt forkert at lave den sådan.. men ja det virker faktis.. men kan du ikke lige give kommentar til dit skelet der. kan nemli ikke helt gennemskue hvordan du gør sådan at der ikke kommer dubletter i dben.. ved det script
sql = "SELECT count(*) AS antal FROM dinIpTabel WHERE ip = '" & ip & "'"
tæller vi hvor mange gange ip'et allerede findes i tabellen. Antallet bliver gemt under navnet "antal" ("AS" definere et såkaldt alias); Hvis antal er 0 så findes ip ikke i basen, hvis den er større end 0 findes den en (eller flere gange).
Hvis antal er 0 så kan vi godt indsætte ip'et:
If antal = 0 Then sql = "INSERT INTO dinIpTabel (ip) VALUES ('" & ip & "')" conn.Execute(sql) Else ... End If
Else-delen er kun med i det tilfælde hvor du kunne tænke dig at gøre noget andet ved et genbesøg fra et givet ip. Du kan helt undvære den hvis du ønsker.
sql = "SELECT count(*) AS antal FROM tblVisits WHERE VisitorIP = '" & ip & "'" If antal = 0 Then sql = "INSERT INTO tblVisits (VisitorIP) VALUES ('" & ip & "')" conn.Execute(sql) Else End If %>
sql = "SELECT count(*) AS antal FROM tblVisits WHERE VisitorIP = '" & ip & "'" If antal = 0 Then sql = "INSERT INTO tblVisits (VisitorIP) VALUES ('" & ip & "')" conn.Execute(sql) End If %>
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.