2017-01-02 1 views
-1

Ich versuche, einen einfachen PHP-Rechner mit swich case-Anweisung zu erstellen. Ich habe Bootstrap-Tasten für jede +, -, *,/Funktionen verwendet. Am Ende, wenn Benutzer das Formular ausfüllen und eine dieser Schaltflächen drücken, sollen die Ergebnisse in einem deaktivierten Textfeld angezeigt werden. Aber es wird nicht die Ergebnisse angezeigt werdenphp einfache switch case Rechnerfunktion zeigt keine Ergebnisse

<!DOCTYPE html> 
<html> 
<head> 
<title>SIMPLE CALCULATOR</title> 
<link rel="stylesheet" type="text/css" href="css/style.css"> 
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> 
</head> 
<body> 

<div class="container-fluid mainbox row"> 
    <h2 style="text-align: center;">Calculator</h2> 
    <div class="container-fluid calbox col-md-4 offset-md-4"> 
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
     <div class="form-group"> 
      <label style="padding-top: 10px;">Value 1</label> 
      <input type="text" class="form-control" placeholder="Value 1" name="val1" id="val1"> 
     </div> 
     <div class="form-group"> 
      <label>Value 2</label> 
      <input type="text" class="form-control" placeholder="Value 2" name="val2" id="val2"> 
     </div> 
     <div class="form-group row" style="padding-left: 10px;"> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="add">+</button> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="sub">-</button> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="mul">*</button> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="div">/</button> 
     </div> 
     <div class="form-group"> 
      <label>Result</label> 
      <input type="text" class="form-control" name="res" value="<?php cal() ?>" disabled> 
     </div> 
    </form> 
    </div> 
</div> 

     <?php 
     function cal(){ 
      if (isset($_POST['submit'])) { 
       $val1 = $_POST['val1']; 
       $val2 = $_POST['val2']; 

       $func = $_POST['btn']; 

       switch ($func) { 
        case "add": 
        $compute = $val1 + $val2; 
        break; 

        case "sub": 
        $compute = $val1 - $val2; 
        break; 

        case "mul": 
        $compute = $val1 * $val2; 
        break; 

        case "div": 
        $compute = $val1/$val2; 
        break; 

        default: 
        $compute = "error"; 
        break; 
       } 
       return $compute; 
      } 
     } 
    ?> 

<script type="text/javascript" src="js/jquery311.min.js"></script> 
<script type="text/javascript" src="js/tether.min.js"></script> 
<script type="text/javascript" src="js/bootstrap.min.js"></script> 

ein paar Tipps geben, das Problem zu bestimmen

+0

Sie können eine PHP-Funktion nicht aus einem HTML-Element aufrufen: 'value =" "'. – Jeff

+2

sollten Sie etw wie 'if (isset ($ _ POST ['submit'])) {echo cal(); } ' – Jeff

+1

Sie müssen die Funktion _before_ definieren, die Sie aufrufen, besser sogar in einer separaten Datei, die Sie einschließen. Dann müssen Sie die Ausgabe der Funktionen "echo". – arkascha

Antwort

1

konnte ich Ihren Code an die Arbeit indem Sie diese zwei Änderungen vornehmen:

  • <?php cal() ?> zu <?php echo cal(); ?> Ohne dies können Sie einige Ergebnisse berechnen, aber Sie geben es nie tatsächlich aus.

  • isset($_POST['submit']) zu isset($_POST['btn']) Ohne dass Sie nie ein Ergebnis berechnen. Sie definieren kein Eingabeelement mit dem Namen "submit", sondern definieren eines mit dem Namen "btn".


Abgesehen davon zwei allgemeine Bemerkungen:

  • sollten Sie diese Berechnungsfunktion in eine separate Datei bewegen und schließen es am Anfang der Datei. Das hält getrennte Dinge getrennt, Logik und Präsentation.
  • sollten Sie solche Berechnungen auf der Client-Seite in Betracht ziehen, die Sie von einer Neuberechnung der vollen Seite für jede Berechnung zu speichern.
+0

Vielen Dank Sir !!! Es funktionierte – Kasun

-1

Versuchen Sie folgendes:

<!DOCTYPE html> 
<html> 
<head> 
<title>SIMPLE CALCULATOR</title> 
</head> 
<body> 

<div class="container-fluid mainbox row"> 
    <h2 style="text-align: center;">Calculator</h2> 
    <div class="container-fluid calbox col-md-4 offset-md-4"> 
    <form method="post" action=""> 
     <div class="form-group"> 
      <label style="padding-top: 10px;">Value 1</label> 
      <input type="text" class="form-control" placeholder="Value 1" name="val1" id="val1"> 
     </div> 
     <div class="form-group"> 
      <label>Value 2</label> 
      <input type="text" class="form-control" placeholder="Value 2" name="val2" id="val2"> 
     </div> 
     <div class="form-group row" style="padding-left: 10px;"> 

      <input type="submit" name="submit" value="add" /> 
      <input type="submit" name="submit" value="sub" /> 
      <input type="submit" name="submit" value="mul" /> 
      <input type="submit" name="submit" value="div" /> 
     </div> 

    </form> 


    </div> 
