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

Тема в разделе "Игровые движки", создана пользователем linpc, 25 фев 2013.

  1. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    Warning: implode() [function.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']>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]


    Так же выделил.
    Что за ошибки и как исправить голова не варит
     
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.724
    Симпатии:
    2.100
    прикрепите файл sql_func.php, а то вообще не понятно где что выделено и куда смотреть.
    в первом случае неверные аргументы переданы в функцию implode, там в общем случае должно быть два: строка-соединитель, массив строк.
    во втором случае у вас деление на ноль.
     
  3. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    Залил sql_func.php
     

    Вложения:

  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.724
    Симпатии:
    2.100
    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);
    в даном случае $tmp не является скорее всего массивом, кстате, $tmp переменная инициализируется только внутри if ($stat[0]==1), а используется всегда.

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

    что есть?
    в эту переменную $pl функция player() возвращает массив(mysql_fetch_assoc) в котором значения по ключам hps, mps равны 0 ($pl['hps'], $pl['mps']), поэтому получается деление на ноль.
    если б эти ключи в массиве были б неопределены, то по идее у вас должна была бы быть другая ошибка.
    производная от проблемы, переменные $mps, $hps равны 0

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