Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
除零错误(PHP集cookie问题)_Php_Mysql_Mysql Error 1064 - Fatal编程技术网

除零错误(PHP集cookie问题)

除零错误(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']) &

我的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']) && $_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;
}