我有一个简单的计算器,代码如下所示。我有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>
答案 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>