• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kleinen Taschenrechner optimieren

aJunkie

Mitglied
Hallo,

ich mache mich an meinen ersten kleinen Taschenrechner ran, der zwar funktioniert, aber ich bei den Fallentscheidungen hänge.

Hier erst der Code:
PHP:
<?php
    $title = "Taschenrechner";
    include ("head.php");
    if (isset($_REQUEST['do']) && $_REQUEST['do'] == "check")
    {
    // Pflichtfeldkontrolle
    
    $fehler = "";
    if (!isset($_REQUEST['zahla']) || $_REQUEST['zahla'] == "")
    {
        $fehler = "<strong>Bitte Aufgabe eingeben.</strong><br>";
    }
    
    $fehler = "";
    if (!isset($_REQUEST['zahlb']) || $_REQUEST['zahlb'] == "")
    {
        $fehler .= "<strong>Bitte Aufgabe eingeben.</strong><br>";
    }
    
    $keinname = "";
    if (!isset($_REQUEST['name']) || $_REQUEST['name'] == "")
    {
        $keinname = "<strong>Bitte gebe zuerst deinen Namen ein!</strong><br>";
    }
    
}
    echo "<h1>Kleiner Taschenrechner</h1>";
    if ($operator == "+")
    {
        $ergebnis = $zahla + $zahlb;    
    }
    
    if ($operator == "-")
    {
        $ergebnis = $zahla - $zahlb;    
    }
        
    if ($operator == "*")
    {
        $ergebnis = $zahla * $zahlb;    
    }
        
    if ($operator == "/")
    {
        $ergebnis = $zahla / $zahlb;
        $rest = $zahla % $zahlb;
    }
    
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php if ($keinname) echo '<font color="red"' . $keinname . '</font>'; ?>
<p><strong>Dein Name</strong>: <input type="text" name="name" size="20"></p>
<br>
<p><strong><u>Aufgabe eingeben</u></strong></p>
<?php if ($fehler) echo '<font color="red"' . $fehler . '</font>'; ?>
<br>
<p>
<input type="text" name="zahla" size="20" maxlength="20">
<input type="radio" name="operator" value="+" checked>+  
<input type="radio" name="operator" value="-">-
<input type="radio" name="operator" value="*">*  
<input type="radio" name="operator" value="/">/  
<input type="text" name="zahlb" size="20" maxlength="20"> = <?php echo "<strong>" . $ergebnis . "</strong>"; ?></p>
<?php if ($ergebnis) echo "<strong><u>Aufgabe:</u></strong> <br>" . $zahla . " " .$operator . " " . $zahlb . " = " . $ergebnis; ?>
<?php if ($rest) echo " <br><br><strong><u>Rest ist:</u></strong><br>" . $rest; ?>
<?php if ($ergebnis) echo "<br><br><strong>Haha :D " . $name . ", du hättest die Aufgabe bestimmt falsch gerechnet!. :D<br>"; ?>
<p>
<input type="hidden" value="check" name="do">
<br>
<input type="submit" value="Ausrechnen"></p>
</form>
<?php
include ("footer.php");
?>

Bitte erst einmal selbst ausprobieren.

Es wird eine Fehlermeldung ausgegeben, wenn Name und/oder eine Zahl in einer oder beiden der Felder fehlt.
Obwohl eine Fehlermeldung ausgegeben wird, wird das Ergebnis angezeigt.

Wie kann ich es so schreiben, dass das Ergebnis auch nur angezeigt wird, wenn Name und beide Zahlen vorhanden sind?

Warum beide Zahlen?
Ich weiß, dass wenn eines der beiden Zahlenfelder leer ist, wird das als 0 gewertet, aber dementsprechend leer sieht das Feld dann unter "Aufgabe" aus.

Besser wäre es, wenn eines der beiden Felder leer wäre, eine 0 ausgegeben wird, statt leer.

Hat jemand Ideen für die beiden Bedingungen?
Ich habe es schon mit break versucht.
Aber auch mit if($fehler) echo "" else echo $ergebnis... so ungefähr.
 
Okay, soweit habe ich es doch selbst hinbekommen.
Ich schreibe einen neuen Post, um den Script da oben zu lassen, damit andere User meine Fehler sehen. :-)

