PHP предупреждение: деление на ноль

Я изучаю php и построил экспериментальный калькулятор на основе форм (также используя метод html & POST), который возвращает значения в таблицу. Калькулятор работает, когда я ввожу свои значения и нажимаю submit, но я продолжаю получать две ошибки "деление на ноль" в последней строке при первом запуске кода. Кажется, я не могу найти логическое решение или объяснения при поиске здесь или через 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 ;

?>

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

попробуйте использовать

$var = @($val1 / $val2);

$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/


если переменная не установлена, то это NULL и если вы попытаетесь разделить что-то на null, вы получите деление на нулевую ошибку


если он показывает ошибку только при первом запуске, это, вероятно, потому, что вы не отправили никаких данных POST. Вы должны проверить переменные POST перед работой с ними. Undefined, null, пустой массив, пустая строка и т. д. все считаются ложными; и когда PHP автоматически приводит это ложное логическое значение к целому числу или float, оно становится нулевым. Вот что происходит с вашими переменными, они не устанавливаются при первом запуске и поэтому рассматриваются как обнуляет.

10 / $unsetVariable

становится

10 / 0

итог: проверьте, существуют ли ваши входы и если они действительны, прежде чем делать что-либо с ними, также включите отчеты об ошибках, когда вы делаете локальную работу, так как это сэкономит вам много времени. Вы можете включить все ошибки, которые будут сообщаться следующим образом:error_reporting(E_ALL);

чтобы исправить вашу конкретную проблему:не делайте никаких вычислений, если нет ввода из вашей формы; просто покажите форму.


вы можете попробовать с этим.у вас есть эта ошибка, потому что мы не можем разделить '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;

когда мой делитель имеет значение 0

if ($divisor == 0) {
    $divisor = 1;
}

попробуй такое

if( isset($itemCost)!='' && isset($itemQty)!='')
{
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
else
{
echo "either of itemCost or itemQty are null ";
}
?>