webForumDet fria alternativet

Behöver hjälp med funktion.

ASP

11 svar · 353 visningar · startad av Pudolf

Medlem sedan juli 2000221 inlägg
Frågan#1

Hej, jag hade tänkt lägga upp en funktion till min sida. När jag skrivit en artikel om en produkt så vill jag att de som besöker sidan ska kunna ge produkten ett betyg, skala 1-10. Jag började med att göra en meny/list på sidan där de ska rösta.

<form>
<select name="select">
<option value="-" selected>Vad tycker du?</option>
<option value="-">1 - Sämst</option>
<option value="-">2</option>
<option value="-">3</option>
<option value="-">4</option>
<option value="-">5 - Medel</option>
<option value="-">6</option>
<option value="-">7</option>
<option value="-">8</option>
<option value="-">9</option>
<option value="-">10 - Bäst</option>
</select>
</form>

Men sedan vet jag inte vad jag skall göra, har en kolumn i min tabell "Artiklar" som heter "betyg".
Där hade jag tänkt att ett medelvärde av vad besökarna har gett produkten ska finnas. Alltså, en besökare röstar på produkten och ger den 5, då ska ju värdet i "poang" för den produkten, (produkten anges i id) vara 5, sedan kommer en och ger produkten 7, då blir värdet i "poang" 6. Medelvärdet hela tiden alltså.

Behöver jag göra fler sidor som kollar av så allt fungerar? Att man skickas till en sida som läser av betyget och sedan lägger in i databasen efter att ha räknat ut medelvärdet? Går det att göra så att man bara kan rösta en gång?

Hur ska jag göra? Tacksam för svar!
/mvh Pudolf

[Redigerat av Pudolf den 05 jan 2001]

Medlem sedan mars 2000167 inlägg
#2

För att se till att de röstar en gång lägger du helt enkelt in en cookie.

Vad gäller medelbetyg tycker jag du ska ha tre fält i databasen: "medelbetyg", "betyg" och "antalroster".

Då blir det helt enkelt att det betyg de ger artikeln plussas på varandra i fältet "betyg" samtidigt plussas 1 på i "antalroster" varje gång någon röstar.

Medelbetyget får du ut genom att ta "medelbetyg"/"antalroster"

Vill du slippa decimaltal skriver du round...

Klart?

------------------
~~~~~~~~~~~~~~~~~~~~
Mvh, Andreas
zizo@telia.com

Medlem sedan juli 2000221 inlägg
#3

hej, tack för svar.

går det att endast använda ett fält? Att när man markerar ett värde i listan så skickas man till typ en mellansida eller något som snabbt kollar upp vilket betyg man gav? Och där också beräknar allt i en enda kolumn, t ex att den tar det existerande värdet i kolumnen "betyg" och på något sätt räknar ut vad det nya medelvärdet ska vara?

Vore jätteglad om någon kunde visa ett "round" exempel också, med t ex 2 decimaler.

Tacksam för svar!

Medlem sedan mars 2000167 inlägg
#4

Nej du kan inte ha ett fält eftersom du ska ha medelvärde och måste då ha plussat ihop allas röster och dela på hur många som röstat.

Vad gäller "round" avrundar den till heltal.

betyg = rs("betyg")
antalroster = rs("antalroster")

round(betyg/antalroster)

------------------
~~~~~~~~~~~~~~~~~~~~
Mvh, Andreas
zizo@telia.com

Medlem sedan juli 2000221 inlägg
#5

ok, jag skapade två kolumner till då, "antalroster" och "medelbetyg"

Ska jag göra en mellansida man skickas till via <form>-en? Typ mellansida.asp där den plussar på värdena? Ska jag ha någon querystring som hjälper att hålla reda på betygen, man kan skickas till mellansida.asp?artikel_id=1&betyg=1, om man valt 1 osv.

Kan man skriva såhär för att få rätt i kolumnen "betyg"?

SQL = "UPDATE Artiklar SET betyg=betyg+=" & request.querystring("betyg") & " WHERE id=" & request("artikel_id")
Connection.Execute(SQL)

Och såhär i "antalroster"?

SQL = "UPDATE Artiklar SET antalroster=antalroster+1 WHERE id=" & request("artikel_id")
Connection.Execute(SQL)

Då skulle listan vara typ såhär:


<option value="/mellansida.asp?artikel_id=" & request.querystring("artikel_id") & "&betyg=1">1 - Sämst</option>

