+ -
当前位置:首页 → 问答吧 → php+jquery 星级评分程序, js,让php更精彩一点

php+jquery 星级评分程序, js,让php更精彩一点

时间:2010-07-16

来源:互联网



下载 (49.41 KB)
前天 18:59


经常一些影视站,游戏等等下载站,都会让用户对某个资源进行评分,酷炫的评分效果,会给网站带来额外意想不到的收获。

图片资源来自SOSO,大家也可以参考腾讯写的JQ,但你搞不懂他的思想,看起来会比较稍微那么一点不舒服。

接下来,开始献丑小弟自己的了,把自己刚写的一个评分小例子搬上来给大家借鉴一下。

首先 HTML :
  1. <li>游戏评分:
  2. <div>
  3. 总评分:<span id="showpf"><script type="text/javascript" src="www.xxx.com/showinfo.php?action=pingfen&gid=<?=$arcid?>&pdid=1"></script></span>
  4. <p id="rate_span"></p>
  5. <div id="pfnum">
  6. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="1分,点击进行评分!" />
  7. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="2分,点击进行评分!" />
  8. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="3分,点击进行评分!" />
  9. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="4分,点击进行评分!" />
  10. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="5分,点击进行评分!" />
  11. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="6分,点击进行评分!" />
  12. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="7分,点击进行评分!" />
  13. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="8分,点击进行评分!" />
  14. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="9分,点击进行评分!" />
  15. <img src="http://inncache.soso.com/xsoso/images/empty_star.gif" width="28" title="<?=$arcid?>" height="28" class="ratestar_img" alt="10分,点击进行评分!" />
  16. </div>
  17. <span style="font-size:36px;" id="bigrate_span"><script type="text/javascript" src="www.xxx.com/showinfo.php?action=pingfen&gid=<?=$arcid?>&pdid=1"></script></span>
  18. </div>
  19. </li>
复制代码


HTML 注释:
<?=$arcid?> 文章ID
pdid=1 这个大家不用管,这是我区分游戏,软件,和新闻加的一个频道ID
showinfo.php 显示当前评分 这个就不搬出来了,就是查询出你数据库现在这个游戏的评分,至于数据库呆会另外一个文件会详细讲解,请继续往下看。


现在开始上JQ了:
  1. $(function(){

  2. //目前评分状况
  3. var spoint = parseInt($("#showpf").text());
  4. var avarankstr = '';
  5. if(spoint <= 4){
  6. avarankstr="(垃圾中的战斗机)";
  7. }else if(spoint <= 7){
  8. avarankstr="(凑合着过日子吧,可以试试)";
  9. }else if(spoint <= 9){
  10. avarankstr="(很好,强烈推荐)";
  11. }else{
  12. avarankstr="(非常完美,绝世佳作)";
  13. }
  14. //显示根据评分得出的中文描述
  15. $("#rate_span").html(avarankstr);

  16. //循环出目前的星级
  17. $("#pfnum img").each(function(i){
  18. if(i <= spoint-1){
  19. $(this).attr("src","http://inncache.soso.com/xsoso/images/newxw/full_star.gif");
  20. }
  21. //缓存一个星星数据,添加鼠标经过和离开动作,鼠标离开则还原到原有评分星级
  22. $(this).data("point",(i+1));
  23. $(this).hover(function(){
  24. var point=$(this).data("point");
  25. $.fn.drawpoint(point);
  26. $("#bigrate_span").html(point);
  27. },function(){
  28. $.fn.drawpoint(spoint);
  29. $("#bigrate_span").html(spoint);
  30. $("#rate_span").html(avarankstr);
  31. });
  32. });

  33. //点击进行评分
  34. $("#pfnum img").click(function(){
  35. var indexpf = $(this).index()+1;
  36. var gid = $(this).attr("title");

  37. //这个地方大家注意下,因为我之前是要跨域,所以用了getJSON,如果没跨域的话就直接 .get 就可以了。
  38. $.getJSON('http://m.bbb.com/countdown.php?action=pingfen&pdid=1&field_id='+gid+'&pf='+indexpf+'&callback=?',function(data){
  39. if(data.pf=='a'){
  40. alert("这个游戏你已经评分过了");
  41. }else if(data.pf=='b'){
  42. alert("五分钟内只允许评分一次");
  43. }else if(data.pf=='c'){
  44. alert("网络发生未知错误,请稍后再试");
  45. }else{
  46. $("#showpf").text(data.pf);
  47. spoint = data.pf;  
  48. $.fn.drawpoint(data.pf);
  49. alert("您成功的评分了一个游戏");
  50. alert(data.pf);
  51. }
  52. });
  53. });

  54. //星级处理方法
  55. $.fn.drawpoint=function(point){
  56. if(point <= 4){
  57. avarankstr="(垃圾中的战斗机)";
  58. }else if(point <= 7){
  59. avarankstr="(凑合着过日子吧,可以试试)";
  60. }else if(point <= 9){
  61. avarankstr="(很好,强烈推荐)";
  62. }else{
  63. avarankstr="(非常完美,绝世佳作)";
  64. }
  65. $("#rate_span").html(avarankstr);

  66. $("#pfnum img").each(function(i){
  67. if(i <= point-1){
  68. $(this).attr("src","http://inncache.soso.com/xsoso/images/newxw/full_star.gif");
  69. }else{
  70. $(this).attr("src","http://inncache.soso.com/xsoso/images/newxw/empty_star.gif");
  71. }
  72. });
  73. }
  74. });
