Avatar billede bobbedude Nybegynder
06. juni 2002 - 10:44 Der er 38 kommentarer og
1 løsning

Cookie - Hjælp mig lige

Hvordan får jeg dette sat sammen så man kun kan give point en gang ?

If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = ID
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & ID
End If





if point > 0 then
    strsql = "update hotnot set points = points + " & point & " where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set hits = hits + 1 where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set gens = points/hits where id = " & oldid
    connect.execute(strsql)
end if
Avatar billede tmceu Praktikant
06. juni 2002 - 10:45 #1
Måske sådan:

if point > 0 then
    strsql = "update hotnot set points = points + " & point & " where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set hits = hits + 1 where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set gens = points/hits where id = " & oldid
    connect.execute(strsql)

If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = ID
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & ID
End If

end if
Avatar billede tmceu Praktikant
06. juni 2002 - 10:45 #2
Hvor kommer værdien af point fra ?
Avatar billede bobbedude Nybegynder
06. juni 2002 - 10:49 #3
fra en form
Avatar billede bobbedude Nybegynder
06. juni 2002 - 10:50 #4
If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = oldid
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & oldid
End If

Sådan her fanger cookien alle oldid men hvordan checker jeg om id eksister hvis en bruger prøver at stemme 2 gange ?
Avatar billede bobbedude Nybegynder
06. juni 2002 - 10:51 #5
checker jeg om id eksister
skulle være
checker jeg om oldid eksister
Avatar billede tmceu Praktikant
06. juni 2002 - 11:04 #6
Om ID eksisterer hvor - i cookien eller databasen ?
Avatar billede bobbedude Nybegynder
06. juni 2002 - 11:05 #7
i cookien
Avatar billede tmceu Praktikant
06. juni 2002 - 11:13 #8
Da du har alle ID i en kommasepareret streng, kan du eks. anvende Split funktionen:

myArr = Split(request.cookie("hotvote")("ID"), ",")

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = ID Then......
Next
Avatar billede bobbedude Nybegynder
06. juni 2002 - 11:21 #9
jeg har lige prøvet dette men jeg er vist en kage mand til det her:

myArr = Split(request.cookie("hotvote")("ID"), ",")

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = oldid Then
response.write "du har stemt"
else
response.write "du har ikk stemt"
end if
next



giver fejlen:

Object doesn't support this property or method: 'Request.cookie'
Avatar billede tmceu Praktikant
06. juni 2002 - 11:23 #10
Der mangler et "s"

myArr = Split(request.cookies("hotvote")("ID"), ",")
Avatar billede bobbedude Nybegynder
06. juni 2002 - 11:27 #11
æv det virker ikke, den bliver ved med at sige at jeg ikke har stemt
Avatar billede tmceu Praktikant
06. juni 2002 - 11:29 #12
Prøv at smide disse linier i toppen af din kode:

Response.Write "Cookie: " & Request.Cookies("hotvote")("ID")
Response.End

Og fortæl mig så hvad den skriver...
Avatar billede bobbedude Nybegynder
06. juni 2002 - 11:30 #13
Avatar billede tmceu Praktikant
06. juni 2002 - 11:41 #14
Det er jo alt sammen fint, men jeg kan ikke se indholdet af cookien som ASP ser den herfra. Du har ikke indsat de linier jeg bad om ?

Når jeg prøver at stemme, får jeg nu:

du har ikke stemt
du har stemt

Så du må have nogle gamle koderester et sted?
Avatar billede bobbedude Nybegynder
06. juni 2002 - 11:48 #15
sådan nu har jeg sat det ind
Avatar billede tmceu Praktikant
06. juni 2002 - 11:54 #16
OK. Indholdet af min cookie er nu: 0,3,3,3,0,0

Hvis ID er 3, vil jeg med denne kode:

myArr = Split(request.cookies("hotvote")("ID"), ",")

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = oldid Then
response.write "du har stemt"
else
response.write "du har ikk stemt"
end if
next

Få dette resultat:

Du har ikke stemt
Du har stemt
Du har stemt
Du har stemt
Du har ikke stemt
Du har ikke stemt

