JQuery & PHP - Как отобразить и получить среднюю оценку и количество отданных голосов? - PullRequest
0 голосов
/ 05 января 2010

Я пытаюсь показать среднюю оценку и сколько голосов было отдано, но я действительно не знаю, как это сделать.

Мне нужна помощь, чтобы отобразить что-то вроде этого Rating. 4.83/5 (6725 vote cast) под звездным рейтингом? Но я действительно не знаю, как это сделать или что добавить или изменить?

Вот код JavaScript ниже.

// JavaScript Document
$(document).ready(function() {
    // get current rating
    getRating();
    // get rating function
    function getRating(){
        $.ajax({
            type: "GET",
            url: "update.php",
            data: "do=getrate",
            cache: false,
            async: false,
            success: function(result) {
                // apply star rating to element
                $("#current-rating").css({ width: "" + result + "%" });
            },
            error: function(result) {
                alert("some error occured, please try again later");
            }
        });
    }

    // link handler
    $('#ratelinks li a').click(function(){
        $.ajax({
            type: "GET",
            url: "update.php",
            data: "rating="+$(this).text()+"&do=rate",
            cache: false,
            async: false,
            success: function(result) {
                // remove #ratelinks element to prevent another rate
                $("#ratelinks").remove();
                // get rating after click
                getRating();
            },
            error: function(result) {
                alert("some error occured, please try again later");
            }
        });

    });
});


А вот скрипт php ниже.


<?php
// connect to database
$dbh=mysql_connect ("localhost", "root", "", "sitename") or die ('Cannot connect to the database');
mysql_select_db ("sitename",$dbh);

if($_GET['do']=='rate'){
    // do rate
    rate();
}else if($_GET['do']=='getrate'){
    // get rating
    getRating();
}

// function to retrieve
function getRating(){
    $sql= "select * from vote";
    $result=@mysql_query($sql);
    $rs=@mysql_fetch_array($result);
    // set width of star
    $rating = (@round($rs[value] / $rs[counter],1)) * 20; 
    echo $rating;
}

// function to insert rating
function rate(){
    $text = strip_tags($_GET['rating']);
    $update = "update vote set counter = counter + 1, value = value + ".$_GET['rating']."";

    $result = @mysql_query($update); 
    if(@mysql_affected_rows() == 0){
        $insert = "insert into vote (counter,value) values ('1','".$_GET['rating']."')";
        $result = @mysql_query($insert); 
    }
}
?>

Вот моя таблица MySQL.

CREATE TABLE IF NOT EXISTS `vote` (
`counter` int(8) NOT NULL default '0',
`value` int(8) NOT NULL default '0'
)

Ниже приведена разметка показа рейтинга.

<ul class='star-rating'>
  <li class="current-rating" id="current-rating"><!-- will show current rating --></li>
  <span id="ratelinks">
  <li><a href="javascript:void(0)" title="1 star out of 10" class="one-star">1</a></li>
  <li><a href="javascript:void(0)" title="2 stars out of 10" class="two-stars">2</a></li>
  <li><a href="javascript:void(0)" title="3 stars out of 10" class="three-stars">3</a></li>
  <li><a href="javascript:void(0)" title="4 stars out of 10" class="four-stars">4</a></li>
  <li><a href="javascript:void(0)" title="5 stars out of 10" class="five-stars">5</a></li>
  <li><a href="javascript:void(0)" title="6 stars out of 10" class="six-star">6</a></li>
  <li><a href="javascript:void(0)" title="7 stars out of 10" class="seven-stars">7</a></li>
  <li><a href="javascript:void(0)" title="8 stars out of 10" class="eight-stars">8</a></li>
  <li><a href="javascript:void(0)" title="9 stars out of 10" class="nine-stars">9</a></li>
  <li><a href="javascript:void(0)" title="10 stars out of 10" class="ten-stars">10</a></li>
  </span>
</ul>

1 Ответ

0 голосов
/ 05 января 2010

Вы не должны использовать синхронные запросы. Используйте обратный вызов для асинхронной обработки ответа. Кроме того, для хорошего метода, делающего оценку звезды, проверьте этот вопрос: Превратите число в отображение оценки звезды, используя jQuery и CSS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...