10

私はphpを学んでいて、値をテーブルに返す実験的なフォームベースの計算機(htmlとPOSTメソッドも使用)を構築しました。値を入力して [送信] をクリックすると電卓は機能しますが、最初にコードを実行すると、最後の行で 2 つの「0 による除算」エラーが発生し続けます。ここや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 ;

?>
4

11 に答える 11

13

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

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 ;
}
于 2013-08-23T17:47:49.667 に答える
7
$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/

于 2013-08-23T17:41:36.143 に答える
3

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

于 2013-08-23T17:39:22.533 に答える
2

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

10 / $unsetVariable

になる

10 / 0

結論: 入力が存在するかどうか、入力が有効かどうかを確認してから何かを実行してください。また、ローカル作業を行っている場合はエラー報告を有効にしてください。時間を大幅に節約できます。次のように、すべてのエラーの報告を有効にすることができます。error_reporting(E_ALL);

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

于 2013-08-23T17:40:36.373 に答える
0

これを試して

if(isset($itemCost) != '' && isset($itemQty) != '')
{
    $diffPricePercent = (($actual * 100) / $itemCost) / $itemQty;
}
else
{
    echo "either of itemCost or itemQty are null";
}
于 2013-08-23T17:44:22.700 に答える