Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/12/2005, 02:59
Avatar de 3pies
3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 21 años, 5 meses
Puntos: 144
Yo lo tengo implementado en un sitio que estoy acabando (de uso presonal), donde hago lo siguiente:

Al pie del artículo, creas un formulario, con un submit, que sirve para votar. Cuando se pulsa el botoncillo, se recarga la misma página de ese artículo en cuestión (hay un select para mostrar los puntos que el usuario le concede al artículo). Una vez recargada la página, ya no aparece el formulario ni por supuesto el botón de valorar el artículo (usa un condicional, si se ha creado la sesión para ese artículo -de la que te hablo más abajo-, para que no muestre el form).

En la base de datos, tengo 2 campos: uno llamado votos y otro llamado vecesvotado (ambos numéricos). Cada vez que un usuario pincha en un botón de votar, se suma un hit en el campo vecesvotado, y se suman los puntos (votos) que el usuario ha concedido a ese artículo (de 1 a 5, como tú quieres hacerlo). Luego creo una sesión para ese artículo/usuario (en función de la id del artículo), para que no pueda votarlo durante su actual visita (no me importa que lo voten en visitas posteriores, aunque si quieres evitar eso, podrías hacerlo con cookies, o mejor aún grabando su ip, para evitar posibles votaciones en días posteriores de esa misma ip, ...teniendo en cuenta los problemas que puedes tener, al existir ip's variables).

Ejemplo: un usuario le da al art. 1, un voto con 3 puntos. Otro usuario le da a ese mismo artículo otro voto con 5 puntos. Resumen: 2 (1+1) votos recibidos. Puntuación: 8 puntos (3 + 5). Con lo cual el artículo tiene una valoración media de 4 puntos (8/2). Es decir, la media la obtienes de esos dos campos: votos/vecesvotado. Si para mostrar la media, usas la función CInt, tendrás que arreglar el valor mostrado, porque te puedes encontrar con esto (sacado de la ayuda de Microsoft): "CInt difiere de las funciones Fix e Int, que truncan, más que redondean, la parte fraccional de un número. Cuando la parte fraccional es exactamente 0,5 la función CInt la redondea siempre al número par más cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 se redondea a 2."

Editado: Para mostrar las estrellas, te puedes crear 5 gifs (uno con una estrella, otro con 2, ...hasta 5), llamados por ejemplo estrella1.gif, estrella2.gif, ...estrella5.gif. En lugar de presentar la media como un número (en el ejemplo era 4), la muestras así:
Código:
<%
votos = rs("votos")
vecesvotado = rs("vecesvotado")
media = CInt(votos/vecesvotado) 'aquí no hago el arreglo del que te hablaba, por ser más breve
%>
Valoraci&oacute;n media: <img src="imagenes/estrella<%=media%>.gif" alt="" width="20" height="10">
SalU2

Última edición por 3pies; 13/12/2005 a las 05:18