• ベストアンサー

ゼロ除算

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;」でしょうか? 調べてみたら、どうやらゼロ除算というのが問題らしいです。 どうすれば解決できるでしょうか? それともしよろしければ、この様な計算をする場合の正しい書き方を教えてください。 よろしくお願いします。

  • PHP
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • 複数のフォームデータの更新

    こんにちは、 現在下記のような感じで、それぞれのIDごとに、 データを更新しておりますが、 これを一度の更新で、複数のデータの更新を行うには、 どうすればよいでしょうか?SQL文を繰り返せば出来そうですが!? いまひとつ、ピンとこないのでよろしくお願いいたします。 <form name="form1" method="post" action="kousin.php?id=1"> <td>あいう</td> <td><input name="A" type="text" id="A" size="2"></td> <td><input name="B" type="text" id="B" size="2"></td> <td><input name="C" type="text" id="C" size="2"></td> <input type ="submit" name = "submit" value = " 更新 "> <form name="form1" method="post" action="kousin.php?id=2"> <td>かきく</td> <td><input name="A" type="text" id="A" size="2"></td> <td><input name="B" type="text" id="B" size="2"></td> <td><input name="C" type="text" id="C" size="2"></td> <input type ="submit" name = "submit" value = " 更新 "> kousin.php側 $id = $_GET['id']; $time0 = $_POST['A']; $time1 = $_POST['B']; $time2 = $_POST['C']; $update = "update time_tb set "$time" where id='$id'";

    • 締切済み
    • PHP
  • 計算ができません

    こんにちは 以下のようなプログラムを書きましたが、文字列として扱われるみたいです。 計算させるにはどのようにしたらよいでしょうか? <html> <body> <form action="uektori.php" method="POST"> <input type="text" name="suuji1"> <select name="tasu"> <option value="+" selected>+</optinon> <option value="-" >-</optinon> <option value="*" >*</optinon> <option value="/" >/</optinon> </select> <input type="text" name="suuji2"> <input type="submit" value="送信"> <?php $a=($_POST['suuji1']); $b=($_POST['tasu']); $c=($_POST['suuji2']); $d="$a$b$c"; print "<br>"; print "$d"; ?> </body> </html> 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • formの入れ子の回避方法

    アドバイス下さい。 <form method="post" name="addForm" id="addForm" action="aaa.php"> <input type="text" name="textA" id="textA"> <form method="post" name="uploadFormA" id="uploadFormA" enctype="multipart/form-data" action="aaa.php"> <input type="text" name="text1" id="text1"> <input type="file" name="upload_fileA" id="upload_fileA"> <input type="button" value="アップロード"> </form> <form method="post" name="uploadFormB" id="uploadFormB" enctype="multipart/form-data" action="aaa.php"> <input type="text" name="text2" id="text2"> <input type="file" name="upload_fileB" id="upload_fileB"> <input type="button" value="アップロード"> </form> <form method="post" name="uploadFormC" id="uploadFormC" enctype="multipart/form-data" action="aaa.php"> <input type="text" name="text3" id="text3"> <input type="file" name="upload_fileC" id="upload_fileC"> <input type="button" value="アップロード"> </form> <input type="text" name="textB" id="textB"> <input type="submit" value="送信"> </form> のような、formが入れ子になってしまっているformがあります。 これを回避する方法を教えていただきたいです。 条件としては、 ・見た目はこの順番がいい。 ・javascript、CSS等なんでも良いです。 ・各「アップロード」ボタンで、text1,2,3,4、upload_fileA,B,C,Dを送信、「送信」ボタンでtextA,Bを送信したい。 以上、お願いいたします。

    • ベストアンサー
    • HTML
  • if文での条件分岐後の出力内容を他のページへ移動させたい

    お世話になります。現在ショッピングカートを製作しているのですが、b.phpで条件分岐をし、商品名、金額を表示させるのですが、表示させた内容をどのようにしたら、c.phpやd.phpに移動させることが出来るのでしょうか?ちなみにセッションを利用しています。 a.php(選択画面)→b.php(商品名・金額を表示)→c.php(送付先入力)→d.php(送付先入力確認)→e.php(メール送信) a.php ------------------------------------------------- <form name="form1" method="post" action="b.php"> <input type="radio" name="a" value="1">ラーメン <input type="radio" name="a" value="2">ソバ <input type="radio" name="b" value="1">うどん <input type="radio" name="b" value="2">パスタ <input type="submit" name="Submit" value="送信"> </form> ------------------------------------------------- b.php <form name="form1" method="post" action="c.php"> <?php session start(); $_SESSION['php']=$_POST['a']; $_SESSION['p']=$_POST['b']; ?> <?php if($_SESSION['php']==1 && $_SESSION['p']==1){ print "ラーメン&うどん" } 省略 ?> <?php if($_SESSION['php']==1 && $_SESSION['p']==1){ print "1000円" 省略 <input type="submit" name="Submit" value="送信"> </form> ------------------------------------------------- 上記のラーメン&うどん、と1000円をc.phpへ移動させるにはどのようにすればよいでしょうか? おわかりになられる方ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • URLにパラメータを記述して結果を得るには?

    URLにパラメータを記述して結果を得るには? フォームに入力する内容を、URLに記述してアクセスしたいのですが、 うまくいきません。どこが悪いのでしょうか。 ■うまくいかないURL(自作) http://www.*********/test.php?AAAA=A1&BBBB=B1&CCCC=C1&DDDD=D1&submit=E1 ■フォームのソース <form action=test.php method=post name=test> <input type=hidden name=AAAA value=A1> <input type=text maxlength=4 name=BBBB value="B1"> <input type=text maxlength=2 name=CCCC value="C1"> <select name="DDDD"> <option value="D1">DDDD1</option> <option value="D2" selected="selected">DDDD2</option> </select> <input type=submit value=E1> <input type=submit NAME="FFFF" value="F1"> </form> ■補足 ソースに対してご意見があるかもしれませんが、ソースは変更できません。 そういった前提でお願い致します。

    • ベストアンサー
    • PHP
  • 再度読み込みは出来ないのでしょうか?

    各テキストボックスに値を入れて、 C11 = a11 * b11 + a12 * b21 + a13 * b31、 c12 = a11 * b12 + a12 * b22 + a13 * b32、 : : c21 = a21 * b11 + a22 * b21 + a23 * b31 c22 = a21 * b12 + a22 * b22 + a23 * b32・・・ としたいのですが、うまくロジックが思いつきません。 単純に式をずらずら書いたのですが、c12以降の欄がすべてゼロになってしまいます。 いい方法を教えてください。お願いします。 <head> <script> function kei(){ var form_a=document.getElementById('A'); var form_b=document.getElementById('B'); var form_c=document.getElementById('C'); var keic11 = 0; var keic12 = 0; : : keic11=parseInt(form_a.a11.value) * parseInt(form_b.b11.value) * parseInt(form_a.a12.value) * parseInt(form_b.b21.value) + parseInt(form_a.a13.value) * parseInt(form_b.b31.value); form_c.c11.value = keic11; keic12=parseInt(form_a.a11.value) * parseInt(form_b.b12.value) + parseInt(form_a.a12.value) * parseInt(form_b.b22.value) + parseInt(form_a.a13.value) * parseInt(form_b.b32.value); form_c.c12.value = keic12;     :     : } </script> </head> <body> <table border = 1> <form id = "A"> <tr> <td> <input type = "text" size = 5 name = "a11"></input> </td> <td> <input type = "text" size = 5 name = "a12"></input> </td> <td> <input type = "text" size = 5 name = "a13"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "a21"></input> </td> <td> <input type = "text" size = 5 name = "a22"></input> </td> <td> <input type = "text" size = 5 name = "a23"></input> </td> </tr> </form> </table> <table boeder = 1> <tr> <input type = "button" onClick="kei()" value = "×"></input> </tr> </table> <table border = 1> <form id = "B"> <tr> <td> <input type = "text" size = 5 name = "b11"></input> </td> <td> <input type = "text" size = 5 name = "b12"></input> </td> <td> <input type = "text" size = 5 name = "b13"></input> </td> <td> <input type = "text" size = 5 name = "b14"></input> </td> <td> <input type = "text" size = 5 name = "b15"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "b21"></input> </td> <td> <input type = "text" size = 5 name = "b22"></input> </td> <td> <input type = "text" size = 5 name = "b23"></input> </td> <td> <input type = "text" size = 5 name = "b24"></input> </td> <td> <input type = "text" size = 5 name = "b25"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "b31"></input> </td> <td> <input type = "text" size = 5 name = "b32"></input> </td> <td> <input type = "text" size = 5 name = "b33"></input> </td> <td> <input type = "text" size = 5 name = "b34"></input> </td> <td> <input type = "text" size = 5 name = "b35"></input> </td> </tr> </form> </table> 答え <table border = 1> <form id = "C"> <tr> <td> <input type = "text" size = 5 name = "c11"></input> </td> <td> <input type = "text" size = 5 name = "c12"></input> </td> <td> <input type = "text" size = 5 name = "c13"></input> </td> <td> <input type = "text" size = 5 name = "c14"></input> </td> <td> <input type = "text" size = 5 name = "c15"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "c21"></input> </td> <td> <input type = "text" size = 5 name = "c22"></input> </td> <td> <input type = "text" size = 5 name = "c23"></input> </td> <td> <input type = "text" size = 5 name = "c24"></input> </td> <td> <input type = "text" size = 5 name = "c25"></input> </td> </tr> </form> </table> </body>

  • FORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

       以下のような画面を作りたいのですが↓ -------------------------------------------------------------------------------- ● a.php (ユーザ情報入力画面) ※フォームに入力する画面    <FORM method="POST" action="b.php">   <INPUT type="text" name="mail">   <INPUT type="submit" name="submit" value="確認">  </FORM> ● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面  <FORM method="POST" action="c.php">   <!-- ここには、フォームに入力された値を表示する -->   <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する   <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る  </FORM> ● c.php (完了画面) -------------------------------------------------------------------------------- b.php について質問なのですが、 b.phpにおいて、登録ボタンと戻るボタンを2つつけて、 それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・? <FORM method="POST" action="c.php">と書いてしまうと、 戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね?? こういう場合ってJavaScriptとかで遷移先を指定するんですか・・? もしそうでしたら、JavaScriptがよくわからないので できればサンプルコード示していただけると助かります・・・。   

  • POSTデータのNAME属性をVALUEによって取得する方法

    HTML→PHPのPOSTデータのやりとりについて、 【HTML】 <form name="form1" method="post" action="xxx.php"> <input name="01" type="text" value="1"> <input name="02" type="text" value="0"> <input name="03" type="text" value="0"> <input name="04" type="text" value="1"> <input type="submit" name="Submit" value="送信"> </form> 【xxx.php】 フォームから送信されたデータを使って、「value」が"1"の「name」を拾うのにはどのように書けばいいでしょう? ↓このように取得したいです。 $data[0]="01"; $data[1]="04"; よろしくお願いします。

    • ベストアンサー
    • PHP
  • ボタンを用いたフレームのリンクについて

    フレームで右と左に分割していて左のフレームで数字を入力して計算と書かれたボタンを押すと右のフレームに計算結果を表示する方法がわかりません。 具体的なソースとしては まず、フレーム分割部分は <html> <head> <title>計算機</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <Frameset cols="25%,*" Frameborder="yes" Scrolling="auto"> <frame src="calc.html" NAME="hidari"> <frame src="calc.php" NAME="migi"> </frameset> </html> このようになっていてcalc.htmlは <html> <head> <title>calc.html</title> </head> <body> <form name="form1" action="calc.php" method="post"> <input type = "text" name = "txtA"> +  <input type = "text" name = "txtB"> = ?  <br> <input type="submit" value="計算"> </form> </body> </html> このようになっておりcalc.phpは <html> <head> <title>calc.php</title> </head> <body> <?php $a = $_POST['txtA']; $b = $_POST['txtB']; $c = $a + $b; print ($a." + ".$b." = ".$c."\n"); ?> </body> </html> このようになってます。 現在は計算ボタンを押すと左フレームにcalc.phpが表示されるのでこれを右フレームに表示させたいです。 どなたか詳しい方お願いします。

    • ベストアンサー
    • HTML
  • 配列を使って値を受け取る方法で困っています(PHP)

    こんにちは、よろしくお願い致します。 現在使用している環境が2つあります。 Win2000+Apache1.3+PHP4.2.3 RedHatLinux8.0+Apache1.3+PHP4.2.3 そのうちLinux環境の方では、配列がうまく使えません。 お手数ですが、具体的な結果は test.html、test.phpのソースと実行結果をご覧下さい。 両方の環境のApacheやPHPの設定ファイルをチェックしたのですが 特に怪しいところはなく、とても困ってます。 アドバイスお願い致します。 (test.html)-- <HTML><BODY> <form action=./test.php method=post> <input type=input name=a[0] value="1"> <input type=input name=b[0] value="12"> <input type=input name=c[0] value="123"> <input type=input name=d[0] value="1234"> <input type=input name=e[0] value="12345"> <input type=input name=f[0] value="123456"> <input type=submit name=submit value="OK"> </form> </BODY></HTML> ------------ (test.php)-- <?php print_r($HTTP_POST_VARS); ?> ------------ 【 Win環境の結果 】 Array ( [a] => Array ( [0] => 1 ) [b] => Array ( [0] => 12 ) [c] => Array ( [0] => 123 ) [d] => Array ( [0] => 1234 ) [e] => Array ( [0] => 12345 ) [f] => Array ( [0] => 123456 ) [submit] => OK ) 【 Linux環境の結果 】 Array ( [a] => Array ( [0] => 1 ) [b] => Array ( [0] => 12 ) [c] => Array ( [0] => 123 ) [d] => Array ( [0] => ) [e] => Array ( [0] => 5 ) [f] => Array ( [0] => 56 ) [submit] => OK )

    • ベストアンサー
    • PHP

専門家に質問してみよう