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 ;
}
$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;
попробуй такое
if( isset($itemCost)!='' && isset($itemQty)!='')
{
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
else
{
echo "either of itemCost or itemQty are null ";
}
?>