2017-09-05 9 views
0

PHPで比較的新しい、私の3日目かそれを見て。私は、加算、減算、乗算、除算を持つ簡単なPHP電卓を作成しようとしてきました。これを出発点として使用したいと思った:Simple PHP calculatorしかし、私はそれが正しく動作するように問題を抱えてきた。シンプルなPHP電卓、ロジックと出力の問題

// HTMLコード

<form action="svar_vcalc.php" method="post"> 
    <p>Tall 1:<br/> 
    <input type="text" id="tall1" name="tall1"></p> 
    <p>Tall 2:<br/> 
    <input type="text" id="tall2" name="tall2"></p> 
    <input type="radio" name="gruppe1" id="plus" value="plus" checked="true">+ 
    <input type="radio" name="gruppe1" id="minus" value="minus">- 
    <input type="radio" name="gruppe1" id="multi" value="multi">* 
    <input type="radio" name="gruppe1" id="divisjon" value="divisjon">/ 
    <p></p> 
    <button type="submit" name="svar" id="svar" value="svar">Kalkuler</button> 
</form> 

// PHPコードの問題に今

<?php 
    $tall1 = $_POST['tall1']; 
    $tall2 = $_POST['tall2']; 
    $operator = $_POST["gruppe1"]; 
    switch($operator) 
    { 
     case "plus": 
      echo "Svaret er: " . $tall1 + $tall2; 
      break; 
     case "minus": 
      echo "Svaret er: " . $tall1 - $tall2; 
      break; 
     case "multi": 
      echo "Svaret er: " . $tall1 * $tall2; 
      break; 
     case "divisjon": 
      echo "Svaret er: " . $tall1/$tall2; 
      break; 
    } 
?> 

。最初の2つのケースのようです:「プラス」と「マイナス」は$ tall1を無視し、純粋に$ tall2だけを使用します。これらの場合、テキスト文字列は表示されません。一方、2つの最後のケースは、彼らが想定していたものを正常に表示します。

Ex。 これらの結果を与える$ tall2として$ tall1として1と2を入力:

  • ケース1:2
  • ケース2:-2
  • をケース3:SvaretのER:2
  • ケース4:報告者:0.5

この時点で私はこれがなぜ起こるのか分からず、誰かが解決策を持っているのだろうかと疑問に思っていましたか?私はif、elseif、elseを使うことは、コードのPHP側を再加工することによって可能な解決策になることを知っていますが、私はswitch、caseに固執することを好むでしょう。

答えて

3

実行順序が異なるためです。最初のケースでは、最初に$ tall1を文字列 "Svaret er:"に連結する場合はコードを使用します。そして$ tall2を追加します。 数式部分を括弧で囲んで修正できます。

switch($operator) 
{ 
    case "plus": 
     echo "Svaret er: " . ($tall1 + $tall2); 
     break; 
    case "minus": 
     echo "Svaret er: " . ($tall1 - $tall2); 
     break; 
    case "multi": 
     echo "Svaret er: " . ($tall1 * $tall2); 
     break; 
    case "divisjon": 
     echo "Svaret er: " . ($tall1/$tall2); 
     break; 
}