-1

I'm using this voting script from GitHUB, and everything is working, except it's returning NaN if no votes have been made: https://github.com/agroknow/PAT/tree/master/custom/rating

I have tried to check if $rating1 or $rating2 is_numeric, and if not, set it to 0, but that doesn't work.

I also tried to check $current_rating:

if(!is_numeric($current_rating)){
    $current_rating = 0;
}

enter image description here

The code is as follows:

<?php
function rating_bar($id,$units='',$static='') {

require('_config-rating.php');
include('inc/_dbcon.php');

$ip = $_SERVER['REMOTE_ADDR'];
if (!$units) {$units = 10;}
if (!$static) {$static = FALSE;}

$query = mysqli_query($conn, "SELECT total_votes, total_value, used_ips FROM ratings WHERE id = '{$id}';") or die (" Error: ".mysqli_error($conn));

if (mysqli_num_rows($query) == 0) {
    $sql    = "INSERT INTO ratings (id, total_votes, total_value, used_ips) VALUES ('$id', '0', '0', '')";
    $result = mysqli_query($conn, $sql);
}

$numbers = mysqli_fetch_assoc($query);

if ($numbers['total_votes'] < 1) {
    $count = 0;
} else {
    $count = $numbers['total_votes']; //how many votes total
}

$current_rating = $numbers['total_value']; //total number of rating added together and stored
$tense          = ($count==1) ? "röst" : "röster"; //plural form votes/vote
$voted          = mysqli_num_rows(mysqli_query($conn, "SELECT used_ips FROM ratings WHERE used_ips LIKE '%".$ip."%' AND id = '".$id."' "));

$rating_width = @number_format($current_rating/$count,2) * $rating_unitwidth;
$rating1      = @number_format($current_rating/$count,1);
$rating2      = @number_format($current_rating/$count,2);


if ($static == 'static') {
        $static_rater = array();
        $static_rater[] .= "\n".'<div class="ratingblock">';
        $static_rater[] .= '<div id="unit_long'.$id.'">';
        $static_rater[] .= '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth * $units.'px;">';
        $static_rater[] .= '<li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';
        $static_rater[] .= '</ul>';
        $static_rater[] .= '<p class="static">'.$id.'. Röster: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' lagda) <em>This is \'static\'.</em></p>';
        $static_rater[] .= '</div>';
        $static_rater[] .= '</div>'."\n\n";

        return join("\n", $static_rater);
} else {
      $rater ='';
      $rater.='<div class="ratingblock">';

      $rater.='<div id="unit_long'.$id.'">';
      $rater.='  <ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth * $units.'px;">';
      $rater.='     <li class="current-rating" style="width:'.$rating_width.'px;">Förnärvarande '.$rating2.'/'.$units.'</li>';

      for ($ncount = 1; $ncount <= $units; $ncount++) { // loop from 1 to the number of units
           if(!$voted) { // if the user hasn't yet voted, draw the voting stars
              $rater.='<li><a href="/db.php?j='.$ncount.'&amp;q='.$id.'&amp;t='.$ip.'&amp;c='.$units.'" title="'.$ncount.' av '.$units.'" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';
           }
      }
      $ncount=0; // resets the count

      $rater.='  </ul>';
      $rater.='  <p';
      if($voted){ $rater.=' class="voted"'; }
      $rater.='>Röster: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' lagda)';
      $rater.='  </p>';
      $rater.='</div>';
      $rater.='</div>';
      return $rater;
 }
}
?>
Aknot
  • 499
  • 1
  • 8
  • 18
  • Why can't you just check if `$rating1` is `NaN`. If so then change it to `0`. – Red Bottle Sep 06 '19 at 07:03
  • See: https://stackoverflow.com/questions/15318368/mysqli-or-die-does-it-have-to-die – Dharman Sep 06 '19 at 07:06
  • @Red Bottle I have tried that, doesn't work, it still returning nan. – Aknot Sep 06 '19 at 07:13
  • @Dharman Do you think of this part? if (mysqli_num_rows($query) == 0) { $sql = "INSERT INTO ratings (id, total_votes, total_value, used_ips) VALUES ('$id', '0', '0', '')" or die (" Error: ".mysqli_error($conn)); $result = mysqli_query($conn, $sql); } – Aknot Sep 06 '19 at 07:18

1 Answers1

0

I've seem to have solved this temporary by adding intval to $rating1 like this:

$rating1 = @number_format(intval($current_rating/$count,1));
Aknot
  • 499
  • 1
  • 8
  • 18