Исправление ошибок

linpc

Гуру форума
Регистрация
6 Апр 2012
Сообщения
178
Реакции
55
Warning: implode() [Для просмотра ссылки Войди или Зарегистрируйся]: Invalid arguments passed in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 519
PHP:
function calcstat($id){
    $pl=mysql_fetch_assoc(mysql_query("SELECT * FROM `user` WHERE `id`='".$id."'"));
    $um=explode("|",$pl['umen']);
    $t=array(0=> 0,2,4);
    $od=45;
    $bl=0;
    db_query('SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype WHERE used='.AP.'1'.AP.' and pl_id='.AP.$id.AP.'');
    while ($row = db_fetch()) {
        $item = explode("|",$row['i_param']);
        $mod=explode("|",$row['mod']);
foreach ($mod as $value){
    $modstats=explode("@",$value);
    $modstat[$modstats[0]]=$modstats[1];
}
if($row['type']=='w20'){$bl=$row['block'];$tw=$row['type'];}
if($row['slot']>0 and $row['type']!='w20'){
    $it = explode("|",$row['need']);
    foreach ($it as $val) {
        $need=explode("@",$val);
        if($need[0]==28 and $need[1]>$od){
            $od=$need[1];
            $tw=$row['type'];
        }
    }
}
foreach ($item as $value) {
        $k=1;
        $stat=explode("@",$value);
        if(in_array ($stat[0], $t)){$par[$stat[0]]='';continue;}
        if($stat[0]==1){
            $tmp=explode("-",$stat[1]);
            switch($tw){
                case w1: $k=($um[10]/300+$um[1]/150)+1;break;
                case w2: $k=($um[10]/300+$um[2]/150)+1;break;
                case w3: $k=($um[10]/300+$um[3]/150)+1;break;
                case w4: $k=($um[10]/300+$um[4]/150)+1;break;
                case w5: $k=($um[10]/300+$um[5]/150)+1;break;
                case w6: $k=($um[10]/300+$um[6]/150)+1;break;
                case w7: $k=($um[10]/300+$um[7]/150)+1;break;
                case w20: $k=$um[10]/300+1;break;
            }
            $tmp[0]=round($tmp[0]*$k);$tmp[1]=round($tmp[1]*$k);
            [B]$tmp1=explode("-",$par[1]);[/B]
            $modstat[1]!='' ? $tmp2=explode("-",$modstat[1]) : $tmp2='';
            $tmp[0]+=$tmp1[0]+$tmp2[0];$tmp[1]+=$tmp1[1]+$tmp2[1]; continue;
        }
        $par[1]=implode("-",$tmp);
        $par[$stat[0]]+=($stat[1]+$modstat[$stat[0]]);
    }
    if($row['damage_mod']!=0){
        $dmod=explode("@",$row['damage_mod']);
        $dmoddmg=explode("-",$dmod[1]);
        $damage_mod[$dmod[0]][0]+=$dmoddmg[0];
        $damage_mod[$dmod[0]][1]+=$dmoddmg[1];
    }
}
       
    $sil=$par[30]+$pl['sila'];
    $dmg=explode("-",$par[1]);
    $dmg[0]+=$sil;
    $dmg[1]+=$sil*1.5;$par[1]=implode("-",$dmg);
   
    for($dm=1;$dm<=4;$dm++){
    $moddmg[$dm]=implode("-",$damage_mod[$dm]);
    $dmgmod.=(($damage_mod[$dm]=='')?'':$dm."@".$moddmg[$dm]."|");
}
if($dmgmod==''){$dmgmod=0;}
    switch($tw){
        case'': $od=45;$od=round($od/(($um[0]/100+$um[10]/200)*0.15+1));$par[1]=round($sil*(1+$um[0]/300))."-".round($sil*(1+$um[0]/150)+1); break;
        case'w1': $od=round($od/(($um[1]/100+$um[10]/200)*0.15+1));break;
        case'w2': $od=round($od/(($um[2]/100+$um[10]/200)*0.15+1));break;
        case'w3': $od=round($od/(($um[3]/100+$um[10]/200)*0.15+1));break;
        case'w4': $od=round($od/(($um[4]/100+$um[10]/200)*0.15+1));break;
        case'w5': $od=round($od/(($um[5]/100+$um[10]/200)*0.15+1));break;
        case'w6': $od=round($od/(($um[6]/100+$um[10]/200)*0.15+1));break;
        case'w7': $od=round($od/(($um[7]/100+$um[10]/200)*0.15+1));break;
        default:
            $od=round($od/(($um[0]/100+$um[10]/200)*0.15+1));
        break;
       
    }
    $hps=(750/(($par[62]+$um[30])/100+1));
    $mps=(4500/(($par[66]+$um[33])/100+1));
    for($i=0;$i<=71;$i++){
        $st.="$par[$i]|";
    }
 
$rank_i = ($par[30]+$par[31]+$$par[32]+$par[33]+$par[34]+$par[35]+$par[9])*0.3 + ($par[5]+$par[6]+$par[7]+$par[8]+$par[10])*0.03 + ($pl["hp_all"]+$pl["mp_all"])*0.04+(round($sil*(1+$um[0]/300))+round($sil*(1+$um[0]/150)+1))*0.3;
    mysql_query("UPDATE `user` SET `bl`='".$bl."',`od`='".$od."',`st`='".$st."',`hps`='".$hps."',`mps`='".$mps."',`rank_i`='".$rank_i."' WHERE `id`='".$id."' LIMIT 1;");
}

