Avatar billede oleodder Nybegynder
11. februar 2003 - 00:31 Der er 22 kommentarer

Min tæller skal kun tælle én gang om dagen !!

Hej alle

Jeg har mit tæller system som automatisk tæller op i MDB-databasen når der er hits, men hvordan tilføjer jeg således, at det kun er muligt at stemme én gang om dagen og ikke bare kunne refreshe siden, og på den måde få mange hits ????

Tæller siden ser således ud:

<html><head><title>Counter</title>
<%
Dim hitpage
hitpage = "page1"
%>
<!--#include file="pagestat.inc" -->
osv..........

Og include filen ser således ud:

<%
set hit_Conn = Server.CreateObject("ADODB.Connection")
hit_Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("pagestat.mdb")

set hit_rs = Server.CreateObject("ADODB.Recordset")
hit_rs.Open "SELECT * FROM pagehits WHERE myPage = '" & hitpage & "'", hit_Conn, 1, 3

hit_rs.MoveFirst

    hit_rs("Hits") = hit_rs("Hits") + 1
hit_rs.Update

hit_rs.Close
set hit_rs = nothing

hit_Conn.Close
set hit_Conn = nothing
%>

Er der nogen der kan hjælpe ???

Mange Tak
Avatar billede kbonline Nybegynder
11. februar 2003 - 00:36 #1
lav en session og sæt session timeout til 1 dag.

Lav derefter en test om session("counter") <> 0 then osv
Avatar billede oleodder Nybegynder
11. februar 2003 - 00:41 #2
Super med et hurtigt svar...
Tak - Men øh.... Session/Timeout ??

Hvordan og hvorledes !! - Kan du hjælpe lidt mere ??  ;-)

Tak
Avatar billede kbonline Nybegynder
11. februar 2003 - 00:47 #3
Session.Timeout = xxx

sæt xxx til den tid du ønsker at din session skal være på
normalt er den sat til kort tid (jeg mener det er 1 time) for ikke at belaste din server unødigt
Avatar billede kbonline Nybegynder
11. februar 2003 - 00:49 #4
fx er Session.Timeout = 120


= 120 minutter
Avatar billede oleodder Nybegynder
11. februar 2003 - 00:51 #5
Super - Det forstår jeg. Godt.

MEN - Jeg ved altså ikke hvordan jeg sætter sådan en session ind og hvor ??
Kan du ud fra mine to ovenstående filer hjælpe lidt mere præcist ??

TAK
Avatar billede kbonline Nybegynder
11. februar 2003 - 01:00 #6
Ikke tested, men mon ikke det burde virke



<%


if session("counted") <> 1 then
   

set hit_Conn = Server.CreateObject("ADODB.Connection")
hit_Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("pagestat.mdb")

set hit_rs = Server.CreateObject("ADODB.Recordset")
hit_rs.Open "SELECT * FROM pagehits WHERE myPage = '" & hitpage & "'", hit_Conn, 1, 3

hit_rs.MoveFirst

    hit_rs("Hits") = hit_rs("Hits") + 1
hit_rs.Update

hit_rs.Close
set hit_rs = nothing

hit_Conn.Close
set hit_Conn = nothing
session("counted") = 1

else
   
end if
%>
Avatar billede kbonline Nybegynder
11. februar 2003 - 01:01 #7
ups glemte lige timeout :-)



Ikke tested, men mon ikke det burde virke



<%


if session("counted") <> 1 then
   

set hit_Conn = Server.CreateObject("ADODB.Connection")
hit_Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("pagestat.mdb")

set hit_rs = Server.CreateObject("ADODB.Recordset")
hit_rs.Open "SELECT * FROM pagehits WHERE myPage = '" & hitpage & "'", hit_Conn, 1, 3

hit_rs.MoveFirst

    hit_rs("Hits") = hit_rs("Hits") + 1
hit_rs.Update

hit_rs.Close
set hit_rs = nothing

hit_Conn.Close
set hit_Conn = nothing
session("counted") = 1
session.timeout = 1000

else
   
end if
%>
Avatar billede oleodder Nybegynder
11. februar 2003 - 01:02 #8
Super - Jeg prøver lige.......

