Sistema de puntuación y encuesta
Hola a todos!!!
Estoy creando un CMS mediante PHP y MySQL en el cual me gustaría incluir una aplicación que funcionara de la siguiente manera:
- un usuario puede subir un contenido a la web y el resto de usuarios pueden votar mediante una encuesta.
- cada opción de la encuesta tiene un valor numérico.
- en función de la votación, al usuario se le incluiran en su "cuenta" los puntos que los usuarios le vayan dando.
Para que quede mas claro pongo un ejemplo:
Un usuario publica una historia y al final hay una encuesta tal como "¿que puntuación le das a la historia?" y con las opciones "5, 4, 3, 2, 1".
Pues bien, si un visitante le ha dado 5 puntos pues se le han de sumar 5 a los que ya tenia anteriormente, y así sucesivamente, siempre controlando que un usuario no puede votarse a si mismo ni que otros usuarios lo pueden hacer varias veces.
¿conoceis algun sitio donde puedo encontrar una aplicación similar o alguien me puede dar una idea de como debo montar esta aplicación?
Muchas gracias de antemano!!
FR_xx
no lo he copiado de ningun sitio...
gracias por la ayuda, me lo seguiré mirando a ver si lo saco.
Un saludo!
Cloudstudio
Te aconsejo que aprendas bien php, antes de pretender hacer cosas complicadas, ese código tiene demasiadas lagunas, copiar y pegar no sirve :P
FR_xx
Bueno, despues de un tiempo he aprendido un poco mas de php y he avanzado con el sistema. Las votaciones ya han salido perfectas y se graban los puntos en el usuario.
Ahora con lo que me encuentro es con otro problema. Quiero que cuando se llegue a cierto número de puntos se suba el nivel del usuario. He creado una funcion donde los puntos para pasar de nivel se incrementan mediante una fórmula, de manera que cada vez que se quiera subir de nivel cueste mas conseguirlo.
Pues bien, no hay manera de que acabe de funcionarme correctamente, ya que me sube de nivel cada vez que refresco la página, por ejemplo. Os pongo aqui el codigo a ver si veis donde puede estar el error:
//conectamos con la base de datos
include ("inc/conectardb.php");
$id = $_SESSION['id'];
$nick = $_SESSION['nick'];
$result = mysql_query("SELECT * FROM usuarios WHERE id=$id");
$row = mysql_fetch_assoc($result);
$avatar = $row['avatar'];
$rango = $row['rango'];
$faccion = $row['faccion'];
$planeta = $row['planeta'];
$nivel_actual = $row['nivel'];
$result2 = mysql_query("SELECT SUM(puntos) as total FROM tutoriales WHERE autorFK='$id'");
$row2 = mysql_fetch_array($result2);
$num_puntos = $row2['total'];
if ($nivel_actual == 0 && $num_puntos < 50)
{
$puntos_total_nivel = 50;
}
else
{
$puntos_total_nivel_actual = $nivel_actual*($nivel_actual/2)*100;
$nivel_ant = $nivel_actual - 1;
$puntos_total_nivel_ant = $nivel_ant*($nivel_ant/2)*100;
if($num_puntos>=$puntos_total_nivel_actual)
{
$nivel_nuevo = $nivel_actual+1;
$puntos_total_nivel = $nivel_nuevo*($nivel_nuevo/2)*100;
$res = "UPDATE usuarios SET nivel=$nivel_nuevo WHERE id=$id";
$sql = mysql_query($res);
}
elseif($num_puntos<$puntos_total_nivel_ant)
{
$nivel_nuevo = $nivel_ant;
$puntos_total_nivel = $nivel_nuevo*($nivel_nuevo/2)*100;
$res = "UPDATE usuarios SET nivel=$nivel_nuevo WHERE id=$id";
$sql = mysql_query($res);
}
}
$ancho_div = number_format($num_puntos/$puntos_total_nivel*152, 1);
$sql = "SELECT SUM(valor1) AS valor1_or, SUM(valor2) AS valor2_or, SUM(valor3) AS valor3_or FROM tutoriales WHERE autorFK = '$id'";
//echo $sql;
$result3 = mysql_query($sql);
$row3 = mysql_fetch_assoc($result3);
$valor1 = $row3['valor1_or'];
$valor2 = $row3['valor2_or'];
$valor3 = $row3['valor3_or'];
echo "
<div id='panel_editor'>
<div id='panel'>
<div id='panel_avatar'><img src='$avatar' width='80' height='80'></div>
<div id='panel_level'>".$row['nivel']."</div>
<div id='panel_nick'>
".strtoupper($_SESSION['nick'])."<br>
$planeta<br>";
if ($rango==1)
{
echo "Admin";
}
else
{
echo "Editor";
}
echo "<br>
$faccion
</div>
<div id='panel_logout'>
<a href='index.php?page=logout' title='logout' id='logout'>
<span>Logout</span>
</a>
</div>
<div id='panel_items'>
<div>$valor1</div><div>$valor2</div><div>$valor3</div>
</div>
<div id='panel_perfil'>
<a href='index.php?page=../editor/perfil&id=$id' id='perfil'>
<span>Perfil</span>
</a>
</div>
<div id='panel_tutoriales'>
<a href='index.php?page=../editor/tutoriales&id=$id' id='tutoriales'>
<span>Tutoriales</span>
</a>
</div>
<div id='panel_estadisticas'>
<a href='index.php?page=../editor/estadisticas&id=$id' id='estadisticas'>
<span>Estadisticas</span>
</a>
</div>
<div id='panel_mensajes'>
<a href='index.php?page=../editor/leer_privados&id=$id' id='privados'>
<span>Mensajes Privados</span>
</a>
</div>
<div id='panel_barra' style='text-align:center; width:";
echo $ancho_div;
echo "px'> $num_puntos/$puntos_total_nivel
</div>
</div>
</div>";
Es un poco largo pero asi no obvio informacion que alomejor es importante.
Muchas gracias!!!
Cloudstudio
No conozco nada similar, pero hacerlo es muy muy facil, simplemente montas un checkbox de 5 posiciones, asignandole los 5 numeros.
Puedes recojer por post lo que envias en la propia pagina, sin complicarte.
$recojo = $_POST['Datos'];
Una vez lo tienes recojido tienes que hacer un update en la BD, en este caso ,en tu base de datos, donde tienes los "cuentos" tendrias que crear una columna nueva "puntuación".
Como anteriormente hemos recogido los datos por POST, ahora simplemente tienes que hacer una consulta SQL nueva
$sql = "UPDATE nombre_tabla SET puntuacion=$recojo";
Y ahora ya puedes montartelo para mostrar los puntos haciendo un query simple.
En cuanto a lo de no mas de 2 votaciones por usuario, ya puedes trabajar un poco mas con ips, o con sesiones.