Жирным выделил ту самую 512 строчку.

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 246

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 247

PHP:
 function calchp(){
$pl=player();
$s=explode("|",$pl[st]);
foreach (explode("|",$pl[perk]) as $key => $val){
if($val==''){
$val=0;
}
$p[$key]=$val;
}
$trw=affect($pl[affect],3);
if(!empty($trw)){
foreach ($trw as $key => $val){
$s[$key]+=$val;
}
}
 
[B]$hps=$pl['hp_all']/$pl['hps'];[/B]
[B]$mps=$pl['mp_all']/$pl['mps'];[/B]
$hp=(($pl['zdorov']+$s[33]+($p[8]*2)+(($pl[level]+1)*$p[18]))*5)+$s[27];
$mp=(($pl['znan']+$s[34]+($p[11]*2))*7)+$s[29];
if($hp!=$pl['hp_all'] or $mp!=$pl['mp_all']){
db_query('UPDATE user SET hp_all='.AP.$hp.AP.',mp_all='.AP.$mp.AP.' WHERE login='.AP.$_SESSION['user']['login'].AP.'LIMIT 1;');
}
inshp();
}
Так же выделил жирным

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 222

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 223

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 224

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 225
PHP:
[/B][/COLOR][/FONT][/SIZE]
function inshp()
{$pl=player();
 
[B]$hps=$pl['hp_all']/$pl['hps'];[/B]
[B]$mps=$pl['mp_all']/$pl['mps'];[/B]
[B]$chp=time()+(($pl['hp_all']-$pl['hp'])/$hps);[/B]
[B]$cmp=time()+(($pl['mp_all']-$pl['mp'])/$mps);[/B]
db_query('UPDATE user SET chp='.AP.$chp.AP.', cmp='.AP.$cmp.AP.' WHERE login='.AP.$_SESSION['user']['login'].AP.' LIMIT 1;');
}
[SIZE=3][FONT=Times New Roman][COLOR=#000000][B]

Так же выделил.
Что за ошибки и как исправить голова не варит
 
прикрепите файл sql_func.php, а то вообще не понятно где что выделено и куда смотреть.
в первом случае неверные аргументы переданы в функцию implode, там в общем случае должно быть два: строка-соединитель, массив строк.
во втором случае у вас деление на ноль.
 
Залил sql_func.php
 

Вложения

  • Архив WinRAR.rar
    17,7 KB · Просмотры: 7
PHP:
if($stat[0]==1){
            $tmp=explode("-",$stat[1]);
            switch($tw){
                case w1: $k=($um[10]/300+$um[1]/150)+1;break;
                case w2: $k=($um[10]/300+$um[2]/150)+1;break;
                case w3: $k=($um[10]/300+$um[3]/150)+1;break;
                case w4: $k=($um[10]/300+$um[4]/150)+1;break;
                case w5: $k=($um[10]/300+$um[5]/150)+1;break;
                case w6: $k=($um[10]/300+$um[6]/150)+1;break;
                case w7: $k=($um[10]/300+$um[7]/150)+1;break;
                case w20: $k=$um[10]/300+1;break;
            }
            $tmp[0]=round($tmp[0]*$k);$tmp[1]=round($tmp[1]*$k);
            $tmp1=explode("-",$par[1]);
            $modstat[1]!='' ? $tmp2=explode("-",$modstat[1]) : $tmp2='';
            $tmp[0]+=$tmp1[0]+$tmp2[0];$tmp[1]+=$tmp1[1]+$tmp2[1]; continue;
        }
        $par[1]=implode("-",$tmp);

Warning: implode() [Для просмотра ссылки Войди или Зарегистрируйся]: Invalid arguments passed in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 519
519: $par[1]=implode("-",$tmp);
в даном случае $tmp не является скорее всего массивом, кстате, $tmp переменная инициализируется только внутри if ($stat[0]==1), а используется всегда.

касательно других ошибок, напишу попозже, когда пересмотрю

что есть?
function player(){
return mysql_fetch_assoc(mysql_query("SELECT `active_session`.*, `user`.* FROM `user` INNER JOIN `active_session` ON `user`.`id` = `active_session`.`User_ID` WHERE `user`.`pcid` = `active_session`.`session` AND `pcid`='".mysql_real_escape_string($_COOKIE['HonorHash'])."';"));
}
в эту переменную $pl функция player() возвращает массив(mysql_fetch_assoc) в котором значения по ключам hps, mps равны 0 ($pl['hps'], $pl['mps']), поэтому получается деление на ноль.
если б эти ключи в массиве были б неопределены, то по идее у вас должна была бы быть другая ошибка.
Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 246
$hps=$pl['hp_all']/$pl['hps'];
Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 247
$mps=$pl['mp_all']/$pl['mps'];
Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 222
$hps=$pl['hp_all']/$pl['hps'];
Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 223
$mps=$pl['mp_all']/$pl['mps'];

производная от проблемы, переменные $mps, $hps равны 0

Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 224
$chp=time()+(($pl['hp_all']-$pl['hp'])/$hps);
Warning: Division by zero in D:\Distrib\Programm\OpenServer\domains\demo.gamele.ru\func\sql_func.php on line 225
$cmp=time()+(($pl['mp_all']-$pl['mp'])/$mps);

Добавлено puagardian: Редактируйте предыдущее сообщение вместо добавления нового. Даблпостинг запрещен.
 
Последнее редактирование модератором:
Назад
Сверху