Det ser bare ud som om, at du ikke får opdateret din cookie, da der kommer en frygtelig masse 0'er i cookien
Avatar billede bobbedude Nybegynder
06. juni 2002 - 11:59 #17
Hvad går jeg så ?

koden er her:

If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = oldid
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & oldid
End If

myArr = Split(request.cookies("hotvote")("ID"), ",")

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = oldid Then
response.write "du har stemt<br>"
else
response.write "du har ikke stemt<br>"
end if
next

Response.Write "HER ER DET DU BAD OM tmceu <br>"
Response.Write "Cookie: " & Request.Cookies("hotvote")("ID")
Avatar billede tmceu Praktikant
06. juni 2002 - 12:11 #18
oldid har i ovenstående kode ingen værdi, med mindre du henter den fra Request.QueryString("oldid")
Avatar billede bobbedude Nybegynder
06. juni 2002 - 12:15 #19
Her er lige lidt mere kode oldid har en værdi:

if (Request.ServerVariables("REQUEST_METHOD") = "POST") then
oldID = Request.Form("thisID")
Point = request.form("vote")
else
oldID = 0
end if

set connect = server.createobject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")

Connect.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("hotnot.mdb")




if point > 0 then
If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = oldid
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & oldid
End If

myArr = Split(request.cookies("hotvote")("ID"), ",")

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
else
response.write "Har ikke stemt<br>"
end if
next

Response.Write "HER ER DET DU BAD OM tmceu <br>"
Response.Write "Cookie: " & Request.Cookies("hotvote")("ID")
end if
Avatar billede bobbedude Nybegynder
06. juni 2002 - 13:00 #20
æv
Avatar billede tmceu Praktikant
06. juni 2002 - 13:52 #21
Request.ServerVariables("REQUEST_METHOD") er jo ikke POST. Du overfører oldid i querystring og derfor er metoden på din form GET
Avatar billede bobbedude Nybegynder
06. juni 2002 - 14:02 #22
men kan det ikke være lige meget når værdierne bliver sat ind i den cookie??
Avatar billede tmceu Praktikant
06. juni 2002 - 14:07 #23
Nej, det er den direkte årsag til, at ID stort set altid er 0. Se her:

if (Request.ServerVariables("REQUEST_METHOD") = "POST") then
oldID = Request.Form("thisID")
Point = request.form("vote")
else
oldID = 0
end if

Når jeg går ind på din side og stemmer, kan jeg se at oldid overføres i querystring. Dermed vil det jo altid være oldid = 0 der "vinder"
Avatar billede tmceu Praktikant
06. juni 2002 - 14:14 #24
Du har lige gjort en god indsats for at tiltrække dig negativ opmærksomhed. Folk herinde hader spørgsmål, der henviser til andre spørgsmål. Personligt er jeg ligeglad :-)
Avatar billede tmceu Praktikant
06. juni 2002 - 14:21 #25
Hvis dette problem skal løses, må du forklare hvordan sammenhængen er mellem alle dine forskellige ID'er. Du har både en old, thisid og også en oldid.

Her bruger du old i querystring

<form name="form1" method="post" action="default.asp?vote=yes&old=3">

Her bruger du thisid i POST

<input type="hidden" name="thisID" value="3">

Og så har jeg en fornemmelse af, at vi ikke har set hele din kode. Derfor gør du det ikke ligefrem nemt at hjælpe dig.
Avatar billede bobbedude Nybegynder
06. juni 2002 - 14:52 #26
<%
if (Request.ServerVariables("REQUEST_METHOD") = "POST") then
oldID = Request.Form("thisID")
Point = request.form("vote")
else
oldID = 0
end if

set connect = server.createobject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")

Connect.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("hotnot.mdb")




if point > 0 then
If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID")= Request.Form("thisID")
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & oldid
End If

myArr = Split(request.cookies("hotvote")("ID"), ",")

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
else
response.write "Har ikke stemt<br>"
end if
next
end if


