Avatar billede fun22 Nybegynder
14. september 2002 - 12:44 Der er 38 kommentarer og
1 løsning

Handling når scriptet bliver kørt?

Jeg har en database som jeg bruger som tæller. Så vil jeg gerne have et script der hver gang siden bliver læst kan lægge en til i databasen. Det skal gerne være med cookie.  Eks.

Jeg har en batabase med en tabel som hedder besøg, i den er der en kolonne som hedder antal. Der står eks. 5 og så kommer der en ind på siden og så skal den gerne lave det om til 6.

Hvordan gør man det?
Avatar billede jnissen Nybegynder
14. september 2002 - 12:48 #1
Du kan fx gøre sådan:

<%
Dim objRS, strConn, Antal
If (Session("Antal") = "") Then   
strConn ="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open "SELECT * FROM besøg", strConn, adOpenDynamic, adLockOptimistic, adCmdText
        objRS("Antal") = objRS("Antal") + 1
        objRS.Update
        Session("Antal") = objRS("Antal")
        objRS.Close
        Set objRS = Nothing
End If
%>
Avatar billede thesurfer Nybegynder
14. september 2002 - 12:52 #2
jnissen> hvad sker der så hvis Session("Antal") <> "" ?
Avatar billede jnissen Nybegynder
14. september 2002 - 12:52 #3
Ups, en lille fejl.

Sådan:
<!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" -->
<%
Dim objRS, strConn, Antal
If (Session("Antal") = "") Then   
strConn ="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open "SELECT * FROM besøg", strConn, adOpenDynamic, adLockOptimistic, adCmdText
        objRS("Antal") = objRS("Antal") + 1
        objRS.Update
        Session("Antal") = objRS("Antal")
        objRS.Close
        Set objRS = Nothing
End If
%>
Avatar billede jnissen Nybegynder
14. september 2002 - 12:53 #4
Så bliver der jo lagt én til i databasen, eller hvad mener du?
Avatar billede thesurfer Nybegynder
14. september 2002 - 12:54 #5
den skal ved udføre koden lige meget hvad..:

strConn ="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open "SELECT * FROM besøg", strConn, adOpenDynamic, adLockOptimistic, adCmdText
      objRS("Antal") = objRS("Antal") + 1
      objRS.Update
      Session("Antal") = objRS("Antal")
      objRS.Close
      Set objRS = Nothing


---

hvad er det for noget???:

<!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" -->
Avatar billede thesurfer Nybegynder
14. september 2002 - 12:55 #6
..og det her må da helt forkert:

FILE="C:\Program Files\Common Files\System\ado\msado15.dll"
Avatar billede thesurfer Nybegynder
14. september 2002 - 12:57 #7
Pseudo kode:

hvis der ikke står noget i Antal (i databasen):

antal = 1
opdatere session

ellers

antal = antal + 1
opdatere session
Avatar billede jnissen Nybegynder
14. september 2002 - 12:57 #8
Tjaa...jeg ved ikke om det er forkert. Men det virker da hos mig - det er måske fordi jeg bruger det på en anden måde, sammen med noget mere......
Avatar billede thesurfer Nybegynder
14. september 2002 - 12:58 #9
man må (normalt) ikke "linke" / "henvise" til filer der ligger *lokalt* på computeren.. med mindre serveren, man skal have hjemmesiden på, har samme struktur / mappe + filer..
Avatar billede jnissen Nybegynder
14. september 2002 - 13:03 #10
Grunden til jeg gør det, er fordi jeg har min egen server, og der ligger filen i den mappe.

Men hvordan ville du gøre det så?
Avatar billede fun22 Nybegynder
14. september 2002 - 13:34 #11
thesurfer=> Når jeg bruger dit forslag kommer den med denne fejl:
ADODB.Recordset error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/forsiden.asp, line 4

Hvad betyder det? og havd kan jeg gøre ved det?
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:35 #12
mit forslag? hvad for et forslag er det?

jeg gentog bare det jnissen havde skrevet..
Avatar billede fun22 Nybegynder
14. september 2002 - 13:37 #13
ok, men hved du hvad fejlen kan være?
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:37 #14
Pseudo kode:

1) opret forbindelse til database
2) check om der er noget i Antal
2a) hvis der er noget i Antal, antal = antal + 1
2b) hvis der IKKE er noget i Antal, antal = 1
3) opdatere session, session = antal
4) luk forbindelsen til databasen
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:39 #15
du vil bruge sessions for at undgå at oprette forbindelse til db hele tiden, eller hvad ?
Avatar billede fun22 Nybegynder
14. september 2002 - 13:40 #16
Og hvad betyder det du lige har skrevet?
Avatar billede fun22 Nybegynder
14. september 2002 - 13:41 #17
det skal bruges til en tæller til min hjemmeside. Så skal det jo være sådan at når en bruger kommer ind så tæller den 1 op i databasen.
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:43 #18
her er en ide..

på forsiden (index.asp):

1) opret forbindelse til database
2) check om der er noget i Antal
2a) hvis der er noget i Antal, antal = antal + 1
2b) hvis der IKKE er noget i Antal, antal = 1
3) opdatere session, session = antal
4) luk forbindelsen til databasen

5) send brugere videre til index2.asp..



bruger du frames?
Avatar billede jnissen Nybegynder
14. september 2002 - 13:44 #19
Fjelen får du nok fordi du ikke bruger denne hva:?
<!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" --> eller fordi den ligger i en anden sti.
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:45 #20
jnissen> hvad bruger du det her til ?:


<!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" -->