Osv till 10.

Finns det någon funktion som avrundar till en decimal?

Tacksam för svar!
/mvh pudolf

[Redigerat av Pudolf den 06 jan 2001]

Medlem sedan juli 2000221 inlägg
#6

Jag gjorde om lite, så det är inte som ovan. Men jag tror jag har fått allt att fungerar förutom kolumnen "medelbetyg"

Ska jag köra en UPDATE på sidan så kolumnen uppdateras efter att "antalroster" och "betyg" uppdaterats?

Så jag undrar hur SQLsatsen ska se ut då. För att göra så "medelbetyg" får en decimal. Typ som 5.5 eller så.

betyg = RS("betyg")
antalroster = RS("antalroster")

SQL = "UPDATE Artiklar SET medelbetyg=betyg/antalroster" WHERE id=" & request("id")
Connection.Execute(SQL)

Tacksam för svar

Medlem sedan dec. 20003 563 inlägg
#7

Nått sånt här funkar i alla fall.

Tabellen här kolumnerna antal och medel och bara en rad antar jag

Set SQLstmt1 = connection.execute("SELECT antal, sammanlagt FROM tabellen")

antal = SQLstmt1("antal")
sammanlagt = SQLstmt1("sammanlagt")

medel = ROUND(sammanlagt / antal, 1)

Och för att lägga in de nya rösterna så adderar du bara på i sammanlagt med den nya röstsumman och gör antal = antal -- 1 (antal + 1) i en annan SQL-sats.

------------------
MVH // Cyprys

Politik är som en kvinna. Man lägger ena benet åt vänster, det andra benet till höger och koncentrerar sig på centerpartiet.

Medlem sedan juli 2000221 inlägg
#8

ok. tack så mycket för koden!
jag har 3 kolumner
* medelbetyg (antalroster/besokarbetyg)
* antalroster (hur många som röstat)
* besokarbetyg (betyget de ger)

listan/menyn heter "vote" så jag testade det här

SQL = "UPDATE Artiklar SET antalroster=antalroster+1 WHERE id=" & request("id")
Connection.Execute(SQL)

SQL = "UPDATE Artiklar SET besokarbetyg=besokarbetyg+" & Request.Form("vote") & " WHERE id=" & request("id")
Connection.Execute(SQL)

Men den gav felet:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'besokarbetyg+'. 

/artikel.asp, line 28

Cyprys, kan man köra en slags UPDATE på

antalroster = SQLstmt1("antalroster")
besokarbetyg = SQLstmt1("besokarbetyg")

medelbetyg = ROUND(besokarbetyg / antalroster, 1)

Så att det läggs in i kolumnen "medelbetyg", för jag skulle behöva kunna sortera posterna efter medelbetyg.

Tacksam för svar!
Mvh pudolf

Medlem sedan juni 200032 967 inlägg
#9

ett litet tips:

när du får ett fel som härstammar från en sql-fråga, skriv då alltid ut den färdiga frågan med response.write.

då ser man lättare vad som är fel.

jag skulle tro att den här gången beror det på att request.form("vote") inte har något värde. heter fältet verkligen 'vote'?

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

Medlem sedan mars 20002 836 inlägg
#10

Ett tips är att man alltid lägger in request i egna variabler innan man plockar in dem i sql variabeln.

cya

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan juli 2000221 inlägg
#11

jag tror jag vet vad som är fel, men har någon ett Javascript eller nått som göra att man skickas till en sida direkt när man markerat ett värde i listan?

Sedan citerar jag mig sälv:
kan man köra en slags UPDATE på

antalroster = SQLstmt1("antalroster")
besokarbetyg = SQLstmt1("besokarbetyg")
medelbetyg = ROUND(besokarbetyg / antalroster, 1)

Så att det läggs in i kolumnen "medelbetyg", för jag skulle behöva kunna sortera posterna efter medelbetyg.

tacksam för svar

Medlem sedan juli 2000221 inlägg
#12

Okej, jag tror jag fått altt att fungera, det enda jag behöver nu är en kod som lägger in besokarbetyg/antalroster i kolumnen medelbetyg! Och det ska vara en decimal.

Sedan ska man bara kunna rösta en gång, det kanske man kan gör med cookies, men HUR? Har någon en liten kodsnutt? :)

Tacksam för svar
/mvh Pudolf

279 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
148 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)