webForumDet fria alternativet

Kolla om man röstat (ur databasen)

ASP

6 svar · 206 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Frågan#1

Hejsan!

Jobbar på en omröstning. Just nu kan man rösta hur många gånger som helst... det jag vill är en funktion (if sats) som kollar om man röstat.

Jag har 3 tabeller. En som heter poll_fraga som sparar frågan och pollID. En som heter poll_svar som sparar pollID, svar, svarID och klick... Och i den tredje tabellen som heter poll_users har jag username, pollID och svarID.

Röstningen är klar, allt funkar finfint förutom checken som jag inte fått att fungera.

Såhär ser koden ut för tillfället:

<%MySQL = "SELECT * FROM poll_fraga order by id desc limit 1 " 
Set RecSet = Conn.Execute(MySQL)%>

<%If RecSet.EOF then%>
Ingen fråga inlagd
<%Else%>
<%=RecSet("fraga")%>
<%End If%>

<%MySQL = "SELECT * FROM poll_svar where pollID = " & RecSet("id") & " order by svarNR " 
Set Svar = Conn.Execute(MySQL)

MySQL = "SELECT sum(klick) As tot FROM poll_svar where pollID = " & RecSet("id") & " " 
Set RS = Conn.Execute(MySQL)

totalt = RS("tot")

If Svar.EOF Then%> 
   
Inga frågor!

<%End If

Do Until Svar.EOF

stat = Svar("klick")
If stat <> "0" Then
res = (stat/totalt)* 200
Else
res = "0"
End If%>

<table cellspacing="0" cellpadding="2" border="0" width="100%">
<tr>
<td width="200"><a href="forms/poll_rosta.asp?id=<%=Svar("id")%>&val=<%=Svar("svarnr")%>&pollID=<%=Svar("pollID")%>"><%=Svar("svar")%></a></td>
<td rowspan="2" width="30" valign="bottom" align="right">(<%For i=1 to Len(stat)%><%=Mid(stat,i,1)%><%Next%>)</td>
</tr>
<tr>
<td width="90" height="7"><img src="images/stapel.gif" width="<%=Round(res,0)%>%" height="5" border="1"></td>
</tr>

<%Svar.MoveNext
Loop%>

<tr>
<td colspan="2">Antal röster: <%For i=1 to Len(totalt)%><%=Mid(totalt,i,1)%><%Next%></td>
</tr>
</table>

och där jag sparar informationen när man röstar:

Set RecSet = Conn.Execute("Select * From poll_svar Where id = " & Request.QueryString("id") & " And svarNR = " & Request.QueryString("val"))

Conn.Execute("Update poll_svar Set klick = klick + 1 Where id = " & Request.QueryString("id") & " And svarNR = " & Request.QueryString("val"))

Conn.Execute("Insert Into poll_users(pollID, username, svarnr) Values(" & Request.Querystring("pollID") & ",'"& Session("username") &"', " & Request.Querystring("val") & ")")

strRedirPage = Request.ServerVariables("HTTP_REFERER")
Response.Redirect(strRedirPage)

Tacksam för svar!

Mvh

Medlem sedan aug. 20011 087 inlägg
#2

Hmm du skulle väll kunna göra nått med cookies.. e dock helt ny på detta så jag e inte säker på att det är såhär det funkar!

if Response.Cookies("rostat")= "ja" then
response.write "du har redan röstat"
else

Set RecSet = Conn.Execute("Select * From poll_svar Where id = " & Request.QueryString("id") & " And svarNR = " & Request.QueryString("val"))

Conn.Execute("Update poll_svar Set klick = klick + 1 Where id = " & Request.QueryString("id") & " And svarNR = " & Request.QueryString("val"))

Conn.Execute("Insert Into poll_users(pollID, username, svarnr) Values(" & Request.Querystring("pollID") & ",'"& Session("username") &"', " & Request.Querystring("val") & ")")

strRedirPage = Request.ServerVariables("HTTP_REFERER")
Response.Redirect(strRedirPage)

Response.Cookies("rostat")= "ja"
end if
Medlem sedan juli 20033 147 inlägg
#3

Jo men de vill jag inte :) Vill spara det i en databas så man som inloggad bara kan rösta EN gång... Menar, man ska inte kunna rösta igen om man tar bort sina cookies eller byter dator.

Medlem sedan aug. 2000378 inlägg
#4

du får köra en IF-sats innan du skriver ut formuläret som kolla om anv finns i databasen redan

jag e lite borta i din tabellstruktur...

Medlem sedan juli 20033 147 inlägg
#5

ok, men problemet är att jag måste loopa igenom alla användare med just det pollID'et för att se om man röstat... hur gör jag detta?

Mvh

Medlem sedan mars 20015 287 inlägg
#6

Varför måste du loopa igenom dem?
Det räcker väl om du kollar om just den inloggade liraren har röstat?
typ:

Set RecSet = Conn.Execute("Select svarnr From poll_users Where id = " & Request.QueryString("id") & " And username = & ",'"& Session("username") &"'")
If NOT Recset.EOF then
response.write "du har redan röstat"
else
Conn.Execute("Update poll_svar Set klick = klick + 1 Where id = " & Request.QueryString("id") & " And svarNR = " & Request.QueryString("val"))
Conn.Execute("Insert Into poll_users(pollID, username, svarnr) Values(" & Request.Querystring("pollID") & ",'"& Session("username") &"', " & Request.Querystring("val") & ")")

strRedirPage = Request.ServerVariables("HTTP_REFERER")
Response.Redirect(strRedirPage)

end if

Glöm inte att stänga alla dina kopplingar o rs.

Medlem sedan juli 20033 147 inlägg
#7

Det tackar jag för!
Såhär ser koden ut just nu:

strRedirPage = Request.ServerVariables("HTTP_REFERER")

Set RS = Conn.Execute("Select * From poll_users Where pollID = " & Request.Querystring("pollID") & " AND username = '" & Session("username") & "' ")

If NOT RS.EOF then
Session("fel") = "Du kan bara rösta en gång per fråga!"
Response.Redirect(strRedirPage)
else

Conn.Execute("Update poll_svar Set klick = klick + 1 Where id = " & Request.QueryString("id") & " And svarNR = " & Request.QueryString("val"))

Conn.Execute("Insert Into poll_users(pollID, username, svarnr) Values(" & Request.Querystring("pollID") & ",'"& Session("username") &"', " & Request.Querystring("val") & ")")

Response.Redirect(strRedirPage)

End If%>

Mvh

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)