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

if prüfung

Status
Für weitere Antworten geschlossen.

derwunner

Mitglied
Hallo,
ich wollte ein nettes Kopfrechenskript erstellen. Leider ist dabei ein Fehler aufgetreten. Ich möchte sagen, wenn der Wahrheitswert true ist, soll er ausgeben stimmt. Andernfalls falsch. Zuerst hatte ich es so probiert:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Kopfrechnen!</title>
    </head>
<body>
    <?php
    $ergebnis = 10 - 5;
        if (isset($_GET["submit"])) {
  if ($ergebnis == true) {
    echo "stimmt!";
    }
    else {echo "falsch!";}
    }
    ?>
    <form method="get" action="rechnen.php">
    10 - 5 = <input type="text" size="2" name="ergebnis">
    <input type="submit" name="submit">
    </form>
  
</body>
</html>

Aber es hatte mir bei einen falschen Ergebnis immer noch stimmt ausgegeben. Als nächstes hatte ich folgendes probiert:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Kopfrechnen!</title>
    </head>
<body>
    <?php
    $ergebnis = 10 - 5;
        if (isset($_GET["submit"])) {
  if ($ergebnis == true) {
    echo "stimmt!";
    }
    if ($ergebnis !== true) {
        echo "falsch!";
        }
    }
    ?>
    <form method="get" action="rechnen.php">
    10 - 5 = <input type="text" size="2" name="ergebnis">
    <input type="submit" name="submit">
    </form>
  
</body>
</html>

Hier hat es mir falsch und stimmt ausgegeben. Kann mir einer helfen? Beziehungseiße sagen, wie ich nur stimmt oder falsch ausgeben kann?

MFG derwunner
 
Werbung:
Dein $ergebnis hat den Wert 5 in deinem Beispiel, nicht true oder false.
Den wert der Benutzereingabe erhältst du mit $_POST[ergebnis]
Jetzt musst du testen, ob $ergebnis, das selbe ist, wie $_POST[ergebnis]
mit true und false hat das aber soweit ich das sehe nichts zu tun.
 
Lenchen hat bereits die Antwort gegeben.

Eine kurze Anmerkung noch zur true/false - Geschichte: In der Klammer nach dem if wird der Datentyp Boolean, also true oder false erwartet. Steht da irgendwas anderes, versucht er, dieses in den Datentyp umzuwandeln. Was dabei rauskommt, kann man gut mit var_dump testen:
PHP:
var_dump((bool) 5);
Meines Wissens werden bei Zahlen alle Zahlen außer 0 zu true. Das ist der Grund, warum dort immer richtig rauskam.

Den Grund für das Verhalten bei der zweiten Version kenne ich nicht, es könnte an dem = liegen, das zuviel dort steht. Statt
PHP:
if ($ergebnis !== true) {
heißt es
PHP:
if ($ergebnis != true) {
oder äquivalent
PHP:
if (!$ergebnis) {
Eine else-Anweisung ist hier aber zu bevorzugen.

Gruß
Junny

PS: Du solltest Deinen Code besser einrücken, um ihn lesbar zu machen.
PPS: Welches Tutorial/Buch liest Du? Ich empfehle Quakenet/#php Tutorial - de - Einleitung
 
Werbung:
Hallo,

bei !== ist kein = zu viel, sonst würde der PHP Parser auch einen Fehler liefern.

=== bzw. !== ist ein spezieller / erweiterter Gleicheitsoperator, der zusätzlich zum Wert auch den Typ überprüft. Bei ($ergebnis !== true) haben wir den Typ Integer und den Typ Bool, weshalb das Ergebnis der Abfrage true ist.

In der Abfrage ($ergebnis == true) werden zwei Werte unterschiedlichen Typs verglichen und daher wird $ergebnis zu Bool umgewandelt. Dabei wird alles außer 0 zu true.

In der Klammer nach dem if wird der Datentyp Boolean, also true oder false erwartet. Steht da irgendwas anderes, versucht er, dieses in den Datentyp umzuwandeln. Was dabei rauskommt, kann man gut mit var_dump testen:
Der erste Satz stimmt, if erwartet als Ergebnis einen Wert vom Typ Bool. Der zweite Teil ist allerdings falsch, denn das Ergebnis von ==, etc. muss Bool sein, nicht die Werte, die mit == verglichen werden.

Die Werte zwingend Bool sein zu lassen hätte auch nicht viel Sinn, man kann ja auch z.B. Strings miteinander vergleichen.

Die Umwandlung findet allein durch den Gleichheitsoperator statt, denn nur Variablen gleichen Typs können miteinander verglichen werden.

N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben