Avatar billede marie14 Nybegynder
06. august 2004 - 12:14 Der er 42 kommentarer og
3 løsninger

Hits på downloadning

Hej Steiner
Hvordan kan jeg styre at counteren kun tæller f.eks 1 gang i døgnet?
Hvad skal jeg i øvrigt skrive hvis, jeg vil have hits på f.eks downloadning af pdf filer fra mine sider?
Mvh. Marie
Avatar billede marie14 Nybegynder
06. august 2004 - 12:22 #1
Jeg mener steines, sorry...
Avatar billede cyberkox Nybegynder
06. august 2004 - 13:27 #2
Counteren ?
Bruger du Access eller MySQL ?
Avatar billede marie14 Nybegynder
06. august 2004 - 13:28 #3
jeg bruger access
Avatar billede cyberkox Nybegynder
06. august 2004 - 13:31 #4
Òkay, men så kan du jo bare sende brugerne om til en ny side, efter de har hentet filen, som så tæller, med noget ligenende som dette:

rs("hits") = rs("hits") + 1

og så rs.update i databasen.
Avatar billede cyberkox Nybegynder
08. august 2004 - 20:49 #5
Har du fundet ud af noget ?
Avatar billede steines Nybegynder
09. august 2004 - 11:10 #6
Opret en tabel filer med flg. felter id, fil og hits, som hhv. autonummerering, tekst og tal.

Det kan godt være updatedelen skal rettes lidt til, men prøv det engang.

<HTML>
    <HEAD>
        <META HTTP-EQUIV="content-type" CONTENT="text/html;CHARSET=iso-8859-1">
        <TITLE>Download Fil</TITLE>
       
       
    <SCRIPT LANGUAGE="VBScript">
    <!--
   
    Sub hentfil(id, fil)   
        Set ThisForm=Document.formular
        ThisForm.a.Value="download"
        ThisForm.fil.value=fil
        ThisForm.id.Value=id
        ThisForm.Submit
    End Sub   
    !-->
   
    </SCRIPT>
       
    </HEAD>
<BODY>
<%
Function GetInput(i)
    GetInput=""
    if i<>"" then
        GetInput=Request.QueryString(i)
        if GetInput="" or IsNull(GetInput) then GetInput=Request.Form(i)
    end if
End Function

a=Trim(GetInput("a")):            'Response.Write("a=" & a & "<BR>")
if a="" or IsNull(a) Then a="liste"

Select Case LCase(a)
case "download"
    Response.Write("Filnavn: " & Request.Form("fil") & "<br/>")

    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("./filer.mdb")
    strSQL = "UPDATE filer SET hits=hits+1 WHERE id=" + Request.Form("id")
    'set rs = Conn.execute(strSQL)
    'rs.close
    Set rs = nothing
    Conn.Close
    Set Conn = Nothing
   
    Response.Write("<script language=""javascript"">" + vbCR)
    Response.Write("    window.open('./download_dir/" & Request.Form("fil") & "','mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0');" + vbCR)
    Response.Write("</script>" + vbCR)
   
case "liste"

    Set conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("./filer.mdb") & ";UID=;PWD=;"
    conn.Open DSN
    strSQL="SELECT * FROM filer"
    Set rs=Server.CreateObject("ADODB.RecordSet")
    rs.Open strSQL, conn,3,1

    Response.Write("<FORM NAME=""formular"" ACTION=""./dl.asp"" METHOD=""post"">" + vbCR)
    Response.Write("<input type=""hidden"" name=""id"" value=""*"">" + vbCR)
    Response.Write("<input type=""hidden"" name=""fil"" value=""*"">" + vbCR)
    Response.Write("<input type=""hidden"" name=""a"" value=""*"">" + vbCR)
    Response.Write("<TABLE BORDER=""1"">" + vbCR)

    While NOT rs.eof
        Response.Write("<TR>" + vbCR)
        Response.Write("<TD>" + rs("fil") + "</TD>" +  + vbCR)
        Response.Write("<TD><INPUT TYPE=""button"" NAME=""HANDLING"" VALUE=""Hent"" onClick=""java script:hentfil(" & rs("id") & ", '" & rs("fil") & "');""></TD>" + vbCR)
        Response.Write("</TR>" + vbCR)
        rs.movenext
    wend

    Response.Write("</TABLE>" + vbCR)
    Response.Write("</FORM>" + vbCR)
    rs.close
    Set rs = nothing
    Conn.Close
    Set Conn = Nothing
   
