Я изучаю 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 ; ?>
Вам нужно обернуть код обработки формы в условном выражении, чтобы он не запускался при первом открытии страницы. Что-то вроде этого:
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 ; }
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
$ itemCost и $ itemQty возвращают нуль или ноль, проверяют их, что они приходят с кодом с пользовательского ввода
также проверить, не добавлены ли пустые данные:
if(!empty($_POST['num1'])){ itemQty = $_POST['num1']; }
и вы можете проверить эту ссылку для проверки почты перед ее использованием в переменной
https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
Если переменная не задана, она равна NULL
и если вы попытаетесь делить что-то на нуль, вы получите деление на нулевую ошибку
Если он показывает ошибку только при первом запуске, это, вероятно, потому, что вы не отправили никаких POST-данных. Перед работой с ними вы должны проверить переменные POST. Неопределенный, пустой, пустой массив, пустая строка и т. Д. Считаются ложными; и когда PHP автоматически переводит это ложное логическое значение в целое число или float, оно становится равным нулю. Это то, что происходит с вашими переменными, они не заданы при первом запуске и, следовательно, рассматриваются как нули.
10 / $unsetVariable
становится
10 / 0
Итог: проверьте, существуют ли ваши входы и если они действительны, прежде чем что-либо делать с ними, также включите отчет об ошибках, когда вы выполняете локальную работу, так как это сэкономит вам много времени. Вы можете включить все сообщения об ошибках следующим образом: error_reporting(E_ALL);
Чтобы исправить вашу конкретную проблему: не делайте никаких вычислений, если нет данных из вашей формы; просто покажите форму.
Попробуйте использовать
$var = @($val1 / $val2);
попробуй это
if( isset($itemCost)!='' && isset($itemQty)!='') { $diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ; } else { echo "either of itemCost or itemQty are null "; } ?>
Вы можете попробовать с этим. У вас есть эта ошибка, потому что мы не можем делить на 'zero' (0)
value.so, мы хотим проверить это раньше, когда делаем вычисления.
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;