2009-12-11 41 views
0

我在about.com上发现了这个脚本,我试图从中学习如何创建评分系统,但脚本给了我一个警告,我在下面列出。PHP/MySQL - 需要帮助更正PHP警告?

我想知道如何解决这个问题?我需要更改哪部分代码以及在哪里?

下面是警告。

Warning: Division by zero on line 43 

以下是脚本。

<?php 
// Connects to your Database 
mysql_connect("localhost", "root", "", "sitename") or die(mysql_error()); 
mysql_select_db("sitename") or die(mysql_error()); 



//We only run this code if the user has just clicked a voting link 
if ($mode=="vote") 
{ 

//If the user has already voted on the particular thing, we do not allow them to vote again $cookie = "Mysite$id"; 
if(isset($_COOKIE[$cookie])) 
{ 
Echo "Sorry You have already ranked that site <p>"; 
} 

//Otherwise, we set a cooking telling us they have now voted 
else 
{ 
$month = 2592000 + time(); 
setcookie(Mysite.$id, Voted, $month); 

//Then we update the voting information by adding 1 to the total votes and adding their vote (1,2,3,etc) to the total rating 
mysql_query ("UPDATE vote SET total = total+$voted, votes = votes+1 WHERE id = $id"); 
Echo "Your vote has been cast <p>"; 
} 
} 



//Puts SQL Data into an array 
$data = mysql_query("SELECT * FROM vote") or die(mysql_error()); 

//Now we loop through all the data 
while($ratings = mysql_fetch_array($data)) 
{ 

//This outputs the sites name 
Echo "Name: " .$ratings['name']."<br>"; 

//This calculates the sites ranking and then outputs it - rounded to 1 decimal 
$current = $ratings[total]/$ratings[votes]; 
Echo "Current Rating: " . round($current, 1) . "<br>"; 

//This creates 5 links to vote a 1, 2, 3, 4, or 5 rating for each particular item 
Echo "Rank Me: "; 
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=1&id=".$ratings[id].">Vote 1</a> | "; 
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=2&id=".$ratings[id].">Vote 2</a> | "; 
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=3&id=".$ratings[id].">Vote 3</a> | "; 
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=4&id=".$ratings[id].">Vote 4</a> | "; 
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=5&id=".$ratings[id].">Vote 5</a><p>"; 
} 
?> 

回答

2

你需要确保你使用的不是0。如果你从MySQL得到totalvotes的值是0,你应该绕过划分和设定一个固定的值除以。

//This calculates the sites ranking and then outputs it - rounded to 1 decimal 
if($ratings['total'] > 0 && $ratings['votes'] > 0) { 
    $current = $ratings['total']/$ratings['votes']; 
} 
else{ 
    $current = 0; 
} 

P.S.
请注意我如何引用$ratings数组中的元素。你应该一直这样做。

// This is INCORRECT. Causes error notices if you have error reporting on. 
// and can have other consequences if you happen to use a `total` constant. 
$ratings[total]; 

// It should be 
$ratings['total'] 
+0

+1良好的渔获与报价;) – Vafliik 2009-12-11 15:06:48

2

的问题是在这里

$current = $ratings[total]/$ratings[votes]; 

如果没有票,你将一个数由零。这是不好的:)

添加一些验证,即$评级[投票]设置,它不为0