在PHP计算器中除以0错误

时间:2013-12-31 19:00:05

标签: php

我有一个简单的计算器,代码如下所示。我有3个输入和一个简单的等式。但是,即使在我点击计算按钮之前,我仍然会得到除以0的误差。我在这里做错了什么?

<?php
if (isset($_POST['valuea'])) $valuea = $_POST['valuea'];
if (isset($_POST['valueb'])) $valueb = $_POST['valueb'];
if (isset($_POST['valuec'])) $valuec = $_POST['valuec'];
$answer = ($valuea - $valueb) / $valuec;

echo <<<_END
<form method='post' action='/depreciation.php'>
<table border='0' width='500px' cellpadding='3' cellspacing='1' class="table">

<tr class="calcheading"><td colspan="2"><strong>Stright Line Depreciation</strong></td>         </tr>
<tr class="calcrow"><td>Enter Cost:</td><td align="center"><input type='text'     name='valuea' value="$valuea"/></td></tr>
<tr class="calcrow2"><td>End Salvage Value:</td><td align="center"><input type='text' name='valueb' value="$valueb"/></td></tr>
<tr class="calcrow"><td>Enter Estimated Life:</td><td align="center"><input type='text' name='valuec' value="$valuec"/></td></tr>
<tr class="submit"><td colspan="2"><input type='submit' value='Calculate'/></td></tr>
_END;

?>

<tr class="calcrow">
<td><i>The answer is:</td>
<td align="center"><input type="text" value="<?php echo round($answer)?>"></td></i>
</tr>
</table>
</form>

4 个答案:

答案 0 :(得分:2)

$answer正在评估页面加载,正如dc2所评论的那样,加载页面后没有任何东西阻止你的代码被执行...

$answer = ($valuea - $valueb) / $valuec;

这会在您加载页面时产生错误。

为了避免这种情况,你应该在进行除法之前检查0:

if($valuec == 0){
    $answer = "TO INFINITY AND BEYOND";
}else{
   //division here
}

答案 1 :(得分:0)

所以看起来你检查前三行代码来查看是否设置了$ _POST []变量,但无论它们是否存在,你都可以继续分配$ answer一个值。那么如果没有设置这些值会发生什么?

我有一段时间没写过PHP,所以我可能错了,但你可能想在执行任何代码之前检查$ _POST []数据,如果你发现没有设置任何内容,请将用户重定向到他们应该填写的表格。

只需0.02美元 - 让我知道它是否有效。

答案 2 :(得分:0)

你可以改变

$answer = ($valuea - $valueb) / $valuec;

if ((isset($valuea))&&(isset($valueb))&&(isset($valuec))){
     $answer = ($valuea - $valueb) / $valuec;
}

然后你将避免使用空值

答案 3 :(得分:0)

我会利用is_numeric并在分割之前测试0:

<?php
$valuea='';
$valueb='';
$valuec='';
$answer='';

if (isset($_POST['valuea'])) $valuea = $_POST['valuea'];
if (isset($_POST['valueb'])) $valueb = $_POST['valueb'];
if (isset($_POST['valuec'])) $valuec = $_POST['valuec'];
if(is_numeric($valuea) && is_numeric($valueb) && is_numeric($valuec))
{
    if($valuec=='0')
    {
        $answer ="Error: Dividing by zero";
    }
    else{
        $answer = ($valuea - $valueb) / $valuec;
    }
}

echo <<<_END
<form method='post'>
<table border='0' width='500px' cellpadding='3' cellspacing='1' class="table">
<tr class="calcheading"><td colspan="2"><strong>Stright Line Depreciation</strong></td></tr>
<tr class="calcrow"><td>Enter Cost:</td><td align="center"><input type="text" name="valuea" value="$valuea" /></td></tr>
<tr class="calcrow2"><td>End Salvage Value:</td><td align="center"><input type="text" name="valueb" value="$valueb" /></td></tr>
<tr class="calcrow"><td>Enter Estimated Life:</td><td align="center"><input type="text" name="valuec" value="$valuec" /></td></tr>
<tr class="submit"><td colspan="2"><input type="submit" value="Calculate" /></td></tr>
_END;

?>
<tr class="calcrow"><td><em>The answer is:</em></td><td align="center"><input type="text" value="<?php echo is_numeric($answer)?round($answer):$answer; ?>"></td></tr>
</table>
</form>

这是phpfiddleits results