Edit: Endgültiger Code:
PHP:
<?php
    $title = "Taschenrechner";
    include ("head.php");
    if (isset($_REQUEST['do']) && $_REQUEST['do'] == "check")
    {
    // Pflichtfeldkontrolle
    
    $fehler = "";
    if (!isset($_REQUEST['zahla']) || $_REQUEST['zahla'] == "")
    {
        $fehler = "<strong>Bitte Aufgabe eingeben.</strong><br>";
    }
    
    $fehler = "";
    if (!isset($_REQUEST['zahlb']) || $_REQUEST['zahlb'] == "")
    {
        $fehler .= "<strong>Bitte Aufgabe eingeben.</strong><br>";
    }
    
    $keinname = "";
    if (!isset($_REQUEST['name']) || $_REQUEST['name'] == "")
    {
        $keinname = "<strong>Bitte gebe zuerst deinen Namen ein!</strong><br>";
    }
    
}
    echo "<h1>Kleiner Taschenrechner</h1>";
    if ($operator == "+")
    {
        $ergebnis = $zahla + $zahlb;    
    }
    
    if ($operator == "-")
    {
        $ergebnis = $zahla - $zahlb;    
    }
        
    if ($operator == "*")
    {
        $ergebnis = $zahla * $zahlb;    
    }
        
    if ($operator == "/")
    {
        $ergebnis = $zahla / $zahlb;
        $rest = $zahla % $zahlb;
    }
    
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php if ($keinname) echo '<font color="red"' . $keinname . '</font>'; ?>
<p><strong>Dein Name</strong>: <input type="text" name="name" size="20"></p>
<br>
<p><strong><u>Aufgabe eingeben</u></strong></p>
<?php if ($fehler) echo '<font color="red"' . $fehler . '</font>'; ?>
<br>
<p>
<input type="text" name="zahla" size="20" maxlength="20">
<input type="radio" name="operator" value="+" checked>&nbsp;+&nbsp;&nbsp;
<input type="radio" name="operator" value="-">&nbsp;-&nbsp;&nbsp;
<input type="radio" name="operator" value="*">&nbsp;*&nbsp;&nbsp;
<input type="radio" name="operator" value="/">&nbsp;/&nbsp;&nbsp;
<input type="text" name="zahlb" size="20" maxlength="20"> =
<?php if ($fehler) {
    echo ""; 
} elseif ($keinname) {
    echo ""; 
} else {
    if ($ergebnis) echo $ergebnis;
}
    ?></p>
<?php if ($ergebnis) echo "<strong><u>Aufgabe:</u></strong> <br>" . $zahla . " " .$operator . " " . $zahlb . " = " . $ergebnis . "<br>"; ?>
<?php if ($rest) echo " <br><br><strong><u>Rest ist:</u></strong><br>" . $rest; ?>
<?php if ($fehler) {
    echo ""; 
} elseif ($keinname) {
    echo ""; 
} else {
    if ($ergebnis) echo "<br><strong>Haha :D " . $name . ", du hättest die einfache Aufgabe bestimmt falsch gerechnet!. :D<br>";
}
    ?>
<p>
<input type="hidden" value="check" name="do">
<br>
<input type="submit" value="Ausrechnen"></p>
</form>
<?php
include ("footer.php");
?>
Frage: Würdet ihr es genau so schreiben, wenn die Ausgabe die selbe sein sollte?

Edit2: Ich sehe, dass das Ergebnis trotzdem angezeigt wird, obwohl "zahlb" leer ist.
Dieses werde ich, falls leer, als 0 ausgeben lassen.
 
Zuletzt bearbeitet:
Ich habe in diesem Abschnitt einen Syntax Fehler. Was ich will, ist glaub ich, deutlich zu sehen.

PHP:
    $fehler = "";
    if (!isset($_REQUEST['zahla']) || $_REQUEST['zahla'] == "" && if (!isset($_REQUEST['zahlb']) || $_REQUEST['zahlb'] == ""))
    {
        $fehler = "<strong>Bitte Aufgabe eingeben.</strong><br>";
    }
Also wenn zahla UND zahlb gleichzeitig leer sind... dann Bedingung.
Ich kann die beiden irgendwie nicht verbinden. &&
 
