• ベストアンサー

ゼロ除算

CSSすら理解してない私が見よう見まねでphpを使ってみたのですが、エラーが起こって困ってます。 Warning: Division by zero <?php $a = $_POST["a"]; $b = $_POST["b"]; $c = $a + $b; $d = $a / $c; $e = $d *5; echo $e; ?> <form action="test.php" method="post"> <input type="text" name="a"> <input type="text" name="b"> <input type="submit" name="bottun1" value="計算"> </form> 自己流で勝手に書いたので変なことになっていると思います。 エラーの原因は「$d = $a / $c;」でしょうか? 調べてみたら、どうやらゼロ除算というのが問題らしいです。 どうすれば解決できるでしょうか? それともしよろしければ、この様な計算をする場合の正しい書き方を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ks0902
  • ベストアンサー率85% (6/7)
回答No.5

PHP5以上をお使いであれば例外処理でエラーを 回避する方法があります。 PHP5以上でない場合はエラー判定した後、計算処理を するようにすればどうでしょうか? ●例↓ <?php $numA = $_POST["numA"]; $numB = $_POST["numB"]; $result = ""; $err_msg = ""; if ($numA != "" || $numB != "") {  // error判定  switch (true) {   case (!is_numeric($numA)):   case (!is_numeric($numB)):    $err_msg = 'error:数値を入力して下さい。';    break;   case ($numA + $numB == 0):    $err_msg = 'error:ゼロ除算はできません。';    break;  }  // 計算  if (!$err_msg) {   $result = ($numA / ($numA + $numB)) * 5;  } } /************* html ここから↓ *****************/ echo $err_msg; print <<<EOD <hr> (数値A ÷ (数値A + 数値B)) × 5 = $result <form action="test.php" method="post">  数値A:<input type="text" style="text-align:right" name="numA" value="$numA"><br>  数値B:<input type="text" style="text-align:right" name="numB" value="$numB"><br>  <input type="submit" name="" value="計算"> </form> EOD; /************* html ここまで↑ *****************/ ?>

参考URL:
http://www.phppro.jp/phptips/archives/vol45/2

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>No.2はいろんな意味でありえんから、やめたほうがいい。 わかりましたすみません。まじめに書きます。 <?php error_reporting( E_ALL | E_STRICT ); $a = isset($_POST["a"])?(int) $_POST["a"]:0; $b = isset($_POST["b"])?(int) $_POST["b"]:0; $c = $a + $b; if($c!==0){ $d = $a / $c; $e = $d *5; echo $e; } ?> <form method="post"> <p> <input type="text" name="a" /> <input type="text" name="b" /> <input type="submit" name="bottun1" value="cal" /> </p> </form>

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

回答というわけではないんですが、 HTML 5 から、pattern 属性が導入されていますし、ブラウザによってはすでにサポートされていますので、この属性を利用するのもありだと思います。データ型を指定できるよな属性があるとありがたかったりしますが、、、(この属性は値のチェックではなく、ユーザーへのヘルプくらいに捕らえてください) [HTML] <!-- 整数値の場合 --> <input type="text" name="b" pattern="[1-9][0-9]*"> [/HTML] http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#the-input-element J(ava)Script でチェックに飾りを付けてもいいでしょう。 一応 http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html この辺にも目を通しておいてください。 No.2はいろんな意味でありえんから、やめたほうがいい。動きゃいいってもんでもねーだろ。 # これ言うために現れた。 # ネチケットに引っかかるかな。まあいいや。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

初期値が設定してないので、0で割っちゃっているんですね まぁ最低限のエラー回避はつけておかないといけませんね <?php do{ $a = $_POST["a"]; $b = $_POST["b"]; $c = $a + $b; if(!$c) break; $d = $a / $c; $e = $d *5; echo $e; }while(false); ?> <form method="post"> <input type="text" name="a"> <input type="text" name="b"> <input type="submit" name="bottun1" value="cal"> </form>

noname#111181
noname#111181
回答No.1

お察しの通り、エラーの原因はは「$d = $a / $c;」の部分で、$c = $a +$b の結果がゼロになっている、つまり、フォームで A と B に足すとゼロになるような数値を入れたということです。 回避策は、PHP スクリプトを以下のように書きます。 -------------------------------------------- <?php $a = $_POST["a"]; $b = $_POST["b"]; $c = $a + $b; if ($c == 0) { echo 'ゼロで割り算しようとしました'; } else { $d = $a / $c; $e = $d * 5; echo $e; } ?>

関連するQ&A