webForumDet fria alternativet

Ratingsystem till Filer

ASP

15 svar · 351 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej Hallå

Jag har en drös med Filer på min hemsida som man kan ladda hem. Nu vill jag ha ett sorts ratingsystem till dessa. Det ska vara en <select> lista med val mellan 1 till 10. Max på skalan är 10 minst är 1. Nu vill jag ha så att det även visas en decimal, så att om 3 personer röstat så ska ett sorts snitt rälnas ut, sen ska resultatet visas med en decimal, tex ska en fil kunna ha 3.4 av 10 i betyg.

I min tabell i db'n (Access) hade jag tänkt lägga till kolumnerna "rate" (betyget) och "rate_antal" (antal som röstat på filen). Sen ska jag även ha en tabell till (tbl_rate_ip) där ipadresserna för de3 som röstat ska loggas, man ska bara kunna rösta en gång.

JAg känner att jag fastat lite grann och behöver hjälp att komma loss (HaHa...) men med en start och ngt att börja med tack ;)

Medlem sedan feb. 20034 441 inlägg
#2

Är det _ingen_ som vet hur jag ska börja?! Hallå, alla här verkar ju hajj på ASP så ngn måste ju kunna säga ngt ? ;

Medlem sedan feb. 20034 441 inlägg
#3

Nu har jag kommit en bra bit på väg, men...

Jag har en tabell (tbl_rate_ip) där ipadressen för den som röstat (Man ska bara kunna rösta en gång) samt ID't för Filen finns.

Sen hra jag en tabell (tbl_files) med sökvägar, beskrivningar mm. i filerna. I den tabellen finns även Rate, där resultatet för filen sparas.

Såhär ser frågan som plockar ut allt ut:

--------------------------------------------------------
strSQL = "SELECT Rate, (SELECT COUNT(*) FROM tbl_rate_ip WHERE fil_ID = " & id & ") AS Antal FROM tbl_files WHERE ID = " & id & ";"
--------------------------------------------------------

Såhär långt funkar det, men det blir fel.

Såhär formaterar jag resultatet:

--------------------------------------------------------
strTemp2 = "Betyg: " & FormatNumber(oRec("Rate") / oRec("Antal"), 1) & "&nbsp;"
--------------------------------------------------------

Nu blir det så att 10 inte blir högst, säg att 10 personer har röstat och det totala resultatet för en fil är 245, då blir det 24,5 som det är nu, vilket är fel.

Så det här behöver jag hjälp med. Tack !

Medlem sedan feb. 20034 441 inlägg
#4

Lösningen var ju enkel, lite lätt matte bara:

strTemp2 = "Betyg: " & FormatNumber([b]([/b]oRec("Rate") / oRec("Antal")[b]) / 10[/b], 1) & "&nbsp;"
Medlem sedan feb. 20034 441 inlägg
#5

Njä, det blir ju inte rätt iaf. Om en enda person röster 5 på en fil, så blev ju resultatet 0.5, det ska ju då bli 5. Nu sitter jag fast igen :( Hjälp ;)

Medlem sedan juni 200032 967 inlägg
#6

Jag förstår inte riktigt vad det är du försöker räkna ut...

Medlem sedan juli 20015 107 inlägg
#7

Antalet röster / summan av alla röster multiplicerat med 100

hmmm, jag har för mej att det är så =)

Medlem sedan feb. 20034 441 inlägg
#8

@nders => Ett "Rating" system på filer, man ska kunna rösta på filer, man kan välja att rösta 1 - 10. Skalan ska gå från 1 - 10, den ska visa EN decimal. Är du / ni andra med bättre nu?? Röstar EN person en 10, blir resultatet 10, sen blir det ju lite mindre om person nummer 2 tex., röstar en 2:a. Ska prova Cannabis_Tomten's grejj och se. Kom gärna med fler exempel.

Medlem sedan feb. 20034 441 inlägg
#9

