---
title: "Röstning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/9846-röstning/page2"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "crisse6"
published: "2001-05-26T15:02:00.000Z"
updated: "2001-06-02T19:27:00.000Z"
replies: 41
views: 518
page: 2
pages: 3
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/9846-röstning"
---

# Röstning

_Sida 2 av 3._

## #21 — jepsO, 2001-06-01T08:00Z

Nu har jag inte riktigt satt mig in i vad "föregående talare" sagt om ditt problem, men såhär skulle jag göra:

Ett formulär med fem stycken radio buttons:

```
<input type="hidden" value="<%=medlID%>" name="medlID">
<input type="radio" value="1" name="vote"> 1
<input type="radio" value="2" name="vote"> 2
etc.
```

Två nya kolumner i medlemstabellen; voteSum och numVotes. När någon röstar på en medlem gör du följande UPDATE-sats:

```
medlID = Request.Form("medlID")
vote = Request.Form("vote")
SQL = "UPDATE medlemmar SET voteSum = voteSum + " & vote & ", numVotes = numVotes + 1 WHERE medlemsID = " & medlID
conn.Execute(SQL)
```

När du sedan visar betyget för en medlem gör du helt sonika såhär:

```
SQL = "SELECT medlemsID, voteSum, numVotes FROM medlemmar WHERE medlemsID = " & medlID
Set rs = conn.Execute(SQL)
betyg = Round(rs("voteSum")/rs("numVotes"),2)
Response.Write "Betyg: " & betyg
```

Topplista:

```
SQL = "SELECT TOP 10 * FROM medlemmar ORDER BY (voteSum / numVotes) DESC"
Set rs = conn.Execute(SQL)
do until rs.EOF
betyg = Round(rs("voteSum")/rs("numVotes"),2)
response.write betyg & " " & rs("medlemsnamn") & "<br>"
rs.Movenext
loop
```

Disclaimer: Jag har inte testat koden själv :e

Permalänk: https://www.webforum.nu/p/270737

## #22 — crisse6, 2001-06-01T14:29Z