</div> 

     <?php 
     function cal($val1,$val2,$func){ 
      switch ($func) { 
        case "add": 
        $compute = $val1 + $val2; 
        break; 

        case "sub": 
        $compute = $val1 - $val2; 
        break; 

        case "mul": 
        $compute = $val1 * $val2; 
        break; 

        case "div": 
        $compute = $val1/$val2; 
        break; 

        default: 
        $compute = "error"; 
        break; 
       } 
       return $compute; 

     } 
     // function cal(){ 
      if (isset($_POST['submit'])) { 
       // print_r($_POST); die; 
       $val1 = $_POST['val1']; 
       $val2 = $_POST['val2']; 
       $method = $_POST['submit']; 
       echo $result = cal($val1,$val2,$method); 

      } 
     // } 
    ?> 
+0

Entschuldigung, aber ich kann keinen Sinn daraus machen. Die beiden Versionen sind ungefähr identisch. Beide definieren einen Wert "add" für das Element Beide arbeiten als Submit-Element für das Formular Der Unterschied ist die erste ist HTML-Version und definiert eine echte Schaltfläche, die zweite ist die XHTML-Version und definiert ein Eingabeelement von _Type_Submit.Aber beide funktionieren wie weise.So tut dies _not_ Beantworten Sie die Frage – arkascha

0

prüfen $_POST['btn'] statt $_POST['submit']

var_dump($_POST) wurde aus Gründen der Klarheit enthalten, so können Sie sehen, was los ist.

Außerdem möchten Sie echo mit cal() verwenden, tatsächlich das Ergebnis anzuzeigen: value="<?php echo cal()?>"

ich hinzugefügt, um die eingegebenen Werte zu den val1 und val2 Feldern nach Drücken einer Taste, so dass sie mit dem Ergebnis erscheinen. Dies ist nicht notwendig, aber der Übersichtlichkeit halber hilft es, die in der Berechnung verwendeten Werte zu sehen.

<!DOCTYPE html> 
<html> 
<head> 
<title>SIMPLE CALCULATOR</title> 
</head> 
<body> 
<?php 
var_dump($_POST); 
$val1 = ""; 
$val2 = ""; 
if (isset($_POST['btn'])) { 
    $val1 = $_POST['val1']; 
    $val2 = $_POST['val2']; 
} 
?> 

<div class="container-fluid mainbox row"> 
    <h2 style="text-align: center;">Calculator</h2> 
    <div class="container-fluid calbox col-md-4 offset-md-4"> 
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
     <div class="form-group"> 
      <label style="padding-top: 10px;">Value 1</label> 
      <input type="text" class="form-control" placeholder="Value 1" name="val1" id="val1" value="<?php echo $val1 ?>"> 
     </div> 
     <div class="form-group"> 
      <label>Value 2</label> 
      <input type="text" class="form-control" placeholder="Value 2" name="val2" id="val2" value="<?php echo $val2 ?>"> 
     </div> 
     <div class="form-group row" style="padding-left: 10px;"> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="add">+</button> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="sub">-</button> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="mul">*</button> 
      <button type="submit" class="btn btn-outline-primary" name="btn" value="div">/</button> 
     </div> 
     <div class="form-group"> 
      <label>Result</label> 
      <input type="text" class="form-control" name="res" value="<?php echo cal()?>" disabled> 
     </div> 
    </form> 
    </div> 
</div> 

     <?php 
     function cal(){ 
     $compute = ""; 
      if (isset($_POST['btn'])) { 
       $val1 = $_POST['val1']; 
       $val2 = $_POST['val2']; 

       $func = $_POST['btn']; 

       switch ($func) { 
        case "add": 
        $compute = $val1 + $val2; 
        break; 

        case "sub": 
        $compute = $val1 - $val2; 
        break; 

        case "mul": 
        $compute = $val1 * $val2; 
        break; 

        case "div": 
        $compute = $val1/$val2; 
        break; 

        default: 
        $compute = "error"; 
        break; 
       } 
      } 
     return $compute; 
     } 
    ?> 
+0

A s bereits in den obigen Kommentaren gesagt: es ist völlig in Ordnung, die 'cal()' -Funktion innerhalb der kurzen Tags innerhalb der HTML-Eingabe Definition zu nennen. Es ist nicht nötig, es herauszuziehen und es vor dem Ergebnis des Codes zu platzieren. Das macht die Dinge nur komplexer. – arkascha

+0

@arkascha Einverstanden, dass es nicht notwendig ist. Es ist eine Frage der Präferenz und wenn der Rechner an Komplexität zunimmt, kann es andere Dinge geben, die mit dem Ergebnis gemacht werden (z. B. Geschichte). Wenn Sie es im Voraus tun, können Sie flexibler arbeiten. – mseifert

+0

Sorry, aber die ganze Aufgabe ist offensichtlich eine Lernaufgabe für Anfänger. Sollte dies wirklich an Komplexität zunehmen, muss es in separate Dateien aufgeteilt werden. Die Art, wie Sie versuchen, sie zu trennen, erhöht nur die Komplexität und erschwert das Lesen. – arkascha