【问题标题】:JQuery & PHP Star Rating simplified简化的 JQuery 和 PHP 星级评定
【发布时间】:2012-04-16 11:44:22
【问题描述】:

编辑:有问题的插件位于here

PHP 初学者在这里使用 JQuery Star Rating sn-p 并使其完美运行。我的问题是它当前被配置为计算和显示许多评级的平均值(对于公共应用程序)。我正在尝试简化插件,以便它允许设置个人评级(就像在 iTunes 中对自己的歌曲进行评级一样)。用户可以更新他们的评级,但永远不会存在部分星。我已经多次破坏插件试图让它工作,但无济于事。 mysql数据库存在如下:

CREATE TABLE IF NOT EXISTS `pd_total_vote` (
  `id` int(11) NOT NULL auto_increment,
  `desc` varchar(50) NOT NULL,
  `counter` int(8) NOT NULL default '0',
  `value` int(8) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

如果我可以让它按照我想象的方式工作,我就不需要 countervalue 列,只需一个包含 1 到 5 之间的值的单个 INT 列。目前 counter 累积票数,而value 汇总收视率。然后使用(值/计数器)*20(百分比)显示星星。 PHP如下(原文):

<?php

// connect to database

$dbh=mysql_connect ("localhost", "user", "pass") or die ('Cannot connect to the database');
mysql_select_db ("thenally_pd",$dbh);

if($_GET['do']=='rate'){
    rate($_GET['id']);
}else if($_GET['do']=='getrate'){

    // get rating

    getRating($_GET['id']);
}

// get data from table

function fetchStar(){
    $sql = "select * from `pd_total_vote`";
    $result=@mysql_query($sql);
    while($rs = @mysql_fetch_array($result,MYSQL_ASSOC)){
        $arr_data[] = $rs;
    }
    return $arr_data;
}

// function to retrieve

function getRating($id){
    $sql= "select * from `pd_total_vote` where id='".$id."' ";
    $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 set rating

function rate($id){
    $text = strip_tags($_GET['rating']);
    $update = "update `pd_total_vote` set counter = counter + 1, value = value + ".$_GET['rating']."  where id='".$id."' ";
    $result = @mysql_query($update);
}

?>

感谢您指出正确的方向,

迈克

【问题讨论】:

    标签: php jquery mysql rating-system


    【解决方案1】:

    我不确定,因为我无法访问您正在使用的评级系统,但只是瞥了一眼您所拥有的,我想您可以将计数器设置为 1(如果删除它会破坏 jQuery 评级系统)并更新值由这个人,所以当你取它时,他们只会看到他们的价值(确保价值不能超过 5)。这样,如果该值设置为 5,那么它将显示 5,因为它没有找到其他评级....(根据我的理解)您还必须添加一个用户 ID,以便您知道要获取哪些人的评级(因为你想要它是个人的)。这取决于应用程序对特定数据库设计的依赖性。

    【讨论】:

    • 这是个好主意。我会尝试一下,并会尽快回复您。感谢您的输入。我已经编辑了 OP 以显示插件的链接。
    • 我想通了!谢谢,@Kyra。设置 counter=1 仍然允许值增加,产生倾斜的结果。最终的工作是在最后更改“设置评级的功能”中的 $update 。工作行如下所示:$update = "UPDATE 'pd_total_vote' SET counter = 1, value = ".$_GET['rating']." WHERE id='".$id."' "; Counter 始终等于 1,并使其不会将每个新值添加到先前的值中。我意识到这仍然是一个半修复,但它现在就可以了。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多