Cannabis_Tomen => Med ditt får jag ju ut procent, det vill jag inte. Tänk er en skala från 1 - 10, minst är ett, max är 10. Filerna kan bedömas mellan 1 - 10. Om ni inte förstår vet jag tyvärr inte hur jag ska förklara.

Medlem sedan juni 200032 967 inlägg
#10
FormatNumber (totalaröstsumman/antaletröstande, 1)

Det borde inte vara klurigare än så väl?

Medlem sedan mars 20032 667 inlägg
#11

Glöm inte heller kolla så att du inte gör en division med 0. :)

Medlem sedan feb. 20034 441 inlägg
#12

@nders => SOm du ser i mitt kodexempel har jag redan så, men det funkar inte... REsultatet får ju INTE överstiga 10, men det går det ändå. Om ngt av det den plockar ut ut dbn skulle vara noll, visas "Inga Röster" ;)

Medlem sedan juni 200032 967 inlägg
#13

Hur i hela helskotta kan snittet bli över 10 om 10 är maxbetyg?

Medlem sedan feb. 20034 441 inlägg
#14

Det...

...undrar jag med.

<%
Response.Expires = -1000

Dim oConn
Dim oRec
Dim strSQL

Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db/db.mdb"))

id = Request.Querystring("id")

If Request.Querystring("a") = "add" Then
	Set oRec = oConn.Execute("UPDATE tbl_files SET Antal = Antal + 1 WHERE ID = " & id & ";")
	Response.reDirect("files_update.asp?id=" & id & "&a=show")
ElseIf Request.Querystring("a") = "show" Then
	
	strSQL = "SELECT ipadress, fil_ID FROM tbl_rate_ip WHERE ipadress = '" & Request.Servervariables("REMOTE_ADDR") & "' AND fil_ID = " & id & ";"
	Set oRec = oConn.Execute(strSQL)
		If oRec.EOF Then
			tempStr = "<form name='form_rate' method='post' action='files_update.asp?a=rate&id=" & id & "'><select name='rate_file' class='rate'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option></select>&nbsp;&nbsp;<a href='#' onclick=""javascript:return betyg();"" class='forum'>Rösta</a></form>"
		Else
			tempStr = "<a href='javascript: close(self);' class='forum'>Stäng</a>"
		End If
'################ RÄKNA UT #####################
	strSQL = "SELECT Rate, (SELECT COUNT(*) FROM tbl_rate_ip WHERE fil_ID = " & id & ") AS Antal FROM tbl_files WHERE ID = " & id & ";"
	'Response.Write(strSQL)
	'Response.End
	Set oRec = oConn.Execute(strSQL)
	
	If oRec("Antal") = "0" Or oRec("Rate") = "0" Then
		strTemp2 = "&nbsp;&nbsp;Inga Röster"
	Else
		'strTemp2 = "&nbsp;&nbsp;Betyg: " & Round((oRec("Rate") / oRec("Antal")), 1)
		Response.Write("Antal: " & oRec("Antal"))
			Response.Write("<br>Röster: " & oRec("Rate"))
	End If
'############################################
	strSQL= "SELECT ID, Filnamn, Path, Typ, Besk, Antal FROM tbl_files WHERE ID = " & id & ";"
	Set oRec = oConn.Execute(strSQL)

If Not oRec.EOF Then

%>

<table border="0" width="100%" cellspacing="0" cellpadding="0" style="border: 1px #000000 solid;">
<tr>
<td class='files_topic' style="padding-left: 5px;" colspan='2'><img src='pics/rarico.png' border='0'>&nbsp;&nbsp;<%=oRec("Filnamn")%></td>
</tr>
<tr>
<td class='files' colspan='2'><textarea name='text' cols='61' rows='10' readonly><%=oRec("Besk")%></textarea></td>
</tr>
<tr>
<td class='files_topic' style="height: 17px; padding-left: 5px; text-align: left; vertical-align: middle; border: 1px #000000 solid;"><%=tempStr & strTemp2%></td>
<td class='files_topic' style="padding-right: 5px; text-align: right; vertical-align: middle; border: 1px #000000 solid;"><a href='<%=path & "files_update.asp?a=add&id=" & id%>' onclick="javascript:window.open('<%=path & oRec("Path") & oRec("Filnamn")%>');window.close(self);" class='forum'>Ladda Hem</a></td>
</tr>

