我正在学习php并构建了一个基于表单的实验计算器(也使用html& POST方法),它将值返回给表。当我输入我的值并单击提交时,计算器正常工作,但是当我第一次运行代码时,我在最后一行上得到两个“除以零”错误。在这里或通过Google搜索时,我似乎无法找到合理的解决方案或解释。您可以向newb提供任何解释,我们将不胜感激。
<?php
error_reporting(E_ALL ^ E_NOTICE);
//calculate the difference in price
$itemQty = $_POST['num1'];
$itemCost = $_POST['num2'];
$itemSale = $_POST['num3'];
$shipMat = $_POST['num4'];
$diffPrice = $itemSale - $itemCost;
$actual = ($diffPrice - $shipMat) * $itemQty;
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
?>
答案 0 :(得分:8)
您需要将表单处理代码包装在条件中,以便在首次打开页面时不会运行。像这样:
if($_POST['num1'] > 0 && $_POST['num2'] > 0 && $_POST['num3'] > 0 && $_POST['num4'] > 0){
$itemQty = $_POST['num1'];
$itemCost = $_POST['num2'];
$itemSale = $_POST['num3'];
$shipMat = $_POST['num4'];
$diffPrice = $itemSale - $itemCost;
$actual = ($diffPrice - $shipMat) * $itemQty;
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
答案 1 :(得分:7)
尝试使用
$var = @($val1 / $val2);
答案 2 :(得分:6)
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
$ itemCost和$ itemQty返回null或0,检查它们带来的用户输入代码
还要检查它是否不是空数据添加:
if(!empty($_POST['num1'])){
itemQty = $_POST['num1'];
}
您可以在变量
中使用之前检查此链接以进行后验证https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
答案 3 :(得分:3)
如果未设置变量,那么它为NULL
,如果您尝试将某个值除以零,则会得到除以零的错误
答案 4 :(得分:2)
如果仅在第一次运行时显示错误,则可能是因为您尚未发送任何POST数据。在使用POST变量之前,您应该检查它们。未定义,null,空数组,空字符串等都被视为false;当PHP将错误的布尔值自动转换为整数或浮点数时,它变为零。这就是变量发生的情况,它们不会在第一次运行时设置,因此被视为零。
10 / $unsetVariable
变为
10 / 0
底线:检查您的输入是否存在以及在使用它们之前它们是否有效,还可以在您进行本地工作时启用错误报告,因为这样可以节省大量时间。您可以按以下方式启用所有错误报告:error_reporting(E_ALL);
修复您的具体问题:如果您的表单没有输入,请不要进行任何计算;只是显示表格。
答案 5 :(得分:1)
你可以试试这个。你有这个错误,因为我们不能除以'zero' (0)
值。所以我们想在计算之前验证。
if($itemCost != 0 && $itemCost != NULL && $itemQty != 0 && $itemQty != NULL){
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
我们也可以验证POST
数据。参考以下
$itemQty = isset($_POST['num1']) ? $_POST['num1'] : 0;
$itemCost = isset($_POST['num2']) ? $_POST['num2'] : 0;
$itemSale = isset($_POST['num3']) ? $_POST['num3'] : 0;
$shipMat = isset($_POST['num4']) ? $_POST['num4'] : 0;
答案 6 :(得分:1)
当我的除数有0值时
if ($divisor == 0) {
$divisor = 1;
}
答案 7 :(得分:0)
试试这个
if( isset($itemCost)!='' && isset($itemQty)!='')
{
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
else
{
echo "either of itemCost or itemQty are null ";
}
?>
答案 8 :(得分:0)
这里的很多答案都不适用于(字符串)“0.00”。
试试这个:
if (isset($_POST['num1']) && (float)$_POST['num1'] != 0) {
...
}
甚至更严格:
if (isset($_POST['num1']) && is_numeric($_POST['num1']) && (float)$_POST['num1'] != 0) {
...
}
答案 9 :(得分:0)
如果期望值可以是 0(因此不需要验证),我这样做是为了让事情变得快速、干净和简单:
$percentage = $sum1 / ($sum2 ?: 1)