Hvornår går du i seng ??

;-)  TAK
Avatar billede kbonline Nybegynder
11. februar 2003 - 01:07 #9
NU

men der er sikkert andre der kan fortsætte herfra, hvis der er problemer

g*nat
Avatar billede oleodder Nybegynder
11. februar 2003 - 01:46 #10
Halløj - Det virkede fint, MEN !!
Jeg har 5 forskellige sider, jeg gerne vil tælle på seperat, for at se hvormange der går ind på de forskellige sider. Og derefter vise dette på en samlet oversigt....
Dette gør jeg ved at indsætte:
<%
Dim hitpage
hitpage = "page1"
%>
<!--#include file="pagestat.inc" -->
osv..........

På hver side - page1, page2 osv...

Nu, hvor jeg har ændret inc filen, accepterer den jo kun en tælling i alt !!!!

Kan man på nogen måde flytte session/counter funktionaliteten væk fra inc filen, således at det bliver styret fra "tæller" filen ???

Håber mit spørgsmål kan forståes !!!!

Tak
Avatar billede robinhood Nybegynder
11. februar 2003 - 08:59 #11
Var det ikke bedre at sætte en cookie med en levetid på 24 timer? Hvis cookien er der tælles der ikke og hvis den ikke er der tælles der.
Avatar billede midas_dk Nybegynder
11. februar 2003 - 09:12 #12
arrCurrentUrl = Split(Request.ServerVariables("PATH_INFO"),"/")
strCurrentUrl = arrCurrentUrl(UBound(arrCurrentUrl))

- så har du filnavnet på den aktuelle fil. Dvs. du kan lave:

Select Case strCurrentUrl
  Case "default1.asp"
    hitpage = "page!"
  ...
End Select

- inde i din include...

Og jeg vil i øvrigt give robinhood ret - cookies er en langt bedre løsning!
Avatar billede oleodder Nybegynder
11. februar 2003 - 09:48 #13
Kanon Midas....Gider du ikke lige helt præcist fortælle hvor jeg skal skrive det ?? Det kan jeg altså ikke lige selv.....
Det lyder da også til at være den perfekte løsning - Fedt

Tak
Avatar billede eagleeye Praktikant
11. februar 2003 - 13:32 #14
Hvis du bruger Session cookies kan man stemme så mange gange man vil i løbet af en dag, hvis man giver lukke sin browser og åbne siden igen.

Umiddelbart ville jeg bruge en cookie som indeholdte dato for sidste stemme eller som robinhood skriver give cookien en levetid på 24 timer, dog hvios man så stemmer klokken 22.00 en aften kan man ikke stemme kolokken 17.00 næste dag da der ikke er gået 24 timer.

Cookie kan naturligvis også slettes fra ens maskine og dermed kan man også lave X antal stemmer pr dag.

I det hele taget kan man bare i sin browser slå cookie og sessions fra i sin browser og dermed reloade siden X antal gange...
Avatar billede oleodder Nybegynder
11. februar 2003 - 17:19 #15
Super Duper - Midas ? - Du gider ikke lige give et bud på, hvordan man sætter cookier ind i min inc.fil, vel ??
;-)
Tak
Avatar billede midas_dk Nybegynder
11. februar 2003 - 22:55 #16
<%
If Request.Cookies("blockcounter") <> "sdfljhsdlfkjhsdlfj" Then 'cookien er udløbet - tæl op!

arrCurrentUrl = Split(Request.ServerVariables("PATH_INFO"),"/")
strCurrentUrl = arrCurrentUrl(UBound(arrCurrentUrl))

Select Case strCurrentUrl
  Case "default1.asp"
    hitpage = "page1"
  Case "jens.asp"
    hitpage = "page2"
End Select

set hit_Conn = Server.CreateObject("ADODB.Connection")
hit_Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("pagestat.mdb")

set hit_rs = Server.CreateObject("ADODB.Recordset")
hit_rs.Open "SELECT * FROM pagehits WHERE myPage = '" & hitpage & "'", hit_Conn, 1, 3

hit_rs.MoveFirst

    hit_rs("Hits") = hit_rs("Hits") + 1
hit_rs.Update

