Home arrow ASP arrow Page 4 - An Article Rating System With ASP

An Article Rating System With ASP

A rating system is a great way to get feedback from your site's visitors. In this article Annette shows us how to create a rating system with ASP and Microsoft Access.

Author Info:
By: Annette Tennison
Rating: 4 stars4 stars4 stars4 stars4 stars / 658
January 02, 2003
  1. · An Article Rating System With ASP
  2. · Creating the database
  3. · Rate.asp
  4. · Showing the ratings
  5. · Conclusion

print this article

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)


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]"

'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
decCalc = 0
end if

finalRating = CInt(avgWhole) + CCur(decCalc)

finalRating = avgRating
end if
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'>"

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'>"
for i = CInt(finalRating)+1 to 10
Response.Write "<img alt='" & altText & "' src='rating_off.gif'>"
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:

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.
blog comments powered by Disqus

- 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...

Watch our Tech Videos 
Dev Articles Forums 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us 
Weekly Newsletter
Developer Updates  
Free Website Content 
Contact Us 
Site Map 
Privacy Policy 

Developer Shed Affiliates


© 2003-2019 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap
Popular Web Development Topics
All Web Development Tutorials