Jnnbo: If Abfrage

Moin,

ich verstehe die Welt gerade nicht mehr. Ich prüfe ob ein Wert Vorhanden ist wie folgt:

<?php if($object1->kd_fax > 0) {?>
Ja
<?php }?>

Diese Ausgabe funktioniert. Wenn das Feld Fax leer ist, wird auch nichts angezeigt. Mein zweites Feld hingegen wird überhaupt nicht berücksichtigt:

<?php if($object1->kd_email > 0) {?>
Ja
<?php }?>

Hier wird einfach nichts ausgegeben. Wenn ich mir $object1->kd_email ausgeben lasse, ist eine Mail Adresse vorhanden, warum wird also die Abfrage nicht berücksichtigt? Ich sehe kein Fehler.

EDIT:

Komisch, wenn ich es so prüfe

if(isset($object1->kd_email))

wird es berücksichtigt, nur die Frage bleibt, warum greift das nicht wie ich es beim Fax gemacht habe?

  1. <?php if($object1->kd_email > 0) {?> Ja <?php }?>

    Hier wird einfach nichts ausgegeben. Wenn ich mir $object1->kd_email ausgeben lasse, ist eine Mail Adresse vorhanden, warum wird also die Abfrage nicht berücksichtigt?

    Na, sowas aber auch. Du möchtest jetzt nicht ernsthaft wissen, ob zum Beispiel der Text "Hasimaus" größer als Null ist? Denke da doch bitte mal drüber nach. Ich schaue derweil mal, ob es draußen kälter als Apfel ist.

    1. Hallo Regina,

      Na, sowas aber auch. Du möchtest jetzt nicht ernsthaft wissen, ob zum Beispiel der Text "Hasimaus" größer als Null ist? Denke da doch bitte mal drüber nach. Ich schaue derweil mal, ob es draußen kälter als Apfel ist.

      DOCH ich möchte wissen, ob der Text "Hasimaus" größer als 0 ist, wenn er kleiner als 0 ist, dann muss das Feld nicht angezeigt werden.

      1. Tach,

        DOCH ich möchte wissen, ob der Text "Hasimaus" größer als 0 ist, wenn er kleiner als 0 ist, dann muss das Feld nicht angezeigt werden.

        nein, möchtest du nicht, du hast hier einen String keine Zahl; PHP wird dir zwar den Gefallen tun und alles in seiner Macht stehende tun, um den String in eine Zahl umzuwandeln, weswegen es bei den von dir getesteten Fax-Nummern geht (ein String der z.B. mit einer öffnenden Klammer für die Vorwahl beginnt ist laut PHP auch nicht größer als Null), aber das ist nicht das, was du möchtest, dich interessiert nur die Länge des Strings.

        mfg
        Woodfighter

      2. Hallo Jnnbo,

        DOCH ich möchte wissen, ob der Text "Hasimaus" größer als 0 ist, wenn er kleiner als 0 ist, dann muss das Feld nicht angezeigt werden.

        schau Dir mal die Tabelle zu Typenvergleichen in PHP an, da solltest Du erkennen, was wann wie ausgewertet wird.

        Vermutung: In $object1->kd_fax steht eine Zahl, bzw. ein String der ausschließlich aus Ziffern besteht, daher ist das Ergebnis > 0, wenn, wie anzunehmen, die Faxnummer nicht gleich 0 ist. In $object1->kd_email steht vermutlich ein String, der nicht ausschließlich aus Ziffern besteht. PHP macht aus diesem String beim Vergleich die Zahl 0 und 0 > 0 ist falsch (false).

        Gruß Dennis

      3. Na, sowas aber auch. Du möchtest jetzt nicht ernsthaft wissen, ob zum Beispiel der Text "Hasimaus" größer als Null ist? Denke da doch bitte mal drüber nach. Ich schaue derweil mal, ob es draußen kälter als Apfel ist.

        DOCH ich möchte wissen, ob der Text "Hasimaus" größer als 0 ist

        Ich weiss nicht, wo du zur Schule gegangen bist, aber in diesem Universum ist mathematisch-logisch ein Ding der Unmöglichkeit, einen Text mit einer Zahl zu vergleichen.

        PHP erlaubt dir so einen Schwachsinn und übernimmt das Denken für dich, indem es versucht, eine Zahl aus dem Text herauszulesen, aber es bleibt Schwachsinn.

        Vergleiche die Variable mit dem Leertext "" oder prüfe, ob die Länge des Textes größer als 0 ist, aber vergleiche bitte nicht den Text selbst mit 0.

        1. Nachmittag.

          @Regina Schlaukrug

          Na, sowas aber auch. Du möchtest jetzt nicht ernsthaft wissen, ob zum Beispiel der Text "Hasimaus" größer als Null ist? Denke da doch bitte mal drüber nach. Ich schaue derweil mal, ob es draußen kälter als Apfel ist.

          Ich weiss nicht, wo du zur Schule gegangen bist, aber in diesem Universum ist mathematisch-logisch ein Ding der Unmöglichkeit, einen Text mit einer Zahl zu vergleichen.

          Vergleiche die Variable mit dem Leertext "" oder prüfe, ob die Länge des Textes größer als 0 ist, aber vergleiche bitte nicht den Text selbst mit 0.

          ... didaktisch besonders wertvoll.

          Und wenn wir schon beim Stein des Anstoßes sind, würde ich auch gerne von Frau Prof. wissen in welchen Universum sie lebt, bzw. wo sie zur Schule gegangen ist? Dann würde sich mir nämlich erschließen, in welcher unbescholtenen Ecke unseres Universums man behauptet "Hasimaus" === "" wäre eine mathematisch-logische Operation und "Hasimaus" > 0 nicht. Denk doch bitte mal darüber nach.

          Stellvertretend dürfen das auch alle, die deinen 1. Beitrag für hilfreich hielten. Ich schau derweil mal ...

          lg

          1. Hi,

            Ich weiss nicht, wo du zur Schule gegangen bist, aber in diesem Universum ist mathematisch-logisch ein Ding der Unmöglichkeit, einen Text mit einer Zahl zu vergleichen.

            aus einem ganz ähnlichen Universum komme ich wohl auch.

            ... didaktisch besonders wertvoll.

            Ja, finde ich auch.

            Dann würde sich mir nämlich erschließen, in welcher unbescholtenen Ecke unseres Universums man behauptet "Hasimaus" === "" wäre eine mathematisch-logische Operation und "Hasimaus" > 0 nicht. Denk doch bitte mal darüber nach.

            Gut, da du selber das anscheinend vergessen hast, holen wir das mit dem Nachdenken mal nach.

            In der Mathematik haben wir es mit Zahlen, Vektoren, Mengen oder ähnlichem zu tun; das Grundelement ist aber immer wieder ein Zahlenwert, ein Skalar. Die kann man miteinander vergleichen - nicht nur auf Gleichheit, sondern auch anhand einer Größer-Kleiner-Relation.

            Verlassen wir die reine Mathematik und gehen in die Physik, wo wir nicht mit rein numerischen Angaben hantieren, sondern mit physikalischen Größen. Da wird's mit dem Vergleichen schon knifflig, weil ein Größer/Kleiner-Vergleich nur dann sinnvoll ist, wenn beiden Operanden zumindest dieselbe physikalische Größe darstellen. Wir bekommen also keine sinnvolle Aussage, ob 20 Sekunden größer oder kleiner sind als 100 Meter. Wir können bestenfalls feststellen: Die beiden Angaben sind ungleich.

            Und in Programmiersprachen sieht es ähnlich aus: Konstanten, Variablen und Ausdrücke haben einen Typ, und Vergleiche sind nur durchführbar, wenn die Operanden vom gleichen Typ sind oder wenigstens eine eindeutige Umwandlungsvorschrift existiert. Falls nicht, bleibt auch nur die einzig mögliche Aussage: Die Operanden sind ungleich. Die Frage nach Größer oder Kleiner ergibt aber keinen Sinn.

            Programmiersprachen mit starker (statischer) Typisierung lehnen übrigens sogar den reinen Vergleich auf gleich/ungleich ab, wenn die Operanden nicht typkompatibel sind.

            Stellvertretend dürfen das auch alle, die deinen 1. Beitrag für hilfreich hielten. Ich schau derweil mal ...

            Ja, mach mal.

            So long,
             Martin

            1. @@Der Martin

              In der Mathematik haben wir es mit Zahlen, Vektoren, Mengen oder ähnlichem zu tun; das Grundelement ist aber immer wieder ein Zahlenwert, ein Skalar.

              Dem würde ich jetzt aber mal energisch widersprechen. „Die gesamte Mathematik, wie sie heute üblicherweise gelehrt wird, ist in der Sprache der Mengenlehre formuliert und baut auf den Axiomen der Mengenlehre auf.“ [Wikipedia]

              Nichts mit Zahlen als Grundelement.

              Dass Mathematik oft als Kunst des Rechnens missverstanden (oder gar so gelehrt) wird, ist wohl ein Grund ihrer Unbeliebtheit bei Schülern.

              LLAP 🖖

              --
              „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          2. Ich weiss nicht, wo du zur Schule gegangen bist, aber in diesem Universum ist es mathematisch-logisch ein Ding der Unmöglichkeit, einen Text mit einer Zahl zu vergleichen.

            Vergleiche die Variable mit dem Leertext "" oder prüfe, ob die Länge des Textes größer als 0 ist, aber vergleiche bitte nicht den Text selbst mit 0.

            Dann würde sich mir nämlich erschließen, in welcher unbescholtenen Ecke unseres Universums man behauptet "Hasimaus" === "" wäre eine mathematisch-logische Operation

            Ein Vergleich Text mit Text ist keine mathematische Operation und das hat auch niemand behauptet. Es ist aber eine Operation, die einen Sinn ergibt, die sich logisch erschließt, die vor allem aber für solche Fälle wie den vorliegenden anwendbar ist. Es geht hier letztlich darum, ob eine Eingabe der E-Mail-Adresse erfolgt ist, nicht darum, ob die E-Mail-Adresse größer als 0 ist.

            und "Hasimaus" > 0 nicht.

            Wir sind uns sicher einig darüber, dass eine Zahl zur Mathematik gehört, aber zu welchen mathematischen Elementen zählst du einen Text? Oder vielleicht etwas einfacher: Welchen mit einer Zahl vergleichbaren Wert hat ein Text, welche allgemeingültige Regel würdest du dafür festlegen? Sobald du das erklären kannst, würde ich darüber nachdenken, ob dieser Vergleich irgendeiner Logik folgen kann, lieber Jnnbo. Bis dahin bleibe ich dabei: "Hasimaus" > 0 ist Schwachsinn.

    2. Hallo,

      Ich schaue derweil mal, ob es draußen kälter als Apfel ist.

      Um diese Zeit ist die Birne bestimmt schon blau!

      Gruß
      Kalk

      1. @@Tabellenkalk

        Ich schaue derweil mal, ob es draußen kälter als Apfel ist. Um diese Zeit ist die Birne bestimmt schon blau!

        Und die Zitatesammlung macht blau.

        chmod a+w zitatesammlung

        LLAP 🖖

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    3. Na, sowas aber auch. Du möchtest jetzt nicht ernsthaft wissen, ob zum Beispiel der Text "Hasimaus" größer als Null ist? Denke da doch bitte mal drüber nach. Ich schaue derweil mal, ob es draußen kälter als Apfel ist.

      - What's 5 apples minus 7 bananas?

      - Antimatter fruit salad?

      1. Tach!

        - What's 5 apples minus 7 bananas?

        - Antimatter fruit salad?

        Aber dann musst du noch 2 Pfirsiche in die Schale legen, damit kein Obst mehr drin ist.

        dedlfix.

  2. Hallo,

    ich verstehe die Welt gerade nicht mehr. Ich prüfe ob ein Wert Vorhanden ist wie folgt:

    <?php if($object1->kd_fax > 0) {?>
    Ja
    <?php }?>
    

    eine Faxnummer ist in aller Regel eine Folge von Ziffern, lässt sich also als Zahlenwert interpretieren und ergibt dann wohl einen Wert größer Null. Die Abfrage ist nicht sauber, aber sie ergibt innerhalb dieser Rahmenbedingungen ein sinnvolles Ergebnis.
    Nur wenn $object1->kd_fax nicht existiert, schmeißt sie eine Notice-Meldung.

    <?php if($object1->kd_email > 0) {?>
    Ja
    <?php }?>
    

    Hier wird einfach nichts ausgegeben.

    Warum auch? Eine e-Mail-Adresse ist nicht sinnvoll als Zahl interpretierbar und wird daher in den allermeisten Fällen 0 ergeben, und das ist nicht größer 0. Was also wundert dich da?

    Komisch, wenn ich es so prüfe

    if(isset($object1->kd_email))
    

    wird es berücksichtigt

    Ach. Kaum macht man's richtig, schon funktioniert's. ;-)

    So long,
     Martin

    1. Moin!

      if(isset($object1->kd_email))
      

      wird es berücksichtigt

      Ach. Kaum macht man's richtig, schon funktioniert's. ;-)

      Naja. Aber auch unbedingt wie es es soll (Es sei denn die Eigenschaft wird nur angelegt wenn das Objekt überhaupt eine Mailadresse hat)

      Ein schlichtes

      if (! empty($object1->kd_email) ) {
      

      würde triggern wenn das Objekt die Eigenschaft hat und dieses einen nichtleerer String oder eine Zahl verschieden von 0 oder eben TRUE repräsentiert:

      <?php
      class stdObject {};
      $ar = array (0, '', FALSE, NULL, 1, -1, 'A', TRUE);
      $obj = new stdObject();
      foreach ( $ar  as $t ) {
          $obj->prop = $t;
          if (! empty ( $obj->prop ) ) {
              print "nicht empty: '$t'\n";
          } else {
              print "empty: '$t'\n";
          }
      }
      

      Ausgaben:

      fastix@trainer:/tmp$ php test4.php 
      empty: '0'
      empty: ''
      empty: ''
      empty: ''
      nicht empty: '1'
      nicht empty: '-1'
      nicht empty: 'A'
      nicht empty: '1'
      

      Jörg Reinholz

      1. Hi,

        Ach. Kaum macht man's richtig, schon funktioniert's. ;-)

        Naja. Aber auch nicht unbedingt wie es es soll (Es sei denn die Eigenschaft wird nur angelegt wenn das Objekt überhaupt eine Mailadresse hat)

        ich bin davon ausgegangen, dass mit dieser seltsamen Abfrage eigentlich das Vorhandensein der Eigenschaft getestet werden sollte - sonst hätte man ja wohl einfach auf einen Leerstring geprüft.
        (Ich war übrigens so frei, im Zitattext von dir das fehlende "nicht" zu ergänzen.)

        Ein schlichtes

        if (! empty($object1->kd_email) ) {
        

        würde triggern wenn das Objekt die Eigenschaft hat und dieses einen nichtleerer String oder eine Zahl verschieden von 0 oder eben TRUE repräsentiert:

        Das ist noch besser, stimmt.

        Ciao,
         Martin

  3. @@Jnnbo

    <?php if($object1->kd_fax > 0) {?>
    Ja
    <?php }?>
    

    Warum diese Schreibweise grässlich ist, hatte ich mal mit Dem Martin diskutiert (Fazit).

    Verwende die alternative Schreibweise für Kontrollstrukturen:

    <?php if($object1->kd_fax > 0): ?>
    Ja
    <?php endif; ?>
    

    Nachtrag: Der Code betrifft nur die Syntax, nicht ob die Bedingung richtig wäre oder nicht.

    LLAP 🖖

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)