未计算的变量,如果计数为0

时间:2016-10-25 15:02:16

标签: php mysql

我的以下代码有点问题。我正在尝试创建一个明星raiting系统,以下代码显示raiting细节。但我得到了

  

未定义变量rate_db通知

来自if(count($rate_db))我在这里错过了什么,谁能告诉我?

完整代码在这里:

    <?php
      $query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'"); 
        while($data = mysqli_fetch_assoc($query)){
           $rate_db[] = $data;
           $sum_rates[] = $data['r_type'];
        }
        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;
        }
 ?>

5 个答案:

答案 0 :(得分:3)

最好将两个阵列初始化为:

$rate_db = array(); 
$sum_rates = array();

我不知道你在哪里定义这个变量$profile_uid,如果它是用户输入或会话值,那么你的代码是为SQL注入打开的,你可以使用Prepared Statement来防止SQL攻击。这篇文章将帮助您理解:How can I prevent SQL injection in PHP?

Side Note&amp;建议:

还有一件事,你也可以得到r_type的总和:

$sum_rates += $data['r_type'];

在这种情况下,您需要将$sum_rates初始化为:

$sum_rates = 0;

然后从IF条件中删除此行:

$sum_rates = array_sum($sum_rates);

好处,无需使用额外的方法。

答案 1 :(得分:2)

$rate_db变量在while循环中定义,您从MySQL中获取数据。但是,如果查询未返回任何记录,则不会执行while循环体,因此将不会定义$rate_db变量。

解决方案:在$rate_db循环之前将while变量定义为空数组。

答案 2 :(得分:2)

您可以初始化变量:

<?php
        $rate_db = array();
        $sum_rates = array();
        $query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'"); 
        while($data = mysqli_fetch_assoc($query)){
           $rate_db[] = $data;
           $sum_rates[] = $data['r_type'];
        }
        $rate_times = count($rate_db);
        if($rate_times > 0){
          $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;
        }
 ?>

答案 3 :(得分:1)

在使用计数之前,您需要确保它确实包含一些内容,以便您的完整代码可以像这样

<?php
  $query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'"); 
    while($data = mysqli_fetch_assoc($query)){
       $rate_db[] = $data;
       $sum_rates[] = $data['r_type'];
    }
    if(isset($rate_db) && 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;
    }
 ?>

答案 4 :(得分:1)

  $query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'"); 
        while($data = mysqli_fetch_assoc($query)){
           $rate_db[] = $data;
           $sum_rates[] = $data['r_type'];
        }

因为当你的查询返回空结果时,while循环永远不会变为true,所以永远不会达到$ rate_db [],因此永远不会创建。

要解决此问题,您应该首先在脚本顶部将$ rate_db []声明为空。避免错误。