10

我正在学习 php 并构建了一个实验性的基于表单的计算器(也使用 html 和 POST 方法),它将值返回到表中。当我输入我的值并单击提交时,计算器可以正常工作,但是当我第一次运行代码时,我在最后一行不断收到两个“除以零”错误。在此处或通过 Google 搜索时,我似乎无法找到合乎逻辑的解决方案或解释。您可以向新手提供的任何解释将不胜感激。

<?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 ;

?>
4

11 回答 11

13

您需要将表单处理代码包装在条件中,以便在您第一次打开页面时不会运行。像这样:

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 ;
}
于 2013-08-23T17:47:49.667 回答
7
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty;

$itemCost$itemQty返回null或归零,检查他们从用户输入中获得的代码

还要检查它是否不是空数据添加:

if (!empty($_POST['num1'])) {
    $itemQty = $_POST['num1'];
}

并且您可以在变量中使用它之前检查此链接以进行 POST 验证

https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

于 2013-08-23T17:41:36.143 回答
5

Try using

$var = @($val1 / $val2);
于 2016-09-13T08:36:08.980 回答
3

如果未设置变量,则它是NULL,如果您尝试将某些内容除以 null,您将得到除以零错误

于 2013-08-23T17:39:22.533 回答
2

如果它仅在第一次运行时显示错误,可能是因为您没有发送任何 POST 数据。您应该在使用它们之前检查 POST 变量。undefined、null、空数组、空字符串等都被认为是false;当 PHP 自动将该错误的布尔值转换为整数或浮点数时,它会变为零。这就是您的变量发生的情况,它们不是在第一次运行时设置的,因此被视为零。

10 / $unsetVariable

变成

10 / 0

底线:在对它们进行任何操作之前检查您的输入是否存在以及它们是否有效,同时在您进行本地工作时启用错误报告,因为这将为您节省大量时间。您可以像这样报告所有错误:error_reporting(E_ALL);

解决您的具体问题:如果您的表单没有输入,请不要进行任何计算;只是显示表格。

于 2013-08-23T17:40:36.373 回答
2

如果期望值可以为 0(因此不需要验证),我这样做是为了将事情保持在一行:

$percentage = $sum1 / ($sum2 ?: 1)
于 2021-04-20T08:25:57.133 回答
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;
于 2015-06-26T05:23:04.673 回答
1

当我的除数为 0 值时

if ($divisor == 0) {
    $divisor = 1;
}
于 2018-01-08T05:25:13.093 回答
0

尝试这个

if(isset($itemCost) != '' && isset($itemQty) != '')
{
    $diffPricePercent = (($actual * 100) / $itemCost) / $itemQty;
}
else
{
    echo "either of itemCost or itemQty are null";
}
于 2013-08-23T17:44:22.700 回答
0

使用 * 100 $actual 检查变量是否有值,否则将返回错误。

if ( ! empty( $actual ) ) :

$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;

endif;
于 2022-01-27T04:37:05.930 回答
0

这里的很多答案都不适用于(字符串)“0.00”。

尝试这个:

if (isset($_POST['num1']) && (float)$_POST['num1'] != 0) {
  ...
}

或者更严格:

if (isset($_POST['num1']) && is_numeric($_POST['num1']) && (float)$_POST['num1'] != 0) {
  ...
}
于 2021-01-15T15:10:54.377 回答