webForumDet fria alternativet

Visa betyg som bilder.

ASP

16 svar · 582 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

Jag har 3st bilder, en full stjärna, en halvfull stjärna och en tom stjärna.

Finns det något script eller funktion som kan ta ett medelbetyg på kanske 3,6 och göra om det till 3 fulla stjärnor, en halvfull och en tom osv..

och hur tycker ni jag skall lösa det i databasen, en tabell där alla röster lagras och sedan plocka ut och göra ett medel.

Eller en kolumn med totalt antal poäng, och en med antal röster och räkna ut det så? känns som att alternativ nr2 borde vara det som tar minst på databasen eller?

Medlem sedan nov. 20017 144 inlägg
#2

Kan man tänka sig att det högsta värdet är tio(10) så kanske det blir enklare att trixa med bilderna.
Alltså: ett ger en halv stjärna, två ger en hel stjärna osv...

SELECT AVG(betyg) AS medel FROM tabell

Response.write left("0"& RS(0),2)

Det borde inte vara så intressant att spara varenda röst.
Tycker att alternativ två borde vara smartare.

Medlem sedan aug. 20011 087 inlägg
#3

ok nu skulle högsta vara 5 vilket ger 10 olika möjligheter (10 halva stjärnor)

och jag kör på alternativ nr2 jag har en kolumn med totalt antal poäng. (man kan bara ge hela poäng 1,2,3,4,5)
och en kolumn med antal röster.

hur bär jag mig då åt?

Medlem sedan nov. 20017 144 inlägg
#4

Ex. fem stycken radiobuttons.
Där "Radiobutton 1" ger två poäng, "Radiobutton 2" ger fyra poäng osv. Då kommer det ju att se ut som att betygsskalan går mellan ett och fem poäng.

Medlem sedan aug. 20011 087 inlägg
#5

Aha joo jaa d låter vettigt men jag har fortfarande inte förstått hur jag skall göra om medelvärdet till bilderna, det var väll det som var den egentliga frågan ;)

Medlem sedan nov. 20017 144 inlägg
#6

Vad har du för databas?
Jag vet inte om detta funkar i mySql men annars så skulle ju detta kunna vara en metod: (OBS! Kvasikod)

...
SELECT AVG(betyg) AS medel FROM tabell
...

Response.write "<img src=""Star_"& left("0"& RS("medel"),2) &".gif"">"

Då är det meningen att om medel är ex.4
så kommer det att stå: <img src="star_08.gif">
Alltså du får skapa tio stycken bilder, var av den första endast har tomma stjärnor, den andra har en halvt ifylld stjärna och resten är tomma, den tredje har en hel stjärna ifylld och fyra tomma osv.

Medlem sedan aug. 20011 087 inlägg
#7

Mjaa d va ju inte riktigt vad jag tänkte.. jag har 3st bilder en full, en halvfull och en tom stjärna.

Det borde ju gå att lösa med en funktion av något slag.

Medlem sedan nov. 20017 144 inlägg
#8

Ja, visst med lite loopar och så vidare.
Men det blir väl mycket krångligare.

Medlem sedan jan. 20032 285 inlägg
#9

Kanske såhär? Otestad kod.

SELECT AVG(betyg) FROM tabell

--------------------------------------------

intBetyg = Round(objRS(0), 1)

If Int(intBetyg) < intBetyg Then
  sngBetygOver = CSng(intBetyg - Int(intBetyg))

  If sngBetygOver < 0.3 Then
    intStars = Int(intBetyg)
  ElseIf sngBetygOver => 0.3 AND sngBetygOver < 0.8 Then
    intStars = Int(intBetyg) + 0.5
  ElseIf sngBetygOver => 0.8 Then
    intStars = Int(intBetyg) + 1
  End If
Else
  intStars = Int(intBetyg)
End If

If Int(intStars) < intStars Then
  intStarsOver = intStars - Int(intStars)

  If Int(intStars) > 0 Then
    For i = 1 To intStars
      Response.Write("<img src=""hel.gif"">")
    Next
  End If

  Response.Write("<img src=""halv.gif"">")
  intTomma = 5 - (Int(intStars) + 1)
Else
  If intStars > 0 Then
    For i = 1 To intStars
      Response.Write("<img src=""hel.gif"">")
    Next
  End If

  intTomma = 5 - intStars
End If