end select

%>
</BODY>
</HTML>

/Steines
Avatar billede marie14 Nybegynder
09. august 2004 - 12:51 #7
Hej steines
Jeg har prøvet. Så vidt jeg kan se skal jeg bare skifte fil navne 3 steder: ACTION og 2 steder, hvor databasen er nævnt. Er det ikke rigtigt?
Men jeg bliver ved med, at få denne fejlmelding:
Microsoft OLE DB Provider for ODBC Drivers error '80040e37'

[Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot find the input table or query 'filer'. Make sure it exists and that its name is spelled correctly.

/hit/downloads.asp, line 59
Mvh. Marie
Avatar billede steines Nybegynder
09. august 2004 - 12:55 #8
Du skal oprette en tabel der hedder filer som jeg skrev i mit indlæg ;o) Desuden har jeg kaldt min database for filer.mdb. Hvis du har oprettet tabellen i en allerede eksisterende base, skal du angive basens navn i linien:

Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("./filer.mdb")

og linien

DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("./filer.mdb") & ";UID=;PWD=;"
 
/Steines
Avatar billede marie14 Nybegynder
09. august 2004 - 14:12 #9
Det har jeg gjort. Siden ser også rigtig ud (blank), men der kommer ingen oplysninger ind i databasen. Det script du har givet mig skal vel ligge på en side der hedder dl.asp, ikke?
Mvh. Marie
Avatar billede steines Nybegynder
09. august 2004 - 14:14 #10
Jo du kan gemme min kode som dl.asp. Desuden skal du jo så have nogle filer i din database for at få vist filnavne og knapper.

/Steines
Avatar billede marie14 Nybegynder
09. august 2004 - 14:45 #11
Puhaa, den er svær her i sommer varmen. Jeg kan godt se fidusen, men når jeg klikker på hent klan den ikke finde siden og den henter ikke oplysningen ind i databasen. Det er sikkert mig, der giver den et forkert navn. Kan vi få det sidste på¨plads i morgen? Jeg er nemlig nød til, at gå nu.
Mvh. Marie
Avatar billede steines Nybegynder
09. august 2004 - 14:48 #12
Kig på denne linie. './download_dir/" er bare et directory jeg har opfundet. Der skal selvfølgelig stå det directorynavn hvor du har dine filer liggende i.

Response.Write("    window.open('./download_dir/" & Request.Form("fil") & "','mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0');" + vbCR)

/Steines
Avatar billede marie14 Nybegynder
10. august 2004 - 09:36 #13
Hej steines
Jeg kan stadig ikke få det til, at virke. Browser vinduet kan ikke finde siden. Det er sikkert mig der giver den en forkert stivej, men lad os nu sige, at man skal hente pdf filen fra en mappe der hedder downloads og en undermappe der hedder pdf, hvordan angiver jeg den stivej?
Mvh. Marie
Avatar billede steines Nybegynder
10. august 2004 - 09:39 #14
Så ville de se ud som flg.

Response.Write("    window.open('./downloads/pdf/" & Request.Form("fil") & "','mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0');" + vbCR)

/Steines
Avatar billede marie14 Nybegynder
10. august 2004 - 09:44 #15
Det passer med det jeg har skrevet, men det virker ikke.
Mvh. Marie
Avatar billede steines Nybegynder
10. august 2004 - 09:51 #16
Følgende virker fint hos mig med pdf-filer:

Response.Write("<script language=""javascript"">" + vbCR)
Response.Write("    window.open('./downloads/pdf/" & Request.Form("fil") & "','mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0');" + vbCR)
Response.Write("</script>" + vbCR)

Er du sikker på du ikke har brugt store bogstaver i dine fil felter i basen?

Hvordan ser din database ud?

/Steines
Avatar billede marie14 Nybegynder
10. august 2004 - 10:49 #17
Jeg tror ikke der er noget galt med databasen. dl.asp lå i en mappe sammen med fil.mdb. Det har virket, så nu får jeg pdf filen frem, men den tæller ikke hits. Den åbner bare pdf filen hvor efter man kan gemme en kopi.
Mvh. Marie
Avatar billede steines Nybegynder
10. august 2004 - 10:59 #18
Jammen så viser den jo også siden nu. Så er det bare den del der skal opdaterer tælleren der er problemer med nu??