hvad er det for et program du bruger ? en af de der Click-and-point / frontpage-style ?
Avatar billede fun22 Nybegynder
14. september 2002 - 13:47 #21
Kan i ikke stykke noget kode sammen som kan tælle det op? Den ide som thesurfer kom med kolokken 13:43:48 kan godt bruges. Så hvis i ville lave en kode som kan det, så ville det være fedt.
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:47 #22
bruger du frames, eller kun 1 side ?
Avatar billede fun22 Nybegynder
14. september 2002 - 13:49 #23
kun en side
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:51 #24
1 side.. fint..

skal tælleren aflæses på alle siderne ? altså når brugeren klikker på et link og der så komme en ny side..

eller har du en side for sig selv der viser antal besøgende?
Avatar billede fun22 Nybegynder
14. september 2002 - 13:51 #25
aflæses på alle siderne
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:53 #26
..et svar, da jeg måske lige pludselig forsvinder..

husk: du skal IKKE give points, med mindre at du HAR fået løsningen..
Avatar billede fun22 Nybegynder
14. september 2002 - 13:56 #27
ja, bare rolig
Avatar billede thesurfer Nybegynder
14. september 2002 - 13:59 #28
:)

er gået i gang med programmeringen..
Avatar billede thesurfer Nybegynder
14. september 2002 - 14:13 #29
så er det lavet... jeg smækker lige nogle kommentarer på det, så du kan se hvad det er der sker..
Avatar billede thesurfer Nybegynder
14. september 2002 - 14:28 #30
index.asp (den første side):


<%
' tving programmøren til at definire variabler for at undgå fejl:
Option Explicit

' hele siden SKAL generes før den vises:
Response.Buffer = True

' her definere vi de variabler vi skal bruge:
dim rs, conn, strSql, tmp

' Det typiske "opret forbindelse til database"-kode:
set rs = Server.CreateObject("ADODB.RecordSet")
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("visitors.mdb")

' opretter strenge med kommando om hvad vi vil hente af informationer:
strSQL = "select * from tblVisitors where id = 1"

' opret for bindelse med strengen (strSQL), og DNS:
rs.open strSQL, conn

' smid indholdet af kolonnen "visits" og i tmp (temporary / midlertidigt) variable:
tmp = rs("visits")

' hvis der står noget i "tmp" / "visits":
if tmp <> "" then
    ' læg 1 til det der allerede står:
    tmp = tmp + 1
' ELLERS.. hvis der ikke står noget i "tmp" / "visits"
else
    ' set "tmp" / "visits" til 1, da det er den første gang siden vises
    tmp = 1
' afslut if-sætning
end if

' opret "opdatering"-strengen.. opdatere tabellen "tblVisitors",
' feltet "visits" sættes til den værdi der står i "tmp",
' hvor id = 1:
strSQL = "Update tblVisitors Set visits = '" & tmp & "' Where id = 1"

' execute / udfør kommandoen:
Conn.Execute(strSQL)

' opdatere Session("Antal") som skal aflæses på alle de andre sider:
Session("Antal") = tmp

' lukke forbindelserne til databasen, for at spare ressourcerne:
rs.close
conn.Close

' frigør rs og conn
Set rs = Nothing
Set conn = Nothing

'send brugeren videre til næste side (gøres kun på start siden):
response.redirect "index2.asp"
%>





index2.asp:

<br><br>
Antal besøgende:
<%= session("Antal")%>

<%
' Du skal så bare indsætte: session("Antal")
' på ALLE sider der antal besøgende.. altså
' der hvor det skal vises
%>
Avatar billede thesurfer Nybegynder
14. september 2002 - 14:32 #31
det du skal bruge er:

1) "index.asp"
2) "index2.asp"
3) "visitors.mdb"


filen "index.asp" indeholder koden til at opdatere "visitors.mdb" som så aflæses af "index2.asp" og alle de andre sider via koden <%= session("Antal")%>.


"visitors.mdb" ser sådan her ud:
tabellen hedder: "tblVisitors"
feltet hedder: "visits"
feltet er af typen: "tal"
Avatar billede thesurfer Nybegynder
14. september 2002 - 14:35 #32
det er testet, og det virker.

men prøv det selv.

placer database filen sammen med asp filerne, eller ændre den sidste de i linien:
conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("visitors.mdb")

("visitors.mdb") <--


du har nok allerede selv en index.asp. Den omdøber du til index2.asp.
opret derefter en "index.asp" og indsæt koden til index.asp i den.

det skulle være det.
Avatar billede friiser Nybegynder
14. september 2002 - 14:38 #33
lytter med..

~friiser~ http://www.radio-online.dk
Avatar billede thesurfer Nybegynder
14. september 2002 - 14:42 #34
friiser> se lige regel nr 2.1.6:

[Det er ikke tilladt at]:

"gøre reklame for andre sider, med mindre det foregår som relevant svar i et spørgsmål."


Din signatur er brud på denne regel. Lad venligst være med at bruge den signatur.

/theSurfer.
Avatar billede fun22 Nybegynder
14. september 2002 - 15:42 #35
Jeg får følgende fejl:

ADODB.Field error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

linie 23
Avatar billede thesurfer Nybegynder
14. september 2002 - 15:44 #36
har du husket at oprette 1 felt?
Avatar billede thesurfer Nybegynder
14. september 2002 - 15:45 #37
den skulle gerne have id'en: 1
Avatar billede fun22 Nybegynder
14. september 2002 - 15:52 #38
Så virker det... Jeg takker
Avatar billede thesurfer Nybegynder
14. september 2002 - 16:04 #39
husk at være helt sikker på at det virker, før du giver points :)

/theSurfer.
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