Intereting Posts
Как получить миниатюру из базы данных wordpress на внешнюю страницу Выбор SQL из двух таблиц возвращает повторяющиеся значения – Codeigniter Извлечение данных из корзины и отправка по почте Подпись Google Cloud Storage Url – SignatureDoesNotMatch Разрешение PHP mkdir Отказано в работе в Windows Server 2008 IIS 7 из-за атрибута только для чтения? Magento: получить цену продукта от группы клиентов Редактор шаблона PHP, использующий хранилище файлов, базу данных или и то, и другое? Отправлять электронную почту с разрывами строк, используя mail () в php Mysql – выбор из нескольких таблиц без дублирования данных Страница заказов WooCommerce добавляет пользовательский столбец пользователя Избегайте двойного кодирования в <INPUT> при использовании htmlspecialchars Вставка таблицы MySQL Почему Apache выполняет файлы .php.html как PHP? Каков наилучший способ отправки массива JavaScript в PHP-скрипт с помощью GET? Оберните текст каждые 2500 символов в <div> для разбивки на страницы, используя PHP или javascript

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

Я изучаю 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;