web-dev-qa-db-ja.com

PHP警告:ゼロ除算

私はPHPを学んでおり、実験的なフォームベースの計算機を作成しました(また、htmlとPOSTメソッドを使用)テーブルに値を返します。計算機は値を入力して送信をクリックすると機能します。しかし、コードを最初に実行したときに、最後の行に2つの「ゼロ除算」エラーが表示され続けます。ここまたは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 ;

?>
7
Chip

フォーム処理コードを条件でラップして、最初にページを開いたときに実行されないようにする必要があります。そのようなもの:

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 ;
}
8
S.A

使用してみてください

$var = @($val1 / $val2);
7
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;

$ itemCostと$ itemQtyはnullまたはゼロを返しています。ユーザー入力からのコードに何が付属しているかを確認してください

また、空のデータが追加されていないかどうかを確認するには:

if(!empty($_POST['num1'])){
  itemQty = $_POST['num1'];
}

変数で使用する前に、このリンクをチェックして投稿の検証を行うことができます

https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

6

変数が設定されていない場合、それはNULLであり、何かをnullで除算しようとすると、ゼロ除算エラーが発生します。

3
Neal

最初の実行でのみエラーが表示される場合、おそらくPOSTデータを送信していないためです。作業する前にPOST変数を確認する必要があります未定義、null、空の配列、空の文字列などはすべてfalseと見なされ、PHPはその偽のブール値を整数または浮動小数点数に自動キャストすると、ゼロになります。それはゼロになります。変数で何が起こるか、それらは最初の実行では設定されないため、ゼロとして扱われます。

_10 / $unsetVariable
_

になる

_10 / 0
_

結論:入力が存在するかどうかを確認し、入力を使用する前に入力が有効であるかどうかを確認します。また、ローカル作業を行っているときにエラー報告を有効にします。次のようにすべてのエラーを報告できるようにすることができます:error_reporting(E_ALL);

特定の問題を修正するには、フォームからの入力がない場合は計算を行わないでください。代わりにフォームを表示するだけです。

2
Shomz

私の除数の値が0のとき

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

これで試すことができます。このエラーが発生するのは、'zero' (0) value。で除算できないためです。計算を行う前に検証する必要があります。

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;
1
UWU_SANDUN

これを試して

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