除零错误(PHP集cookie问题)
我的php raty脚本结构如下,它一直显示“零除”。 似乎输入结果无法写入Mysql数据库 我是否应该更改“$aver=$rs['total']/$rs['voter']”中的内容?非常感谢 原文如下除零错误(PHP集cookie问题),php,mysql,mysql-error-1064,Php,Mysql,Mysql Error 1064,我的php raty脚本结构如下,它一直显示“零除”。 似乎输入结果无法写入Mysql数据库 我是否应该更改“$aver=$rs['total']/$rs['voter']”中的内容?非常感谢 原文如下 include_once ('connect.php'); $score = $_POST['score']; if (isset ($score)) { $cookiestr = getip(); $time = time(); if (isset ($_COOKIE['person']) &
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);
}
?>
include_once('connect.php');
$score=$_POST['score'];
如果(isset($score)){
$cookiestr=getip();
$time=time();
如果(isset($\u COOKIE['person'])&&&$\u COOKIE['person']==$cookiestr){
回声“1”;
}
elseif(isset($\u COOKIE['rate\u time'])和($time-intval($\u COOKIE['rate\u time']))<60){
回声“2”;
}否则{
$query=mysql_query(“更新raty set voter=voter+1,total=total+“$score”);
$query=mysql\u query(“从raty中选择*);
$rs=mysql\u fetch\u数组($query);
$aver=$rs['total']/$rs['voter'];
$aver=四舍五入($aver,1)*10;
//设置COOKIE
setcookie(“person”,$cookiestr,time()+3600*365);
setcookie(“rate_time”,time(),time()+3600*365);
echo$aver;
}
}
函数getip(){
if(getenv(“HTTP\u客户端\u IP”)&strcasecmp(getenv(“HTTP\u客户端\u IP”),“未知”)){
$ip=getenv(“HTTP_CLIENT_ip”);
}否则
if(getenv(“HTTP_X_FORWARDED_FOR”)&stracecmp(getenv(“HTTP_X_FORWARDED_FOR”),“unknown”)){
$ip=getenv(“HTTP\u X\u FORWARDED\u FOR”);
}否则
if(getenv(“远程地址”)&strcasecmp(getenv(“远程地址”),“未知”)){
$ip=getenv(“远程地址”);
}否则
如果(isset($服务器['REMOTE\u ADDR'])和&$服务器['REMOTE\u ADDR']&&strcasecmp($服务器['REMOTE\u ADDR'],“未知”)){
$ip=$\u服务器['REMOTE\u ADDR'];
}否则{
$ip=“未知”;
}
回报(ip);
}
?>
为了避免被零除,您应该在计算平均评级之前进行额外检查
// 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;
}
不过,代码中几乎没有其他潜在的问题。我不会在这里详细讨论每一个细节,而只是指出一些问题
由于您似乎得到的是数据库返回的0,因此我假设voter=voter+1
没有按预期增加值。请确保数据库中的原始/默认表字段值设置为0(或正整数),而不是NULL或“”(空字符串)
另一个问题是SQL注入的漏洞,因为您连接的是用户/客户机提供的值(永远不应该信任)SQL update语句。这是一个广泛的主题,所以我不会在这里深入探讨,但您可以在这里搜索其他问题,以便专门提问。我不是说过我是一个心灵感应者吗?
// 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;
}