2013-08-23 1 views
3

Я изучаю php и создаю экспериментальный калькулятор на основе форм (также используя метод POST метода html &), который возвращает значения в таблицу. Калькулятор функционирует, когда я ввожу свои значения и нажимаю «Отправить», но я продолжаю получать две ошибки «Деление на ноль» в последней строке при первом запуске кода. Кажется, я не могу найти логическое решение или объяснения при поиске здесь или через Google. Любые объяснения, которые вы можете предоставить новому, будут оценены.PHP Warning: Division by zero

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

?> 
+3

могли бы вы опубликовать соответствующий код? –

+3

Почему вы делаете '+ null'? И все переменные имеют значение? – putvande

+0

Null была моей попыткой, которую я хотел удалить перед публикацией – Chip

ответ

5

Вам нужно обернуть код обработки формы в условном, так что не запускается при первом открытии страницы. Что-то вроде этого:

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

Кроме того, это будет обрабатываться только в том случае, если все значения больше нуля. –

+0

Благодарим вас за разъяснение. Мне просто интересно, почему :) – Chip

2

Если переменная не установлена, то NULL и если вы пытаетесь разделить что-то на нуль вы получите делит на ноль

1

Если он показывает ошибку только на первом запуске, это вероятно, потому, что вы не отправили никаких POST-данных. Перед работой с ними вы должны проверить переменные POST. Неопределенный, пустой, пустой массив, пустая строка и т. Д. Считаются ложными; и когда PHP автоматически переводит это ложное логическое значение в целое число или float, оно становится равным нулю. Это то, что происходит с вашими переменными, они не заданы при первом запуске и, следовательно, рассматриваются как нули.

10/$unsetVariable 

становится

10/0 

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

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

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

+0

Я дам это прочитать. Очень признателен!! – Chip

+0

yw в любое время :) и, пожалуйста, повысьте, если это поможет, чтобы кто-то мог получить от этого выгоду :) –

0

попробовать это

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

Он работал, но все еще повторял инструкцию else. Спасибо!! – Chip

0

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

Try используя

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

Пожалуйста, отредактируйте с дополнительной информацией. Только код и «попробуйте» ответы не приветствуются, поскольку они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». – abarisone

1

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

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