ASP
  Home arrow ASP arrow Page 4 - An Article Rating System With ASP
Dev Articles Forums 
ADO.NET  
Apache  
ASP  
ASP.NET  
C#  
C++  
ColdFusion  
COM/COM+  
Delphi-Kylix  
Design Usability  
Development Cycles  
DHTML  
Embedded Tools  
Flash  
Graphic Design  
HTML  
IIS  
Interviews  
Java  
JavaScript  
MySQL  
Oracle  
Photoshop  
PHP  
Reviews  
Ruby-on-Rails  
SQL  
SQL Server  
Style Sheets  
VB.Net  
Visual Basic  
Web Authoring  
Web Services  
Web Standards  
XML  
Mobile Linux 
App Generation ROI 
IBM® developerWorks 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
ASP

An Article Rating System With ASP
By: Annette Tennison
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 4 stars4 stars4 stars4 stars4 stars / 510
    2003-01-02

    Table of Contents:
  • An Article Rating System With ASP
  • Creating the database
  • Rate.asp
  • Showing the ratings
  • Conclusion

  • Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    An Article Rating System With ASP - Showing the ratings


    (Page 4 of 5 )

    Let's assume that several visitors have rated our CD's. We might have 20 different ratings for each CD in the ratings table. If we have a cumulative rating total of 176 and 20 ratings for the first CD in the database, then we would work out the average rating like this:

    Average Rating = Cumulative Rating Total / Number Of Ratings

    ... so the average rating for the first CD would be

    Average Rating = 176 / 20 = 8.8

    We want to round the ratings to the closet half number, so 8.8 would be rounded down to 8.5. We will be using ASP to work out the ratings shortly. Before we move on we need to edit showcds.asp. To display the ratings, we will be creating a new function called ShowRating at the end of the showcds.asp file. ShowRating will return the HTML code to display the rating for each CD in a graphical format.

    Let's take a look at the ShowRating function:

    function ShowRating(cdId)

    const MIN_RATINGS_BEFORE_SHOW = 3

    dim rs1
    dim avgRating
    dim avgWhole
    dim decPart
    dim decCalc
    dim finalRating
    dim altText


    First off we dimension the required variables and setup a constant variable called MIN_RATINGS_BEFORE_SHOW. This constant is used to determine how many ratings should exist in the ratings table before they are shown. For example, the default is 3, meaning that there must be at least 3 ratings in the ratings table before an average is worked out and displayed. This helps to stop visitor bias, etc.

    We use a SELECT query to grab the sum of all ratings for the selected CD as well as the number of ratings using the COUNT function. If there are the same or more amount of ratings than MIN_RATINGS_BEFORE_SHOW then we workout the average rating and store it as the avgRating variable. If not, we display the text "[CD not rated yet]":

    set rs1 = Server.CreateObject("ADODB.Recordset")

    rs1.ActiveConnection = conn
    rs1.Open "SELECT SUM(rating), COUNT(*) FROM ratings WHERE cdId = " & cdId

    if rs1.Fields(1) < MIN_RATINGS_BEFORE_SHOW then
    'No ratings for this CD just yet
    Response.Write "[CD not rated yet]"
    else

    'This CD has ratings, let's display the average
    avgRating = rs1.Fields(0).Value / rs1.Fields(1).Value


    We need to determine the value of avgRating and whether or not it is a rating like 5 or a rating like 5.56666. If it's the latter, then we need to perform some rounding on the average rating. We workout the rounding like this:

    • If the decimal part of the rating is between .0 and .49 then it's rounded down to zero, so the resultant rating would be something like 5.0, 8.0, etc.
    • If the decimal part of the rating is between .5 and .99 then it's rounded down to .5, so the resultant rating would be something like 5.5, 8.5, etc.
    Here's the code that handles the rounding of the average rating:

    if Instr(1, CStr(avgRating), ".") > 0 then

    'The average rating is a decimal, we need to either
    'round the value up/down

    avgWhole = Left(CStr(avgRating), Instr(1, CStr(avgRating), ".")-1)
    decPart = Mid(CStr(avgRating), Instr(1, CStr(avgRating), ".")+1, 2)

    if decPart <> "" then
    'Work out whether or not we have to round this
    'rating up or down

    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


    This leaves us with the finalRating variable, which will be something like 5, 6.5, etc. The only value after the decimal place will be .5.

    We are going to be display the average rating as a series of images. For each positive rating point (for example, 5.5 has 5 positive points) we display one image. For each half point we display another, and for each negative point (for example 7 out of 10 has 3 negative points) another.

    The images that we will use are called rating_on.gif, rating_half.gif, and rating_off.gif. They are contained within the support material for this article.

    Before displaying the rating, we work out the text that will be set as the alt attribute for each image, meaning that we can move the mouse over the rating images to see the actual rating:

    'Setup the alt text for the images
    altText = "Average visitor rating of " & finalRating & " out of 10"

    for i = 1 to CInt(finalRating)
    Response.Write "<img alt='" & altText & "' src='rating_on.gif'>"
    next

    if CInt(finalRating) <> finalRating then
    'This article has a .5 rating, such as 5.5
    Response.Write "<img alt='" & altText & "' src='rating_half.gif'>"

    for i = CInt(finalRating)+2 to 10
    Response.Write "<img alt='" & altText & "' src='rating_off.gif'>"
    next
    else
    for i = CInt(finalRating)+1 to 10
    Response.Write "<img alt='" & altText & "' src='rating_off.gif'>"
    next
    end if


    As you can see, we have three different loops: one to display the positive points, one to display the half point (if any), and one to display the negative points (if any). To determine whether or not this CD has a half point, we compare the integer value of the average rating to its normal value:

    if CInt(finalRating) <> finalRating then
    'This article has a .5 rating, such as 5.5
    Response.Write "<img alt='" & altText & "' src='rating_half.gif'>"


    So for example, if we had an average rating of 7.5 then we would compare the integer value of 7 to 7.5. They are different, and therefore there is a half point in this average rating.

    Now that we've seen the ShowRating function, we simply place a call to it under where the title of each CD is dplsayed:

    <h2><%=rs.Fields(1).Value%></h2>
    Rated: <%=ShowRating(rs.Fields(0).Value)%><br><br>


    After rating each article numerous times, here's how the showcds.asp page looks:

    Showcds.asp with the ShowRating function

    As you can see, it works in exactly the same way that the rating system does on devArticles.com.

    More ASP Articles
    More By Annette Tennison


     

    ASP ARTICLES

    - Central Scoreboard with Flash and ASP
    - Calorie Counter Using WAP and ASP
    - Creating PGP-Encrypted E-Mails Using ASP
    - Be My Guest in ASP
    - Session Replacement in ASP
    - Securing ASP Data Access Credentials Using t...
    - The Not So Ordinary Address Book
    - Adding and Displaying Data Easily via ASP an...
    - Sending Email From a Form in ASP
    - Adding Member Services in ASP
    - Removing Unconfirmed Members
    - Trapping HTTP 500.100 - Internal Server Error
    - So Many Rows, So Little Time! - Case Study
    - XDO: An XML Engine Class for Classic ASP
    - Credit Card Fraud Prevention Using ASP and C...







    © 2003-2009 by Developer Shed. All rights reserved. DS Cluster 2 Hosted by Hostway
    For more Enterprise Application Development news, visit eWeek