if point > 0 then
    strsql = "update hotnot set points = points + " & point & " where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set hits = hits + 1 where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set gens = points/hits where id = " & oldid
    connect.execute(strsql)
end if

if session("oldsex") <> session("sex") then
    'Restart med laveste id og set rs = eof   
    strsql = "select * from hotnot where 2 = 3"
    oldid = 0
else
    if LCase(session("sex")) = "men" then
          strSQL = "SELECT * FROM hotnot WHERE ID > "& oldID & " AND kon=2 AND active='yes' AND aproved='yes' order by id"
    elseif LCase(session("sex")) = "female" then
          strSQL = "SELECT * FROM hotnot WHERE ID > "& oldID & " AND kon=1 AND active='yes' AND aproved='yes' order by id"
    else
          strSQL = "SELECT * FROM hotnot WHERE ID > "& oldID & " AND active='yes' AND aproved='yes' order by id"
    end if
end if

Set rs = Connect.Execute(strSQL)
if rs.EOF then
    SELECT CASE LCase(session("sex"))
    CASE "female"
        strsql = "SELECT TOP 1 * from hotnot where kon = 1 AND active='yes' AND aproved='yes' order by id"
    case "men"
        strsql = "SELECT TOP 1 * from hotnot where kon = 2 AND active='yes' AND aproved='yes' order by id"
    case else
        strsql = "SELECT TOP 1 * from hotnot where active='yes' AND aproved='yes' order by id"
    END SELECT
  Set rs = Connect.Execute(strSQL)
end if

if NOT rs.EOF then
  oldID = rs("ID")

%>
Avatar billede tmceu Praktikant
06. juni 2002 - 15:05 #27
Når jeg går ind på din side nu, vil jeg påstå at det virker. Hvis jeg prøver at stemme flere gange på den første, får jeg at vide, at jeg har stemt.
Avatar billede bobbedude Nybegynder
06. juni 2002 - 15:12 #28
Ja det virker hvis man bruger BACK knappen så kan man ikke stemme på den samme, men hvis man når til enden og den begynder forfra ja så kan man stemme igen
Avatar billede tmceu Praktikant
06. juni 2002 - 15:26 #29
OK, jeg tror at det der forvirrer dig er, at du faktisk løber alle dine ID i cookien igennem og derfor får en masse "har ikke stemt" skrevt ud. Den fanger godt nok den du er på p.t. men skriver også de andre.

Hvis du i cookien eks. har: 3,5,8,7 og den aktuelle oldid er 5, vil du få:

har ikke stemt
har stemt
har ikke stemt
har ikke stemt

Det er jo korrekt, for du har ikke stemt på 3,7 og 8 ift. det aktuelle oldid.

Ændre cookie check'et til dette:

For i = 0 To UBound(myArr)
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
end if
next
Avatar billede bobbedude Nybegynder
06. juni 2002 - 15:42 #30
Oki nu ser det sådan ud

If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = oldid
Else
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & oldid
end if

myArr = Split(request.cookies("hotvote")("ID"), ",")
For i = 0 To UBound(myArr)
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
end if
next


Men jeg syntes stadig at det ser ud som om at det ikke kører helt korrekt.
Avatar billede tmceu Praktikant
06. juni 2002 - 15:53 #31
Jeg giver simpelt hen snart op, for jeg er begyndt at tvivle på om jeg kan forklare dig det :-) Det ER altså SVÆRT at løse et problem du beskriver som "Men jeg syntes stadig at det ser ud som om at det ikke kører helt korrekt."

Du tænker sikkert på at du får en masse "har stemt" skrevet ud på skærmen ? Dette skyldes alle de tests du har lavet og at din cookie derfor er overfyldt med den samme id. Har du stemt på nr. 3 flere gange, har du flere gange "3" i din cookie.

I en real-life situation vil du forhåbentlig ikke som nu, blot skrive "har stemt" og så fortsætte. Jeg regner da medm at du erstatter response.write med eks.

response.write "Du har allerede stemt på denne..."
response.end

