php - 没有投票时,投票脚本返回 NaN
问题描述
我正在使用来自 Github 的投票脚本,一切正常,除了如果没有投票,它会返回 NaN:https ://github.com/agroknow/PAT/tree/master/custom/rating
我已经尝试检查$rating1或$rating2是否是_numeric ,如果不是,请将其设置为 0,但这不起作用。
我还尝试检查$current_rating:
if(!is_numeric($current_rating)){
$current_rating = 0;
}
代码如下:
<?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.'&q='.$id.'&t='.$ip.'&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;
}
}
?>
解决方案
我似乎已经通过像这样将intval添加到$rating1解决了这个临时问题:
$rating1 = @number_format(intval($current_rating/$count,1));