PHP/MySQL | Division by zero
вот ломаю голову как лучше быть...
есть сложный запрос исходя из которого путём математических расчетов формируются определённые переменные.... и потом происходят те или иные действия. Дело в том что в определённой ситуации одна переменная делает недопустимые расчёты .. и вылазиет эта ошибка... блин код ужасный но как сделать проверку на верность вычислений?
есть сложный запрос исходя из которого путём математических расчетов формируются определённые переменные.... и потом происходят те или иные действия. Дело в том что в определённой ситуации одна переменная делает недопустимые расчёты .. и вылазиет эта ошибка... блин код ужасный но как сделать проверку на верность вычислений?
DELETED
26 марта 2015, в 9:14
Delete
pullo, судя по ошибке идет деление на ноль)
Узнай где этот ноль появляется и ставь услови)
Узнай где этот ноль появляется и ставь услови)
а подробнее можно, конкретики более нужно, что за вычиследния ?
как вариант так можно сделать
if(условие){
$primer = тут пример нужный при первом условии;
}ifelse(второе условие){
$primer = тут второй пример если второе условие;
}
echo $primer;
как вариант так можно сделать
if(условие){
$primer = тут пример нужный при первом условии;
}ifelse(второе условие){
$primer = тут второй пример если второе условие;
}
echo $primer;
[J]iK, то что деление на ноль это я знаю.. дело в том что все переменные формируются в самом начале скрипта... методов выполнения допустим 5 в 4 из 5 эта переменная нормальная а вот в одном выполнении деление на этот ноль... просто как её проверять? сообразить не могу
[J]iK, то что деление на ноль это я знаю.. дело в том что все переменные формируются в самом начале скрипта... методов выполнения допустим 5 в 4 из 5 эта переменная нормальная а вот в одном выполнении деление на этот ноль... просто как её проверять? сообразить не могу
pullo (26.03.2015 в 09:17)
[J]iK, то что деление на ноль это я знаю.. дело в том что все переменные формируются в самом начале скрипта... методов выполнения допустим 5 в 4 из 5 эта переменная нормальная а вот в одном выполнении деление на этот ноль... просто как её проверять? сообразить не могу
[J]iK, то что деление на ноль это я знаю.. дело в том что все переменные формируются в самом начале скрипта... методов выполнения допустим 5 в 4 из 5 эта переменная нормальная а вот в одном выполнении деление на этот ноль... просто как её проверять? сообразить не могу
Можна увидеть код, а то не совсем уловил вашу мысль)
[J]iK,
вот кусок кода
// если армия нападающего сильнее
________
посл. ред. 26.03.2015 в 09:28; всего 1 раз(а); by [J]iK
вот кусок кода
<?php
$Attack = mysql_query("SELECT duty .*,
(SELECT SUM(power) FROM duty WHERE time_run != '0' AND time_run <= '$rtime' AND timeleft < '$rtime' AND done = '0') AS power,
(SELECT SUM(lot) FROM duty WHERE time_run != '0' AND time_run <= '$rtime' AND timeleft < '$rtime' AND done = '0') AS lot
FROM duty WHERE time_run != '0' AND time_run <= '$rtime' AND timeleft < '$rtime' AND done = '0'");
if (mysql_num_rows($Attack) != false)
{
$InAttack = mysql_fetch_assoc($Attack);
// координаты нападающего
$CoorMe = mysql_fetch_assoc(mysql_query("SELECT id FROM location WHERE x = '".user($InAttack['user'], 'coor_x')."' AND y = '".user($InAttack['user'], 'coor_y')."' LIMIT 1"));
// координаты пункта назначения
$TerrainMe = mysql_fetch_assoc(mysql_query("SELECT x, y, id_player FROM location WHERE id = '".user($InAttack['user'], 'terrain')."' LIMIT 1"));
// параметры армии противника
$StrongFoe = mysql_fetch_assoc(mysql_query("SELECT duty .*,
(SELECT SUM(power) FROM duty WHERE time_run = '0' AND time_back = '0' AND timeleft < '$rtime' AND user = '$TerrainMe[id_player]' AND done = '0') AS power,
(SELECT SUM(lot) FROM duty WHERE time_run = '0' AND time_back = '0' AND timeleft < '$rtime' AND user = '$TerrainMe[id_player]' AND done = '0') AS lot
FROM duty WHERE user = '$TerrainMe[id_player]' AND done = '0'"));
// Параметры генералов
$prmMyGen = mysql_fetch_assoc(mysql_query("SELECT * FROM generals WHERE cid = '$InAttack[id]' LIMIT 1"));
$prmFoeGen = mysql_fetch_assoc(mysql_query("SELECT * FROM generals WHERE cid = '$StrongFoe[id]'"));
$Fattack = ($prmFoeGen['attack'] != 0) ? $prmFoeGen['attack'] : 0;
$Fdefence = ($prmFoeGen['defence'] != 0) ? $prmFoeGen['defence'] : 0;
// математические расчеты битвы..
// "путевка"...
$arrival = travel_time(10 * $InAttack['speed'], user($InAttack['user'], 'coor_x'), user($InAttack['user'], 'coor_y'), $TerrainMe['x'], $TerrainMe['y']);
// сила нападающего
$my_power = (($InAttack['power'] + paramUnit($InAttack['uid'], $InAttack['user'], 1)) * $InAttack['lot'] + $prmMyGen['attack']);
// сила оппонента
$opp_power = (($StrongFoe['power'] + paramUnit($StrongFoe['uid'], $StrongFoe['user'], 1)) * $StrongFoe['lot'] + $Fattack);
// защита нападающего
$my_def = (($InAttack['defence'] + paramUnit($InAttack['uid'], $InAttack['user'], 2)) * $InAttack['lot'] + $prmMyGen['defence']);
// защита оппонента
$opp_def = (($StrongFoe['defence'] + paramUnit($StrongFoe['uid'], $StrongFoe['user'], 2)) * $StrongFoe['lot'] + $Fdefence);
// здоровье нападающего
$my_life = ($InAttack['health'] * $InAttack['lot']);
// здоровье оппонента
$opp_life = ($StrongFoe['health'] * $StrongFoe['lot']);
// коэфициент защиты нападающего
$my_def = round($my_def / 100 * $InAttack['defence']);
// коэфициент защиты оппонента
$opp_def = round($opp_def / 100 * $StrongFoe['defence']);
// вычитание нападающему
$my_minus = minus($my_life, minus($opp_power, $my_def));
// рез-т кол-ва оставшихся у нападающего
$battleResMy = floor($my_minus / $my_life);
// вычитание оппоненту
$opp_minus = minus($opp_life, minus($my_power, $opp_def));
// рез-т кол-ва оставшихся у оппонента
$battleResOpp = floor($opp_minus / $opp_life);
// процент от оставшихся у нападающего
$ResultMy = round($battleResMy * 100 / $InAttack['lot']);
// процент от оставшихся у оппонента
$ResultOpp = round($battleResOpp * 100 / $StrongFoe['lot']);
$grab=$InAttack['lot']-$battleResMy;
?>
// если армия нападающего сильнее
________
посл. ред. 26.03.2015 в 09:28; всего 1 раз(а); by [J]iK
вот если в табле нет армии противника то $opp_def = round
($opp_def / 100 * $StrongFoe
['defence' ]); уже деление на 0
($opp_def / 100 * $StrongFoe
['defence' ]); уже деление на 0