Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407

    Sistema di valutazione (rating)

    Ciao a tutti.

    Faccio riferimento al seguente articolo web per l'implementazione di un sistema di rating in pagine ASP:

    http://www.devarticles.com/c/a/ASP/A...stem-With-ASP/

    Sono riuscito a personalizzarlo alle mie esigenze, adattandolo a un DB MySQL e utilizzando un'unica tabella, ma non riesco a capire perchè quando visualizzo per ciascun record il proprio rating, succede che il record seguente a quello che ha un rating ( quindi è stato valutato dai visitatori ) assuma come rating quello del record che lo precede.

    Ad esempio:

    - Ho un record con rating 1 lo estraggo e quello immediatamente successivo anche se non ha nessuna valutazione, assume anche lui valore 1.

    La estrazione è eseguita randomicamente con la sintassi BY RAND() prevista da MySQL.

    Credo che il problema sia da individuare in questa porzione di codice che è quella che assegna le "stelline" a secondo del rating, ma non riesco a capire dove sia l'errore:

    codice:
    <%
    
    if Instr(1, CStr(avgRating), ".") > 0 then 
    
    avgWhole = Left(CStr(avgRating), Instr(1, CStr(avgRating), ".")-1) 
    decPart = Mid(CStr(avgRating), Instr(1, CStr(avgRating), ".")+1, 2) 
    
    if decPart <> "" then 
    
    if CInt(decPart) >= 5 then 
    decCalc = .5 
    else 
    decCalc = 0 
    end if 
    
    finalRating = CInt(avgWhole) + CCur(decCalc) 
    
    else 
       finalRating = avgRating 
    end if
    
    else 
       finalRating = avgRating 
    end if 
    
    for i = 1 to CInt(finalRating) 
    response.write "AAA"
    Response.Write "[img]../news/starimages/star.gif[/img]" 
    
    next 
    
    if CInt(finalRating) <> finalRating then 
    response.write "BBB"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    
    for i = CInt(finalRating)+2 to 8 
    response.write "CCC"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    
    next 
    else 
    for i = CInt(finalRating)+1 to 8
    response.write "DDD"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    
    next 
    end if 
    
    if CInt(finalRating) <> finalRating then 
    response.write "EEE"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    end if
    
    %>
    Grazie a tutti !

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    I valori calcolati all'interno del ciclo li devi azzerare.

    Roby

  3. #3
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da Roby_72
    I valori calcolati all'interno del ciclo li devi azzerare.

    Roby
    Scusami non ho capito cosa vuoi dire...

  4. #4
    Utente di HTML.it L'avatar di EmTmE
    Registrato dal
    Jun 2001
    Messaggi
    333
    Originariamente inviato da ubbicom
    Scusami non ho capito cosa vuoi dire...
    devi aggiungere nel ciclo un stelline = 0
    in modo che dopo aver letto il valore del voto per il record trovato (votato) rimetta a zero le stelline del voto

    perdonami se non ti dico dove nel tuo codice ma io e il codice non siamo grandi amici
    riesco a capire qualcosa nel mio (e non sempre) ma in quello altrui non mi permetto di metter le mani.

  5. #5
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Se intendete questo, il risultato non cambia:

    codice:
    <%
    
    if Instr(1, CStr(avgRating), ".") > 0 then 
    
    avgWhole = Left(CStr(avgRating), Instr(1, CStr(avgRating), ".")-1) 
    decPart = Mid(CStr(avgRating), Instr(1, CStr(avgRating), ".")+1, 2) 
    
    if decPart <> "" then 
    
    if CInt(decPart) >= 5 then 
    decCalc = .5 
    else 
    decCalc = 0 
    end if 
    
    finalRating = CInt(avgWhole) + CCur(decCalc) 
    
    else 
       finalRating = avgRating 
    end if
    
    else 
       finalRating = avgRating 
    end if 
    
    for i = 1 to CInt(finalRating)
    
    finalRating = 0 
    
    response.write "AAA"
    Response.Write "[img]../news/starimages/star.gif[/img]" 
    
    next 
    
    if CInt(finalRating) <> finalRating then 
    response.write "BBB"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    
    for i = CInt(finalRating)+2 to 8 
    
    finalRating = 0 
    
    response.write "CCC"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    
    next 
    else 
    for i = CInt(finalRating)+1 to 8
    
    finalRating = 0 
    
    response.write "DDD"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    
    next 
    end if 
    
    if CInt(finalRating) <> finalRating then 
    response.write "EEE"
    Response.Write "[img]../news/starimages/rating_star_blank.png[/img]" 
    end if
    
    %>

  6. #6
    Utente di HTML.it L'avatar di EmTmE
    Registrato dal
    Jun 2001
    Messaggi
    333
    come detto non metto mano al codice che altrimenti faccio + danni che altro
    io ho fatto qualcosa di simile per valutazione news.
    facevo i vari controlli con una select case e quando trovavo la condizione verificata stampavo a video le stelline del caso e resettavo la variabile e andavo al record successivo.

  7. #7
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da EmTmE
    come detto non metto mano al codice che altrimenti faccio + danni che altro
    io ho fatto qualcosa di simile per valutazione news.
    facevo i vari controlli con una select case e quando trovavo la condizione verificata stampavo a video le stelline del caso e resettavo la variabile e andavo al record successivo.
    Boh !!!

  8. #8
    allora aspetta vediamo di ragionare.
    Dal tuo codice non riesco a capire bene cosa devi fare ma ti posto quello che farei io:
    Per visualizzare il voto intero e un arrotondamendo per difetto del voto non intero:
    Per come ho capito io avgrating è la var che contiene il voto preso dal db quindi farei:
    codice:
    <%
    voto=split(avgrating,".")
    for i=1 to voto(1) then
    	'per visualizzare il voto intero
      response.write"[img]../news/starimages/star.gif[/img]"
    next
    if voto(2)>5 then
      'per visualizzare un punteggio tipo 1,5 2,5 3,5 ecc..
      response.write"[img]../news/starimages/mezza_star.gif[/img]"
    end if
    %>
    voto(1)=voto intero
    voto(2)=parte decimale
    quindi se il voto è 1.5
    voto(1)=1
    voto(2)=5
    ...Se avanzo seguitemi... Se indietreggio uccidetemi...
    BiteFight... arruolati con me e non te ne pentirai

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.