If intTomma > 0 Then
  For j = intTomma To 1 Step - 1
    Response.Write("<img src=""tom.gif"">")
  Next
End If
Medlem sedan aug. 20011 087 inlägg
#10

Det där funkade helt underbart bra :D

Medlem sedan aug. 20011 087 inlägg
#11

Bara en fråga.. går det att få scriptet att fungera ungeför såhär..

strpoang = rs(0)
response.write makestars(strPoang)

dvs funktionen ligger längst upp på sidan och så kallar man på den när man behöver den?

Medlem sedan jan. 20032 285 inlägg
#12

Jo, det borde väl funka att göra så här:

Sub WriteStars(intBetyg)
  If Int(intBetyg) < intBetyg Then
    sngBetygOver = CSng(intBetyg - Int(intBetyg))

    If sngBetygOver < 0.3 Then
      intStars = Int(intBetyg)
    ElseIf sngBetygOver => 0.3 AND sngBetygOver < 0.8 Then
      intStars = Int(intBetyg) + 0.5
    ElseIf sngBetygOver => 0.8 Then
      intStars = Int(intBetyg) + 1
    End If
  Else
    intStars = Int(intBetyg)
  End If

  If Int(intStars) < intStars Then
    intStarsOver = intStars - Int(intStars)

    If Int(intStars) > 0 Then
      For i = 1 To intStars
        Response.Write("<img src=""hel.gif"">")
      Next
    End If

    Response.Write("<img src=""halv.gif"">")
    intTomma = 5 - (Int(intStars) + 1)
  Else
    If intStars > 0 Then
      For i = 1 To intStars
        Response.Write("<img src=""hel.gif"">")
      Next
    End If

    intTomma = 5 - intStars
  End If

  If intTomma > 0 Then
    For j = intTomma To 1 Step - 1
      Response.Write("<img src=""tom.gif"">")
    Next
  End If
End Sub

WriteStars Round(objRS(0), 1)
Medlem sedan aug. 20011 087 inlägg
#13

Underbart ;) ska testa det!

Medlem sedan aug. 20011 087 inlägg
#14

efter lite fixande och joxande fick jag det att funka. helt perfekt! Tack!

Medlem sedan aug. 20011 087 inlägg
#15

tyvärr hittade jag ett litet fel.. om det inte finns några röster och inte några poäng så blir det 0 som input och då får jag felmeddelandet spill..

den måste kunna visa alla tomma stjärnor när ingen röstat.

Medlem sedan jan. 20032 285 inlägg
#16

OK, då lägger vi till en If-sats.

Sub WriteStars(intBetyg)
  If intBetyg > 0 Then
    If Int(intBetyg) < intBetyg Then
      sngBetygOver = CSng(intBetyg - Int(intBetyg))

      If sngBetygOver < 0.3 Then
        intStars = Int(intBetyg)
      ElseIf sngBetygOver => 0.3 AND sngBetygOver < 0.8 Then
        intStars = Int(intBetyg) + 0.5
      ElseIf sngBetygOver => 0.8 Then
        intStars = Int(intBetyg) + 1
      End If
    Else
      intStars = Int(intBetyg)
    End If

    If Int(intStars) < intStars Then
      intStarsOver = intStars - Int(intStars)

      If Int(intStars) > 0 Then
        For i = 1 To intStars
          Response.Write("<img src=""hel.gif"">")
        Next
      End If

      Response.Write("<img src=""halv.gif"">")
      intTomma = 5 - (Int(intStars) + 1)
    Else
      If intStars > 0 Then
        For i = 1 To intStars
          Response.Write("<img src=""hel.gif"">")
        Next
      End If

      intTomma = 5 - intStars
    End If

    If intTomma > 0 Then
      For j = intTomma To 1 Step - 1
        Response.Write("<img src=""tom.gif"">")
      Next
    End If
  Else
    For i = 1 To 5
      Response.Write("<img src=""tom.gif"">")
    Next
  End If
End Sub
Medlem sedan aug. 20011 087 inlägg
#17

har nu insett att funktionen buggar ur totalt när man kör den i en loop, för d första så fungerar inte loopen som den skall och om om värdet är annat än 5 så funkar sidan inte alls utan bara laddar och laddar tills processen dllhost har sugit upp allt minne och datorn låser sig :D:D:D

Mer info om min kod finns här :
http://www.webforum.nu/showthread.php?s=&threadid=91117&forumid=22

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