Crea en la BD
id | rating_id | rating_num | IP
y donde vayas a poner las estrellitas:
Código PHP:
<?php
//Query que retorna el numero de votos para un producto o servicio
$query_num_ratings = mysql_query("SELECT COUNT(*) as num FROM services_rating WHERE rating_id=".$row_services['service_id'], $conexion);
//Numero de votos de un producto o registro
$num_ratings = mysql_result($query_num_ratings, 0, "num");
//Query que retorna la suma, el total de votos de un producto o servicio
$query_sum_ratings = mysql_query("SELECT SUM(rating_num) as sum FROM services_rating WHERE rating_id=".$row_services['service_id'], $conexion);
//Si los votos son positivos
if(mysql_result($query_sum_ratings, 0, "sum") > 0)
//Guardamos la suma
$sum_ratings = mysql_result($query_sum_ratings, 0, "sum");
else
//La suma vale 0
$sum_ratings = 0;
$rating = 0;
//Si la suma de votos es mayor que 0
if ($num_ratings > 0) {
//Calculamos el número de estrellas a pintar
$rating = round($sum_ratings / $num_ratings);
}
?>
<div id="rating<?=$row_services['service_id']?>" data="<?=$row_services['service_id']?>">
<?php
//Por cada estrella
for ($i=1; $i<=5; $i++) {
//Si toca pintarla de verde
if ($i <= $rating)
//Mostramos estrella verde
echo '<div id="rating'.$row_services['service_id'].'_'.$i.'" data='.$i.'> </div>';
else
//Mostramos estrella gris
echo '<div id="rating'.$row_services['service_id'].'_'.$i.'" data='.$i.'> </div>';
}
?>
<div id="sumrating" data="<?=$sum_ratings?>" style="display:none"> </div>
<div id="numrating" data="<?=$num_ratings?>" style="display:none"> </div>
<div id="actual" data="<?=$rating?>" style="display:none;"> </div>
<div class="ok" style="display:none;"> </div>
</div>
y ya en el head
Código HTML:
<script type="text/javascript">
$(document).ready(function() {
$('.estrella').click(function(){
var parent = $(this).parent().attr('id');
var service = $(this).parent().attr('data');
var rating = $(this).attr('data');
var dataString = 'id='+service+'&rating='+rating;
$.ajax({
type: "POST",
url: "includes/addvote.php",
data: dataString,
success: function() {
var new_sum_rating = parseInt($('#'+parent+' #sumrating').attr('data')) + parseInt(rating);
var new_num_rating = parseInt($('#'+parent+' #numrating').attr('data')) + 1;
var new_rating = Math.round(new_sum_rating / new_num_rating);
for(i=1;i<=new_rating;i++){
$('#'+parent+'_'+i+' .estrella').removeClass("estrella");
$('#'+parent+'_'+i+' .estrella').addClass("selected");
}
$('#'+parent+' .ok').empty();
$('#'+parent+' #actual').empty();
$('#'+parent+' #actual').append('('+new_rating+'/5) basado en '+new_num_rating+' votos!').fadeIn("slow");
$('#'+parent+' .ok').append('Gracias por enviar tu voto!').fadeIn("slow");
$('#'+parent+' #actual').fadeOut(5000);
$('#'+parent+' .ok').fadeOut(5000);
}
});
});
$('.estrella').hover(function(){
var parent = $(this).parent().attr('id');
$('#'+parent+' .estrella').css('background-image', 'url(images/estrella-gris.png)');
for(i=1;i<=$(this).attr('data');i++){
$('#'+parent+'_'+i).css('background-image', 'url(images/estrella-verde.png)');
}
});
});
</script>
El archivo php que recibe los datos addvote.php simplemente hace un require de un archivo que conecta con la base de datos, recibe los datos mediante POST y los inserta en la tabla “rating_services” de la BD
Código PHP:
<?php
require('config.php');
$service = $_POST['id'];
$rating = $_POST['rating'];
$insert = mysql_query("INSERT INTO services_rating (rating_id, rating_num) VALUES ('$service', '$rating')", $conexion);
?>
No se si te servira de algo