私は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 ;
?>
フォーム処理コードを条件でラップして、最初にページを開いたときに実行されないようにする必要があります。そのようなもの:
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 ;
}
使用してみてください
$var = @($val1 / $val2);
$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/
変数が設定されていない場合、それはNULL
であり、何かをnullで除算しようとすると、ゼロ除算エラーが発生します。
最初の実行でのみエラーが表示される場合、おそらくPOSTデータを送信していないためです。作業する前にPOST変数を確認する必要があります未定義、null、空の配列、空の文字列などはすべてfalseと見なされ、PHPはその偽のブール値を整数または浮動小数点数に自動キャストすると、ゼロになります。それはゼロになります。変数で何が起こるか、それらは最初の実行では設定されないため、ゼロとして扱われます。
_10 / $unsetVariable
_
になる
_10 / 0
_
結論:入力が存在するかどうかを確認し、入力を使用する前に入力が有効であるかどうかを確認します。また、ローカル作業を行っているときにエラー報告を有効にします。次のようにすべてのエラーを報告できるようにすることができます:error_reporting(E_ALL);
特定の問題を修正するには、フォームからの入力がない場合は計算を行わないでください。代わりにフォームを表示するだけです。
私の除数の値が0のとき
if ($divisor == 0) {
$divisor = 1;
}
これで試すことができます。このエラーが発生するのは、'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;
これを試して
if( isset($itemCost)!='' && isset($itemQty)!='')
{
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
else
{
echo "either of itemCost or itemQty are null ";
}
?>