复制代码



最后PHP处理文件
  1. //统计评分
  2. function countpf($field_id,$pdid,$pf){
  3. global $db;
  4. $field_id = intval($field_id);
  5. $pdid = intval($pdid);
  6. $pf = intval($pf);
  7. $tableName = 'otherinfo';
  8. $rs = $db->query("select * from $tableName where gid=$field_id and pdid=$pdid");
  9. //如果之前没有评分过, !rs也可以
  10. if($db->num_rows($rs) < 1){
  11. $db->query("insert into $tableName values(NULL,$field_id,$pdid,0,0,0,$pf,1,0)");
  12. $r_pf = $pf;
  13. }
  14. //否则重新计算
  15. else{
  16. $result = $db->fetch_array($rs);
  17. $pfnum = $result['pfnum']; //评分人数
  18. $pfnum++;
  19. $pf = $pf+$result['pf']; //相加之前的评分
  20. $r_pf = ceil($pf/$pfnum); //去整,小数点评分没弄,大家可以自己弄弄
  21. $db->query("update $tableName set pf=$pf,pfnum=$pfnum where id=$result[id]");
  22. }
  23. return $r_pf; //返回现在评分
  24. }

  25. if($_GET['action'] == 'pingfen' && $_GET['field_id'] && $_GET['pdid'] && $_GET['pf'] && isset($_REQUEST['callback'])){

  26. //获取用户IP和文章ID,方法自己找一个。
  27. $cookiestr = get_onlineip().$_GET['field_id'];

  28. //这个文章是否已经被评过
  29. if(isset($_COOKIE['pfperson']) && $_COOKIE['pfperson']==$cookiestr){
  30. $str = 'a';
  31. }
  32. //防止恶意评分,每五分钟才可以评一次
  33. elseif(isset($_COOKIE['pftime']) && (time()-intval($_COOKIE['pftime']) <= 300)){
  34. $str = 'b';
  35. }else{
  36. //设置COOKIE
  37. set_cookie("pfperson",$cookiestr,time()+3600*365);
  38. set_cookie("pftime",time(),time()+3600*365);
  39. //处理评分
  40. $str = countpf($_GET['field_id'],$_GET['pdid'],$_GET['pf']);
  41. }

  42. //如果没跨域的话,直接 echo $str, 不用输出JSON格式
  43. $callback = $_REQUEST['callback'];
  44. $arr = array('pf' => $str);
  45. $json = json_encode($arr);
  46. $json = $callback . '(' . $json . ')';
  47. echo $json;
  48. }else{
  49. exit;
  50. }
复制代码


数据库: id,pdid, gid, pf, pfnum  全部int型。
附件我就不整理了,大家复制一下吧。
JQ版本 1.4
PHP 5.2.6  


就这么多了,看不明白的可以回帖留言,懂了的,可以自己再做修正,例如可以把JQ写成一个插件,方便以后调用。也希望写过此类程序的朋友给你的参考出来分享一下.

作者: joeshow   发布时间: 2010-07-16

很好,很强大!第一次做沙发!

作者: huajian15   发布时间: 2010-07-17

没怎么看的仔细,不过LZ值得学习

作者: shixuebao   发布时间: 2010-07-17

发现一个错误,评分不能及时显示,spoint = data.pf;  忘记修改全局变量值了,已经修改。

作者: joeshow   发布时间: 2010-07-17

。。。。。。。。。

作者: 耐思尼克琦   发布时间: 2010-07-17

相关阅读 更多