【问题标题】:PHP mysql star ratingPHP mysql 星级
【发布时间】:2015-11-16 13:58:20
【问题描述】:

我正在关注找到here 的教程,但我似乎无法弄清楚如何从数据库中的评级中填写星星。基本上,我想要在用户提交他/她自己的评分之前显示当前评分和显示多少评分。 我不想动态构建需要评分的产品列表,我只需要发布 id 并根据 data-id 生成评分计数...

--更新 我可以发布评级,但我需要为每个产品分配一个 ID。我只能获取一个值的值,但我认为我需要分配一个 var 以便我可以为任何给定产品提取它们

产品:

<div class="store-item-rating text-warning rate-ex1-cnt" id ="1">
    <div id="1" class="rate-btn-1 rate-btn"></div>
    <div id="2" class="rate-btn-2 rate-btn"></div>
    <div id="3" class="rate-btn-3 rate-btn"></div>
    <div id="4" class="rate-btn-4 rate-btn"></div>
    <div id="5" class="rate-btn-5 rate-btn"></div>
 </div>

 <div class="store-item-rating text-warning rate-ex2-cnt" id ="2">
    <div id="1" class="rate-btn-1 rate-btn"></div>
    <div id="2" class="rate-btn-2 rate-btn"></div>
    <div id="3" class="rate-btn-3 rate-btn"></div>
    <div id="4" class="rate-btn-4 rate-btn"></div>
    <div id="5" class="rate-btn-5 rate-btn"></div>
 </div>

JS

$(function(){ 
        $('.rate-btn').hover(function(){
            $('.rate-btn').removeClass('rate-btn-hover');
            var therate = $(this).attr('id');
            for (var i = therate; i >= 0; i--) {
                $('.rate-btn-'+i).addClass('rate-btn-hover');
            };
        });

        $('.rate-btn').click(function(){    
            var therate = $(this).attr('id');
            var dataRate = 'act=rate&product_id=<?php echo $product_id; ?>&rate='+therate; //
            $('.rate-btn').removeClass('rate-btn-active');
            for (var i = therate; i >= 0; i--) {
                $('.rate-btn-'+i).addClass('rate-btn-active');
            };
            $.ajax({
                type : "POST",
                url : "inc/ajax.php",
                data: dataRate,
                success:function(){}
            });

        });
    });

伯爵

        <div class="box-result-cnt">
        <?php
            $query = mysql_query("SELECT * FROM tbl_rating"); 
            while($data = mysql_fetch_assoc($query)){
                $rate_db[] = $data;
                $sum_rates[] = $data['rate'];
            }
            if(@count($rate_db)){
                $rate_times = count($rate_db);
                $sum_rates = array_sum($sum_rates);
                $rate_value = $sum_rates/$rate_times;
                $rate_bg = (($rate_value)/5)*100;
            }else{
                $rate_times = 0;
                $rate_value = 0;
                $rate_bg = 0;
            }
        ?>
        <hr>
        <h3>The content was rated <strong><?php echo $rate_times; ?></strong> times.</h3>
        <hr>
        <h3>The rating is at <strong><?php echo $rate_value; ?></strong> .</h3>
        <hr>
        <div class="rate-result-cnt">
            <div class="rate-bg" style="width:<?php echo $rate_bg; ?>%"></div>
            <div class="rate-stars"></div>
        </div>
        <hr>

    </div>

【问题讨论】:

  • 你能告诉我们你到目前为止的尝试吗?

标签: php jquery mysql ajax


【解决方案1】:

假设您只能对 1 个产品进行评分(正如演示所做的那样)。要获得当前评分,您可以选择所有评分并对其进行平均:

Current rating: SELECT AVG(rate) FROM tbl_rating
Number of ratings: SELECT COUNT(*) FROM tbl_rating

现在,如果您需要知道当前用户的评分:

SELECT rate FROM tbl_rating WHERE user_id = $userIPAdress

如果您将product_id 列添加到tbl_rating 表以便能够对多个产品进行评级,只需添加一个WHERE 子句:

Current rating: SELECT AVG(rate) FROM tbl_rating WHERE product_id = $productId
Number of ratings: SELECT COUNT(*) FROM tbl_rating WHERE product_id = $productId

【讨论】:

  • 我已经为 product_id 添加了附加列,因为我注意到了同样的事情。我遇到的真正问题是调用每种产品的评级。所以,基本上,产品一和二是静态的并且有 id,但是我在调​​用评级和填充 index.php 中的星星时遇到问题 - 似乎缺少一些东西,一些我没有看到或没有看到的 php 参数太累了,看不到......
  • 它不适用于最后 2 个查询吗?它们会返回特定产品的平均评分(= 星数)以及评分数。如果您想要所有产品的这些值,您可以这样做:SELECT AVG(rate) FROM tbl_rating GROUP BY product_idSELECT COUNT(*) FROM tbl_rating GROUP BY product_id
  • 第一个确实有效 - 请参阅上面的代码更新。我现在唯一遇到的问题是为每个可以调用的产品分配一个 id
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2012-04-16
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多