Som det er nu, fortsætter du jo bare scriptet og smider så oldid i cookien igen. Problemet med cookien er løst for længst. Resten af dit script har du holdt tæt på kroppen meget længe og man må derfor antage at det kun var cookie du havde problemer med.

Hvis du ændrer denne:

myArr = Split(request.cookies("hotvote")("ID"), ",")
For i = 0 To UBound(myArr)
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
end if
next

Til denne:

myArr = Split(request.cookies("hotvote")("ID"), ",")
For i = 0 To UBound(myArr)
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
Response.end
end if
next

Kan der kun stemmes én gang, baseret på cookie og de enkelte id'er vil kun optræde én gang i cookien.
Avatar billede bobbedude Nybegynder
06. juni 2002 - 16:02 #32
oki sorry jeg er åbenbart fatsvag så jeg giver også op nu.
P.s hvis jeg bruger response.end kan man slet ikke stemme da den første gang man stemmer bare skriver Har temt på en blank side.
Avatar billede tmceu Praktikant
06. juni 2002 - 16:06 #33
Det er ikke første gang du stemmer, for response.end vil kun blive udført hvis den finder oldid i cookien.

Luk alle browsere, slet din gamle cookie og prøv forfra, først der stemmer du igen første gang.
Avatar billede bobbedude Nybegynder
06. juni 2002 - 16:23 #34
Selv om jeg lukker alle browsere og sletter cookies så sker der det samme, første gang jeg trykker på stem siger den jeg har stemt.
Avatar billede tmceu Praktikant
06. juni 2002 - 16:30 #35
Lad os lige gå koden igennem:

' laver et array med indholdet fra cookie
' Hvis cookie er tom, bliver dette array tomt
myArr = Split(request.cookies("hotvote")("ID"), ",")

' I et tomt array, er UBound(myArr) = -1
' For løkken køres derfor ikke
For i = 0 To UBound(myArr)

' Hvis det aktuelle element i array'et er = thisid
' Udskriv og stop scriptet
If Trim(myArr(i)) = Request.Form("thisID") Then
response.write "Har stemt<br>"
Response.end
end if
next


Du kan jo lave denne test i toppen af koden på, om din cookie virkelig er tom:

myArr = Split(request.cookies("hotvote")("ID"), ",")

response.write "Cookie indhold:<BR>"

For i = 0 To UBound(myArr)
response.write "Element nr. " & i & ": " & myArr(i) & "<br>"
next
Avatar billede tmceu Praktikant
06. juni 2002 - 16:42 #36
Du har placeret response.end koden et forkert sted, for du har ret i, at siden slet ikke vises. Den kode du har vist, indeholder ikke nogen form, billede o.s.v.. Ligger den kode som udskriver billedet og afstemningsboksen i samme fil som ovenstående ?
Avatar billede bobbedude Nybegynder
06. juni 2002 - 17:03 #37
ja der gør
Avatar billede tmceu Praktikant
06. juni 2002 - 19:56 #38
Så giver jeg op. Jeg kan ikke forklare dig hvordan koden skal ændres, når du trods flere hints om at vise al koden, bliver ved med at kun at vise brudstykker.  Og faktisk vil jeg mene, at det er ligegyldigt hvor mange point du udlover, for hvis du ikke vil vise din kode ingen hjælpe dig.
Avatar billede bobbedude Nybegynder
06. juni 2002 - 21:32 #39
Jeg har løst det:

If Request.Cookies("hotvote")("ID") = "" Then
Response.Cookies("hotvote")("ID") = oldid
Else

if instr(Request.Cookies("hotvote")("ID"), oldid) then
harstemt = "ja"
else
harstemt = "nej"
end if

if harstemt = "nej" then
Response.Cookies("hotvote")("ID") = Request.Cookies("hotvote")("ID") & "," & oldid

strsql = "update hotnot set points = points + " & point & " where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set hits = hits + 1 where id = " & oldid
    connect.execute(strsql)
    strsql = "update hotnot set gens = points/hits where id = " & oldid
    connect.execute(strsql)
else
strERR = "<center><b>You have voted for this image</b></center><br>"
end if

end if
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