webForumDet fria alternativet

Röstning

ASPur ASP

41 svar · 478 visningar · startad av crisse6 · sida 2 av 3

Frågan, av crisse6

Hmmm...sitter och funderar på om man ska ha så att medlemmar kan rösta på varann...? men hur till en början gör man en röstning... och får ut genomsnitt i röster... så det står: Kalle: 3.47 poäng... och ligger därför på 25 plats..osv... \------------------ www.groda.net \kvack\, \kvack\

Läs frågan i sin helhet →
Medlem sedan mars 2001484 inlägg
#21

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

------------------
/ jeps0

Medlem sedan dec. 20002 526 inlägg
#22

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

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan dec. 20002 526 inlägg
#23

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)
%>

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan dec. 200012 464 inlägg
#24

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?

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 20002 526 inlägg
#25

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å?

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan dec. 200012 464 inlägg
#26

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
%>

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 20002 526 inlägg
#27

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
%>

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan dec. 20002 526 inlägg
#28

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
%>

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan juni 200032 967 inlägg
#29

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?

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 20002 526 inlägg
#30

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'

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan juni 200032 967 inlägg
#31

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,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 20002 526 inlägg
#32

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!

------------------
www.groda.net *kvack*, *kvack*

Medlem sedan juni 200032 967 inlägg
#33

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.

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 20002 526 inlägg
#34

älskar dig @nders! det funkar ju nu!

------------------
grodan, version 2 är snart klar!grodan - där det alltid kvackas!
crisse6

Medlem sedan juni 200032 967 inlägg
#35

jippi! :)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 20002 526 inlägg
#36

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 :(

------------------
grodan, version 2 är snart klar!grodan - där det alltid kvackas!
crisse6

Medlem sedan dec. 200012 464 inlägg
#37
betyg = Round(cint(rs("betyg"))/cint(rs("antalRoster")),2)

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 20002 526 inlägg
#38

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!

------------------
grodan -besök den nu!!!

[Redigerat av crisse6 den 02 jun 2001]

Medlem sedan dec. 200012 464 inlägg
#39
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"

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 20002 526 inlägg
#40

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

------------------
grodan -besök den nu!!!

144 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)