/Steines
Avatar billede marie14 Nybegynder
10. august 2004 - 11:02 #19
Nemlig. Jeg glemte lige, at nævne: jeg flyttede dl.asp uden for mappen før den virkede, men jeg kan jo ikke flytte databsen med, den skal ligge i mappen med skriverettigheder.
Mvh. Marie
Avatar billede steines Nybegynder
10. august 2004 - 11:44 #20
Du skal så rette disse 2 linier til så de passer til din biblioteksstruktur.

Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("./filer.mdb")

og linien

DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("./filer.mdb") & ";UID=;PWD=;"

Hvis din database ligger i et niveau over skriver du ex. ../filer.mdb 

/Steines
Avatar billede marie14 Nybegynder
10. august 2004 - 11:58 #21
Det har jeg gjort, siden viser jo også teksten i tabelen, så forbindelsen må jo være der...
Mvh. Marie
Avatar billede steines Nybegynder
10. august 2004 - 12:07 #22
Så skal vi bare have filernes placering på plads

dl.asp ligger i /downloads
*.pdf ligger i /downloads/pdf

er det rigtigt?

/Steines
Avatar billede marie14 Nybegynder
10. august 2004 - 12:19 #23
Ja, den viser også pdf filen når man klikker på hent, men counteren tæller ikke.
Mvh. Marie
Avatar billede marie14 Nybegynder
10. august 2004 - 12:46 #24
Jeg forsætter i morgen.
Vi ses (håber jeg):-)
Mvh. Marie
Avatar billede marie14 Nybegynder
11. august 2004 - 08:35 #25
Hej igen, steines
har du nogen anelse om hvad der kan være galt?
Mvh. Marie
Avatar billede steines Nybegynder
11. august 2004 - 08:46 #26
Ret disse to linier
'set rs = Conn.execute(strSQL)
'rs.close

til

set rs = Conn.execute(strSQL)
rs.close

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 09:03 #27
Den kommer med denne meddelelse:

ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.

/dl.asp, line 43
Avatar billede steines Nybegynder
11. august 2004 - 09:04 #28
ret
rs.close

til
'rs.close

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 09:09 #29
Bingo!! Nu virker den.
:-)
Avatar billede steines Nybegynder
11. august 2004 - 09:10 #30
Sådan ;o)

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 09:24 #31
Jeg er imponeret! Nu må du ikke rive håret ud af hovedet (pointene er dine), men er der en nemmere måde, at gøre det på, når jeg har eksisterende sider i forvejen med link til alle pdf filer ?
Avatar billede steines Nybegynder
11. august 2004 - 09:26 #32
Det kan da godt være. Nu Har jeg jo ingen idé om hvor mange links/filer du har.
Prøv at poste koden på den side her så skal jeg kigge på det.

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 09:27 #33
Du mener koden til siderne med pdf-filer?
Avatar billede steines Nybegynder
11. august 2004 - 09:28 #34
Jep. Den kode hvor alle dine link er
Avatar billede marie14 Nybegynder
11. august 2004 - 09:35 #35
Er et eksempel nok?
Jeg er ikke glad for at opgive alle fil navne med videre..
Avatar billede steines Nybegynder
11. august 2004 - 09:36 #36
Hvor mange filer drejer det sig om?
Avatar billede marie14 Nybegynder
11. august 2004 - 09:44 #37
Pdf.filer? Ca. 200
Avatar billede steines Nybegynder
11. august 2004 - 10:20 #38
Jeg kan lave en fil til dig du skal køre en gang, og som så ligger alle filnavnene ind i basen. Ville det være ok?

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 10:21 #39
Det ville jo bare være lækkert :-)
Avatar billede steines Nybegynder
11. august 2004 - 11:45 #40
har rettet i scriptet dl.asp, så nu henter viser den alle filerne i dit pdf-dir, og automatisk tilføjer dem i basen hvis det er nødvendigt, og elelr bliver hits = hits + 1.

<HTML>
    <HEAD>
        <META HTTP-EQUIV="content-type" CONTENT="text/html;CHARSET=iso-8859-1">
        <TITLE>Download Fil</TITLE>
       
       
    <SCRIPT LANGUAGE="VBScript">
    <!--
   
    Sub hentfil(fil)   
        Set ThisForm=Document.formular
        ThisForm.a.Value="download"
        ThisForm.fil.value=fil
        ThisForm.Submit
    End Sub   
    !-->
   
    </SCRIPT>
       
    </HEAD>