Zuletzt bearbeitet:
Vielleicht kennst du es noch aus dem Mathe-Unterricht :D
Es gibt dafür klammern :)
PHP:
    $fehler = "";
    if ((!isset($_REQUEST['zahla']) || $_REQUEST['zahla'] == "") && (!isset($_REQUEST['zahlb']) || $_REQUEST['zahlb'] == ""))
    {
        $fehler = "<strong>Bitte Aufgabe eingeben.</strong><br>";
    }
Mit dem 2. if hast du irgend wie falsch verstanden. Kannst verschiedene Bedingungen durch die || und && operatoren verknüpfen. Gleichzeitig kannst du das ganze noch durch Klammern auf Verschiedene Bereiche zusammenfassen mit Klammern

Oben steht übrigens sowas
wenn( ("zahl a nicht gesetzt" oder "zahl a leer") und ("zahl b nicht gesetzt" oder "zahl b leer") )
 
Danke. =)

Oh Mann, dass ich ganz außen noch zusätzliche Klammern setzen musste, bin ich gar nicht drauf gekommen. Dachte, der Anfang würde stimmen.

Danke dir. Es funktioniert. =)

Mache mich gerade an einen Prozentrechner, muss mich nur noch erinnern, wie man nochmal den Prozentwert ausrechnet :D
 
Danke. =)

Oh Mann, dass ich ganz außen noch zusätzliche Klammern setzen musste, bin ich gar nicht drauf gekommen. Dachte, der Anfang würde stimmen.

Danke dir. Es funktioniert. =)

Mache mich gerade an einen Prozentrechner, muss mich nur noch erinnern, wie man nochmal den Prozentwert ausrechnet :D


TeilDerZahl = GanzeZahl / 100 * Prozent
 
Zuletzt bearbeitet:
Danke.

Mein Taschenrechner rechnet, aber mein Prozentrechner irgendwie gar nicht mehr?! Vorher war es nur möglich den Prozentwert auszurechnen, aber ich wollte, dass man noch die anderen Fälle jeweils ausrechnen kann.

Hier der Script:
PHP:
<?php
    if (($prozentwert && $prozentsatz && (!isset($_REQUEST['grundwert'])))) {
        $grundwert = $prozentwert / $prozentsatz * 100;    
        $ergebnis = $prozentsatz . "% sind " . $prozentwert . ", also sind 100% (Grundwert) " . $grundwert;
    }

    if (isset($_REQUEST['prozentwert']) && (isset($_REQUEST['grundwert']) && (!isset($_REQUEST['prozentsatz'])))) {
        $prozentsatz = $prozentwert / $grundwert * 100;        
        $ergebnis = $prozentwert . " von " . $grundwert . " sind " . $prozentwert;
    }
    
    if (isset($_REQUEST['grundwert']) && (isset($_REQUEST['prozentsatz']) && (!isset($_REQUEST['prozentwert'])))) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
        $ergebnis = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    }
    
        
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p><strong>Grundwert</strong>: <input type="text" name="grundwert" value="<?php if ($grundwert) echo $grundwert; ?>"></p>
<p><strong>Prozentsatz</strong>: <input type="text" name="prozentsatz" value="<?php if ($prozentsatz) echo $prozentsatz; ?>"></p>
<p><strong>Prozentwert</strong>: <input type="text" name="prozentwert" value="<?php if ($prozentwert) echo $prozentwert; ?>"></p>

<?php if ($ergebnis) echo $ergebnis; ?>
<br>
<input type="submit" value="Ausrechnen">
</form>
?>
Wie man bei der ersten Abfrage sieht, ist kein isset vorhanden, weil ich dachte, es liegt daran. Bei den anderen beiden ist es da, aber es kommt kein Ergebnis bei raus.

Ich hab's:
PHP:
    if (($prozentwert && $prozentsatz && (!$grundwert))) {
        $grundwert = $prozentwert / $prozentsatz * 100;    
        $ergebnis = "<strong>" . $prozentsatz . "%</strong> sind <strong>" . $prozentwert . "</strong>, also sind 100% (Grundwert) <strong>" . $grundwert . "</strong>";
    }
 