<%Else%>
<table border="0" width="100%" cellspacing="0" cellpadding="0" style="border: 1px #000000 solid;">
<tr>
<td class='files_topic' style="padding-left: 5px;" colspan='2'><img src='pics/rarico.png' border='0'>&nbsp;&nbsp;Ett fel uppstod, försök igen lite senare.</td>
</tr><tr>
<td class='files' colspan='2'><textarea name='text' cols='58' rows='10' readonly></textarea></td>
</tr><tr>
<td class='files_topic' style="padding-left: 5px; text-align: left;"><%=tempStr%></td>
<td class='files_topic' style="padding-right: 5px; text-align: right;"><a href='#' onclick='javascript:return false;' class='forum'>Ladda Hem</a></td>
</tr>
<%
Set oRec = Nothing
End If

ElseIf Request.Querystring("a") = "rate" Then
	strRate = Trim(Request.Form("rate_file"))
	id = Request.Querystring("id")

	strSQL = "SELECT Rate FROM tbl_files WHERE ID = " & id &";"
	Set oRec = oConn.Execute(strSQL)
	If Not oRec.EOF Then
		'Rätt
		rate = strRate + oRec("Rate")
		strSQL = "UPDATE tbl_files SET Rate = " & rate & " WHERE ID = " & id & ";"
		Set oRec = oConn.Execute(strSQL)
		Set oRec = Nothing
			strSQL = "INSERT INTO tbl_rate_ip(ipadress, fil_ID) VALUES('" & Request.servervariables("REMOTE_ADDR") & "', '" & id & "');"
			Set oRec = oConn.Execute(strSQL)
			Set oRec = Nothing
		Response.reDirect("files_update.asp?id=" & id & "&a=show")
	Else
		'Fel
	End If

End If
%>

Det är koden för allt ;)

Medlem sedan juni 200032 967 inlägg
#15

Oj vad kladdigt. :)

Är denna SQL-fråga verkligen rätt? Exakt vad returnerar den?

strSQL = "SELECT Rate, (SELECT COUNT(*) FROM tbl_rate_ip WHERE fil_ID = " & id & ") AS Antal FROM tbl_files WHERE ID = " & id & ";"

Innehåller Rate den totala röstmassan, dvs har två röstat 10, innehåller den då 20? Och count-delfrågan returnerar antalet röstare?

Är du säker på att röstningarna lagras som du tänkt? För om ovanstående stämmer, då ska 20/2 aldrig kunna överstiga 10. Det kan det iofs aldrig, men... ;)

Medlem sedan feb. 20034 441 inlägg
#16

@nders skrev:

Innehåller Rate den totala röstmassan, dvs har två röstat 10, innehåller den då 20? Och count-delfrågan returnerar antalet röstare?

Precis så ja, vet att koden är kladdig, men det är inte mitt fel ;) Exakt som du säger har jag tänkt, det är resultatet jag inte får fram schysst. Dessutom strular det här:

strSQL = "SELECT ipadress, fil_ID FROM tbl_rate_ip WHERE ipadress = '" & Request.Servervariables("REMOTE_ADDR") & "' AND fil_ID = " & id & ";"

De kollar om man redan röstat på den filen, problemet är att om redan fil_ID finns, då skrivs inte formuläret ut, det ska skrivas ut om INTE BÅDE ipadressen och fil_ID finns. Alltså, Ipadressen "Knyts" ihop med fil_ID. Men som det är nu så om jag går in o röster på ngt kan inte ngn annan rösta på samma sak senare, får då säger ovanstående fråga ifrån... Så där är ngt fel med.

719 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
565 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
565 ms — ändringar (db)