okej, jag har nu testat din kod, började med själva röstningen... det funkar inte :( varför funkar inte denna kod:

```
<%
Set Databas = Server.CreateObject("ADODB.Connection")
Set rsRosta = Server.Createobject("ADODB.Recordset")
MdbFilePath = Server.MapPath("rosta.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"

medlID = Request.Form("username")
vote = Request.Form("knapp")
SQL = "UPDATE alternativ SET antalRoster = antalRoster + " & vote & ", betyg = betyg + 1 WHERE ID = " & medlID
Response.Write SQL
Databas.Execute(SQL)
%>
```

får detta felmess(inkl. response.write av sql)

```
UPDATE alternativ SET antalRoster = antalRoster + 3, betyg = betyg + 1 WHERE ID = *karin* 
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'ID = *karin*'. 

/groda/rostat.asp, line 24
```

line 24 är ju då sql-satsen...

Permalänk: https://www.webforum.nu/p/270738

## #23 — crisse6, 2001-06-01T14:53Z

okej! så här ser koden ut nu...den kod som ska uppdatera rösta, men inte ett j\*vla dugg händer ju i db:n... vad är fel?

Ursäkta min slarvighet... inlägget ovan löste sig ganska fort.. :r 

```
<%
Set Databas = Server.CreateObject("ADODB.Connection")
Set rsRosta = Server.Createobject("ADODB.Recordset")
MdbFilePath = Server.MapPath("rosta.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"

sql2 = "SELECT betyg, antalRoster FROM alternativ"
Set rsRosta = databas.execute (sql2)
%>
<%
vote = Request.Form("knapp")
SQL = "UPDATE [alternativ] SET [betyg] = [betyg] + " & vote & ", [antalRoster] = [antalRoster] + 1 WHERE [id] = " & Request.Form("id") & ""
Response.Write SQL
Databas.Execute(SQL)
%>
```

Permalänk: https://www.webforum.nu/p/270739

## #24 — LarsG, 2001-06-01T15:19Z

Update-satsen ser helt ok ut. I och med att du inte får något fel så tyder det på att det inte finns någon person med det id som du anger.

Har du testat att köra den separat i något verktyg?

Permalänk: https://www.webforum.nu/p/270740

## #25 — crisse6, 2001-06-01T15:46Z

LarsG, det finns asså inget inlagt i db:n... inget id finns alltså, men jag trodde att det skulle läggas in automatiskt om det ej fanns...??? hur löser vi detta då?

Permalänk: https://www.webforum.nu/p/270741

## #26 — LarsG, 2001-06-01T15:55Z

Ok,då får du först kontrollera om det finns

```
<%
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("rosta.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
id = request.form("id")
sql = "SELECT betyg, antalRoster FROM alternativ where id =" & id 
Set rsRosta = databas.execute (sql)
vote = Request.Form("knapp")

if rsRosta.eof then
'det finns ingen med det id som angavs
sql = "insert into alternativ (id,antalRoster,betyg) values (" & _
id & ",1," & vote & ")"
else
SQL = "UPDATE alternativ SET betyg = betyg + " & vote & ", antalRoster = antalRoster + 1 WHERE id = " & id
end if
Response.Write SQL
Databas.Execute SQL,,128
%>
```

Permalänk: https://www.webforum.nu/p/270742

## #27 — crisse6, 2001-06-01T23:51Z

får fel mess... operator saknas... :(

kolla koden: (ska få fram siffran som står i fältet betyg samt siffran i antalRoster)

```
<%
Set Databas7 = Server.CreateObject("ADODB.Connection")
Set rsRosta = Server.Createobject("ADODB.Recordset")
MdbFilePath7 = Server.MapPath("rosta.mdb")
Databas7.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath7 & ";"
medId = Request.Form("medId")		    
SQL2 = "SELECT betyg, antalRoster FROM alternativ WHERE medId = " & medId
Response.Write SQL2
Set rsRosta = Databas7.Execute(SQL2)
betyg = Round(rsRosta("betyg")/rsRosta("antalRoster"),2)
Response.Write "Betyg: " & betyg
%>
```

Permalänk: https://www.webforum.nu/p/270743

## #28 — crisse6, 2001-06-02T11:27Z

Tack LarsG! :e

en fråga...

jag har i koden så att om inte det ID:et man försöker nå finns så sätter den in ny data... det funkade med ID, men inte med username...??? 
det är sql satsen som gör inserten som strular + att update sql:en strular också... den gillar inte ngt med username... 
Förklaring: UPDATE:en ska uppdatera om posten finns, med bl a röster, betyg och username... INSERT:en ska lägga till användaren som man vill rösta på samt lägga in rösterna och betyget man gav honom/henne..kolla:

```
<%
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("rosta.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
id = request.form("medId")
username = request.form("username")
sql = "SELECT betyg, antalRoster FROM alternativ where username = '" & username &"'"
Response.Write sql
Set rsRosta = databas.execute (sql)
vote = Request.Form("knapp")
if rsRosta.eof then
'det finns ingen med det id som angavs
sql = "insert into alternativ (medId,antalRoster,betyg,username) values (" & _
id & ",1," & vote & "," & username & ")"
else
vote = cInt(vote)
SQL = "UPDATE alternativ SET betyg = betyg + " & vote & ", antalRoster = antalRoster + 1 WHERE [username] = '" & Request.Form("username") &"'"

Response.Write SQL
end if
Databas.Execute SQL,,128
%>
```

Permalänk: https://www.webforum.nu/p/270744

## #29 — @nders, 2001-06-02T11:35Z

vad gäller insert-frågan så kan det ju vara bra om man har apostrofer runt värdet som skall in i username.

är medID en räknare? isf kan du inte ha med den i insert-satsen.

update-frågan, hur ser den ut när du kör response.write? har vote något värde?

Permalänk: https://www.webforum.nu/p/270745

## #30 — crisse6, 2001-06-02T11:51Z

nej. medId är ingen räknare... det var det fält som funkade innan jag kom på att jag måste använda username... så jag tog bort medId ändå i inserten... 

vadå apostrofer, jag vet inte var och hur du menar? vore sjyst av dig att ändra i min kod...

UPDATE får jag ut detta:

```
UPDATE alternativ SET betyg = betyg + 4, antalRoster = antalRoster + 1 WHERE [username] = 'linkan'
```

Permalänk: https://www.webforum.nu/p/270746

## #31 — @nders, 2001-06-02T11:57Z

hmm... update-frågan ser helt korrekt ut tycker jag. vad får du för felmeddelande på den?

du har ju apostrofer runt username-värdet överallt ('linkan' t.ex.), men inte i insert-frågan:

```
sql = "insert into alternativ (medId,antalRoster,betyg,username) values (" & _
id & ",1," & vote & ",'" & username & "')"
```

mvh,

Permalänk: https://www.webforum.nu/p/270747

## #32 — crisse6, 2001-06-02T12:16Z

fick nu ett annat fel... men en bit frammåt tror jag ;)

detta felmess (inkl. sql)

```
SELECT betyg, antalRoster FROM alternativ where username = 'gbgkillen'insert into alternativ (medId,antalRoster,betyg,username) values (,1,2,'gbgkillen') 
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i INSERT INTO-uttryck. 

/groda/rostat.asp, line 35
```

okej, hela koden igen då! rad 35 markerad med fet stil!

```
<%
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("rosta.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
username = request.form("username")
sql = "SELECT betyg, antalRoster FROM alternativ where username = '" & username &"'"
Response.Write sql
Set rsRosta = databas.execute (sql)
%>
<%
vote = Request.Form("knapp")
if rsRosta.eof then
'det finns ingen med det id som angavs
SQL = "insert into alternativ (medId,antalRoster,betyg,username) values (" & _
id & ",1," & vote & ",'" & username & "')"
response.write sql
else
vote = cInt(vote)
[b]SQL = "UPDATE alternativ SET betyg = betyg + " & vote & ", antalRoster = antalRoster + 1 WHERE [username] = '" & Request.Form("username") &"'"[/b]
Response.Write SQL
end if
Databas.Execute SQL,,128
%>
```

igentligen är det ju raden där executen körs, men det är ju i sql:en det är fel! ;)