hit_rs.Close
set hit_rs = nothing

hit_Conn.Close
set hit_Conn = nothing

' sæt en ny cookie - og sæt det til at udløbe om 24 timer
Response.Cookies("blockcounter") = "sdfljhsdlfkjhsdlfj"
Response.Expires("d",1,Now)

Else
  Response.Write "Du har allerede stemt! Glem det, fister!"
End If
%>
Avatar billede oleodder Nybegynder
12. februar 2003 - 02:42 #17
Godaften Midas

Tusind tak for dit svar, det var perfekt...Næsten.

Nu har jeg siddet og bakset med det et par timer og jeg kan altså ikke lige få det til at funke, skal jeg angive nogle data i linien:

arrCurrentUrl = Split(Request.ServerVariables("PATH_INFO"),"/")

Eller er der andre steder jeg skal tilpasse (udover selvfølgelig stien til MDB databasen....)  ???

Håber du har tid til den afsluttende hjælp.......

Tak
Avatar billede midas_dk Nybegynder
12. februar 2003 - 11:55 #18
Nej, linjen er god nok... Hvad kommer der af fejl?
Avatar billede oleodder Nybegynder
10. marts 2003 - 23:05 #19
Hej Alle
...lige tilbage efter lidt sneskubning ;-)

Fejl ?? - Siden er bare blank ????
Jeg er virkelig lost !!

Any ideas ??  Tak.
Avatar billede eagleeye Praktikant
10. marts 2003 - 23:07 #20
Prøv at vise koden som den er nu.
Avatar billede oleodder Nybegynder
11. juni 2003 - 15:12 #21
Nu har jeg rodet med dette i de sidste par dage, uden egentlig at komme videre.

Jeg gentager lige hvad det er jeg ønsker at komme frem til:

En tæller der tæller hver gang mine undersider bliver besøgt, således at jeg kan lave en hitliste og se hvilke sider der er de mest populære.
Der skal dog noget cookie på, således, at det ikke er muligt at snyde med tælleren.

Her er foreløbig status:

Include filen ser således ud:

<% Response.Buffer = True

If Request.Cookies("blockcounter") <> "sdfljhsdlfkjhsdlfj" Then 'cookien er udløbet - tæl op!

arrCurrentUrl = Split(Request.ServerVariables("PATH_INFO"),"/")
strCurrentUrl = arrCurrentUrl(UBound(arrCurrentUrl))

Select Case strCurrentUrl
  Case "page1.asp"
    hitpage = "page1"
  Case "page2.asp"
    hitpage = "page2"
Case "page2.asp"
    hitpage = "page2"
End Select

set hit_Conn = Server.CreateObject("ADODB.Connection")
hit_Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\user\inetpub\wwwroot\demdem\fpdb\demo-pagestat.mdb;UID=;PWD="

set hit_rs = Server.CreateObject("ADODB.Recordset")
hit_rs.Open "SELECT * FROM pagehits WHERE myPage = '" & hitpage & "'", hit_Conn, 1, 3


hit_rs.MoveFirst

    hit_rs("Hits") = hit_rs("Hits") + 1
hit_rs.Update

hit_rs.Close
set hit_rs = nothing

hit_Conn.Close
set hit_Conn = nothing

' sæt en ny cookie - og sæt det til at udløbe om 24 timer
Response.Cookies("blockcounter") = "sdfljhsdlfkjhsdlfj"
Reponse.ExpiresAbsolute DateDiff("d",1,Now)

Else
  Response.Write "Du har allerede stemt! Glem det, fister! - Dette skal selvfølgelig ikke stå der, men bruges som kontrol"
End If
%>


Det, som er det vigtigste, det er - at der kun skal tælles en gang på HVER SIDE, og ikke stoppe tælleren, bare fordi man har været inde på en enkelt side.

Eagleeye - Kan du gennemskue det ??

På forhånd tak for hjælpen.
Avatar billede eagleeye Praktikant
28. december 2003 - 23:14 #22
Nu ved jeg ikke om dette er afsluttet, men hvis du vil havde en kontrol for hver side skal du lave en cookie til hver side og ikke bare en fælles cookie som koden har lige nu.
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