Zuletzt bearbeitet:
Scheint alles zu funktionieren.
Hier der komplette Code für den Prozentrechner:
PHP:
<?php

    if (($prozentwert && $prozentsatz && (!$grundwert))) {
        $grundwert = $prozentwert / $prozentsatz * 100;    
        $ergebnis = "<strong>" . $prozentsatz . "%</strong> sind <strong>" . $prozentwert . "</strong>, also sind <strong>100% (Grundwert) = " . $grundwert . "</strong>";
    }

    if (($prozentwert && $grundwert && (!$prozentsatz))) {
        $prozentsatz = $prozentwert / $grundwert * 100;
        $ergebnis = "<strong>" . $prozentwert . "</strong> von <strong>" . $grundwert . "</strong> sind <strong>" . $prozentsatz . "%</strong>";
    }
    
    if (($grundwert && $prozentsatz && (!$prozentwert))) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
        $ergebnis = "<strong>" . $prozentsatz . "%</strong> von <strong>" . $grundwert . "</strong> sind <strong>" . $prozentwert . "</strong>";
    }
    
        
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p><strong>Grundwert</strong>: <input type="text" name="grundwert" value="<?php if ($grundwert) echo $grundwert; ?>"></p>
<p><strong>Prozentsatz</strong>: <input type="text" name="prozentsatz" value="<?php if ($prozentsatz) echo $prozentsatz; ?>"></p>
<p><strong>Prozentwert</strong>: <input type="text" name="prozentwert" value="<?php if ($prozentwert) echo $prozentwert; ?>"></p>

<?php if ($ergebnis) echo "<br>" . $ergebnis . "<br>"; ?>
<br>
<input type="submit" value="Ausrechnen">
</form>
?>

Wäre cool, wenn ihr vielleicht den Prozentrechner auch mal ausprobieren könntet, ob der wirklich richtig rechnet und mir vielleicht auch sagen, wie ich es hinbekomme, dass wenn ich 1-1 rechne, auch das Ergebnis, nämlich null angezeigt wird.
Der gibt derzeit nichts aus, wenn ich zahla mit zahlb subtrahiere.
Ich habe es nämlich schon so versucht:
PHP:
    if ($operator == "-" && $zahla == $zahlb && $zahlb == $zahla) {
        $ergebnis = 0;
Sobald ich beide gleichwertige Zahlen voneinander subtrahieren möchte, kommt keine Ausgabe.

Hier zu testen.
 
Gibts denn nur die zahl aus oder auch einen String davor? Denn wenn es als String ausgegeben wird, steht da auch 0. machst du dann einfach im Notfall so etwas.
echo "".$ergebnis;
oder
echo strval($ergebnis);
Beides sollte zu Folge haben, dass die 0 ausgegeben wird. Deine Abfrage oben kannst du dir also sparen :)
 
Ich denke, es wird als INT ausgeben mit strings verknüpft.

Hier die komplette Ausgabe:
PHP:
<?php if ($fehler) {
    echo ""; 
} elseif ($keinname) {
    echo ""; 
} else {
    if ($ergebnis) echo $ergebnis;
}
    ?></p>
<?php if ($keinname || $fehler) echo ""; elseif ($ergebnis) echo "<br><strong><u>Aufgabe | Ergebnis:</u></strong><br><br>" . $zahla . " " .$operator . " " . $zahlb . " = " . $ergebnis; ?>
<?php if (($operator == "/") && ($zahla < $zahlb)) echo ""; elseif ($rest) echo "  <strong>bleibt ein Rest von:</strong> " . $rest . "<br>"; ?>
<?php if ($fehler) {
    echo ""; 
} elseif ($keinname) {
    echo ""; 
} elseif ($ergebnis) {
    echo "<br><br><strong>Haha :D Oh Mann, " . $name . ", dass du für so eine einfache Aufgabe einen Taschenrechner brauchst.</strong> :D<br>";
    echo '<br><center><img src="/img/laughing.gif" alt="laughing" width="75" height="150"></center>';
}
    ?>

Und bei einer Division wie zum Beispiel 5 / 0 gibt er die 0 auch nicht aus, aber dafür diese Warnung:
Warning: Division by zero in /var/www/web0/html/taschenrechner.php on line 40

Warning: Division by zero in /var/www/web0/html/taschenrechner.php on line 41
 
Ja. :P Das wollte ich dem User ja auch zeigen.
Aber nun klappt's, außer dass diese Warning halt blöd aussieht.

Danke =)

So lerne ich PHP und gleichzeitig für Mathe. :P
Ich mache mich an den Zinsrechner ran.

Schönen Sonntag.
 
Zurück
Oben