hjälp!

Permalänk: https://www.webforum.nu/p/270748

## #33 — @nders, 2001-06-02T12:19Z

hörru!

i din insertsats ser man ju att du saknar ett värde, medId. parentesen kan ju inte börja med ett komma.

antingen tar du bort medId från frågan helt och hållet eller så får du se till att du verkligen har ett värde med.

sen kan du ju kommentera bort de response.write sql som inte är aktuella.

Permalänk: https://www.webforum.nu/p/270749

## #34 — crisse6, 2001-06-02T12:29Z

älskar dig @nders! det funkar ju nu!

Permalänk: https://www.webforum.nu/p/270750

## #35 — @nders, 2001-06-02T12:52Z

jippi! :)

Permalänk: https://www.webforum.nu/p/270751

## #36 — crisse6, 2001-06-02T17:23Z

bara en fråga... ??? varför vill den inte dividera ut resultat i min kod...???
kolla:

```
<%
i = 0
betyg = Round(rs("betyg")/rs("antalRoster"),2)

Response.Write "<table width=""200"" border=""0"" valign=""top"" cellpadding=""4"">" & VbCrLf

Response.Write "<tr>" & VbCrLf

Response.Write "<td bgcolor=""white""><font face=""Verdana"" size=""1"" color=""black"">" & "#:" & "</font></td>"
Response.Write "<td bgcolor=""white""><font face=""Verdana"" size=""1"" color=""black"">" & "Användarnamn:" & "</font></td>"
Response.Write "<td bgcolor=""white""><font face=""Verdana"" size=""1"" color=""black"">" & "Antalröster:" & "</font></td>"
Response.Write "<td bgcolor=""white""><font face=""Verdana"" size=""1"" color=""black"">" & "Betyg:" & "</font></td>"

Response.Write "</tr>" & VbCrLf
Response.Write "<br><br>"
Response.Write "<font face=""Verdana"" size=""1""><b>H&auml;r &auml;r topplistan p&aring; dom popul&auml;raste medlemmarna p&aring; grodan. Placering 1-10, högsta betyg är 5.</font></b>"

Do Until rs.EOF
i = i+1

counter = counter + 1
If counter Mod 2 = 0 then
color = "ffffff"
Else
color = "E8A216"
End If

Response.Write "<tr>" & VbCrLf

Response.Write "<td bgcolor=""#" & Color & """><font face=""Verdana"" size=""1"" color=""black"">"& i &". </font></td>"
Response.Write "<td bgcolor=""#" & Color & """><font face=""Verdana"" size=""1"" color=""black"">" & rs("username") & "</font></td>"
Response.Write "<td bgcolor=""#" & Color & """><font face=""Verdana"" size=""1"" color=""black"">" & rs("antalRoster") & "</font></td>"
Response.Write "<td bgcolor=""#" & Color & """><font face=""Verdana"" size=""1"" color=""black"">"& betyg & "</font></td>"

rs.MoveNext
Loop

Response.Write "</tr>" & VbCrLf
%>
```

får inget felmess, bara själv talet från db:n :(

Permalänk: https://www.webforum.nu/p/270752

## #37 — LarsG, 2001-06-02T17:35Z

```
betyg = Round(cint(rs("betyg"))/cint(rs("antalRoster")),2)
```

Permalänk: https://www.webforum.nu/p/270753

## #38 — crisse6, 2001-06-02T18:36Z

hmm...ja, nu blir det iaf medelvärde, MEN samma betyg för alla...??? inte bra!
här är sql-satsen som väljer... 

```
SQL3 = "SELECT TOP 10 * FROM alternativ WHERE betyg ORDER BY (betyg / antalRoster) DESC"
```

vad är fel? fattar NADA!

Permalänk: https://www.webforum.nu/p/270754

## #39 — LarsG, 2001-06-02T19:10Z

```
SQL3 = "SELECT TOP 10 * FROM alternativ WHERE [b]betyg[/b] ORDER BY (betyg / antalRoster) DESC"
```

ser skumt ut. Skall det inte vara

```

SQL3 = "SELECT TOP 10 * FROM alternativ WHERE betyg > 0 ORDER BY (betyg / antalRoster) DESC"
```

Permalänk: https://www.webforum.nu/p/270755

## #40 — crisse6, 2001-06-02T19:17Z

nope... det gör ingen skillnad, står samma resultat hela tiden! det ska inte vara ngt annat i utskrivningen av betyget då? eller...?

Permalänk: https://www.webforum.nu/p/270756

---

Tråden på webben: https://www.webforum.nu/amne/asp/9846-röstning/page2  
Föregående sida: https://www.webforum.nu/amne/asp/9846-röstning.md  
Nästa sida: https://www.webforum.nu/amne/asp/9846-röstning/page3.md