<%
Function GetInput(i)
    GetInput=""
    if i<>"" then
        GetInput=Request.QueryString(i)
        if GetInput="" or IsNull(GetInput) then GetInput=Request.Form(i)
    end if
End Function

a=Trim(GetInput("a")):            'Response.Write("a=" & a & "<BR>")
if a="" or IsNull(a) Then a="liste"

Select Case LCase(a)
case "download"

    Set Conn = Server.CreateObject("ADODB.Connection")
    'Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("./filer.mdb")

    Conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="&Server.MapPath("./filer.mdb") & ";Password=;"

    strSQL = "SELECT * FROM filer WHERE fil='" + Request.Form("fil") + "'"
   
    maxcount = 0
    set rs = Conn.execute(strSQL)
    while not rs.eof
        maxcount = maxcount + 1
        rs.movenext
    wend
    if (maxcount = 1) Then
        strSQL = "UPDATE filer SET hits=hits+1 WHERE fil='" & Request.Form("fil") & "'"
        set rs = Conn.execute(strSQL)
    elseif (maxcount = 0) Then
        strSQL = "INSERT INTO filer (fil, hits) VALUES ('" & Request.Form("fil") & "',1)"
        set rs = Conn.execute(strSQL)
    end if


    Set rs = nothing
    Conn.Close
    Set Conn = Nothing
   
    Response.Write("<script language=""javascript"">" + vbCR)
    Response.Write("    window.open('./downloads/pdf/" & Request.Form("fil") & "','mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0');" + vbCR)
    Response.Write("</script>" + vbCR)

    %>
    <script language="Javascript">
        window.location.reload('./dl.asp');
    </script>
    <%

   
case "liste"

    Dim objFileScripting, objFolder
        Dim filename, filecollection, strDirectoryPath, strUrlPath
        strDirectoryPath="c:\inetpub\scripts\"
        strUrlPath="\scripts\"

    Response.Write("<FORM NAME=""formular"" ACTION=""./dl.asp"" METHOD=""post"">" + vbCR)
    Response.Write("<input type=""hidden"" name=""id"" value=""*"">" + vbCR)
    Response.Write("<input type=""hidden"" name=""fil"" value=""*"">" + vbCR)
    Response.Write("<input type=""hidden"" name=""a"" value=""*"">" + vbCR)
    Response.Write("<TABLE BORDER=""1"">" + vbCR)

        Set objFileScripting = CreateObject("Scripting.FileSystemObject")
        Set objFolder = objFileScripting.GetFolder(Request.ServerVariables("APPL_PHYSICAL_PATH") & "\downloads\pdf\")
        Set filecollection = objFolder.Files
       
        For Each filename In filecollection
            Filename=right(Filename,len(Filename)-InStrRev(Filename, "\"))
        Response.Write("<TR>" + vbCR)
        Response.Write("<TD>" + filename + "</TD>" +  + vbCR)
        Response.Write("<TD><INPUT TYPE=""button"" NAME=""HANDLING"" VALUE=""Hent"" onClick=""java script:hentfil('" & filename & "');""></TD>" + vbCR)
        Response.Write("</TR>" + vbCR)

        Next


   
   

    Response.Write("</TABLE>" + vbCR)
    Response.Write("</FORM>" + vbCR)
   
end select

%>

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 12:27 #41
Du er da bare for god!! :-)
Det virker super perfekt!!
Avatar billede steines Nybegynder
11. august 2004 - 12:29 #42
He he... det var jo også meningen ;o)

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 12:35 #43
Må jeg spørge dig om en sidste ting?
Vi snakkede om hvordan man undgår at folks hit kommer med mange gange lige efter hinanden. Jeg kunne f.eks tænke mig, at der skulle gå en time. 1 gang i døgnet er for lidt. Hvad skriver jeg der?
Hvordan får jeg i øvrigt fat i dig, hvis jeg har brug for dig en anden gang?
Mvh. Marie
Avatar billede steines Nybegynder
11. august 2004 - 12:40 #44
Man må ikke oplyse emailadresser i denne kategori, men jeg har skrevet i din tidligere opgave.

/Steines
Avatar billede marie14 Nybegynder
11. august 2004 - 12:44 #45
Ok, skal jeg sende dig spørgsmålet om kun et hit pr. bruger pr. time eller vil du hellere svare her?
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