2013-07-12 85 views
0

我的php raty腳本結構如下,它一直顯示「除零」。 似乎輸入結果不能寫入Mysql數據庫。除零誤差(PHP設置cookie問題)

我應該改變「$斷言東西= $ RS [ '總']/$ RS [ '選民'];?!非常感謝

原始腳本如下

include_once ('connect.php'); 
$score = $_POST['score']; 
if (isset ($score)) { 
$cookiestr = getip(); 
$time = time(); 
if (isset ($_COOKIE['person']) && $_COOKIE['person'] == $cookiestr) { 
    echo "1"; 
} 
elseif (isset ($_COOKIE['rate_time']) && ($time -intval($_COOKIE['rate_time'])) < 60) { 
    echo "2"; 
    } else { 
    $query = mysql_query("update raty set voter=voter+1,total=total+'$score' "); 
    $query = mysql_query("select * from raty"); 
    $rs = mysql_fetch_array($query); 
    $aver = $rs['total']/$rs['voter']; 
    $aver = round($aver, 1) * 10; 
    // set COOKIE 
    setcookie("person", $cookiestr, time() + 3600 * 365); 
    setcookie("rate_time", time(), time() + 3600 * 365); 
    echo $aver; 
} 
} 

function getip() { 
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) { 
    $ip = getenv("HTTP_CLIENT_IP"); 
} else 
    if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) { 
     $ip = getenv("HTTP_X_FORWARDED_FOR"); 
    } else 
     if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) { 
      $ip = getenv("REMOTE_ADDR"); 
     } else 
      if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) { 
       $ip = $_SERVER['REMOTE_ADDR']; 
      } else { 
       $ip = "unknown"; 
      } 
return ($ip); 
} 
?> 

回答

2
$aver = ($rs['voter'] == 0) ? 0 : $rs['total']/$rs['voter']; 
+0

我不是說我是一個心靈感應器嗎? –

+0

感謝您的回覆,並且此方法正常工作! –

0

爲了避免被零除,你應該進行額外的檢查你計算的平均評分

// we expect a positive number of voters 
if ($rs['voter'] > 0) { 
    $aver = $rs['total']/$rs['voter']; 
} 
else { 
    // TODO: handle the unexpected case according to your application's needs 
    $aver = 0; 
} 

很少有其他potentia前l雖然代碼存在問題。我不會深入這裏的每一個細節,而只是指出幾點。

由於看起來數據庫已返回0,因此我認爲voter=voter+1不會按預期增加值。確保數據庫中的原始/默認表字段值設置爲0(或正整數),而不是其他值,如NULL或''(空字符串)。

另一個問題是SQL注入漏洞,因爲您將用戶/客戶端提供的值(永遠不應該信任該值)連接到SQL更新語句中。這是一個廣泛的話題,所以我不會在這裏深入研究,但是您可以在SO上搜索其他問題,以便專門提出問題。

+0

非常感謝,現在效果很好!非常感謝! –