Sara: Prüfen ob Feld leer ist

Hallo,

ich verstehe die Welt gerade nicht :/ Ich prüfe mit PHP ob ein Feld in meiner Datenbank leer ist

<?php if($array['test'] > 0) {?>
<?php } else {  } ?>

Im Feld test, stehen Zahlen die wie folgt aussehen

  1. b7bbdc1b046c25733229e99cbf0e31a4
  2. 33e8776f7ee7023fe0e6b00afafbb3fb

Wenn im Feld test die erste Zahl steht, geht das Script sofort in den else Bereich. Wenn im Feld test die zweite Zahl steht, gibt das Script die Daten dazu aus.

Meine Frage ist, wie kann dieses sein? Ist diese Prüfung falsch? if($array['test'] > 0

akzeptierte Antworten

  1. Tach!

    ich verstehe die Welt gerade nicht :/ Ich prüfe mit PHP ob ein Feld in meiner Datenbank leer ist

    <?php if($array['test'] > 0) {?>
    <?php } else {  } ?>
    

    Dann mach das doch und prüf nicht auf Zahlenwerte!

    Im Feld test, stehen Zahlen die wie folgt aussehen

    1. b7bbdc1b046c25733229e99cbf0e31a4
    2. 33e8776f7ee7023fe0e6b00afafbb3fb

    Der erste String fängt nicht mit Ziffern an. Beim Vergleich mit der 0 (oder jeder beliebigen anderen Zahl) wird der in eine Zahl zu konvertieren versucht und weil keine Ziffern am Anfang zu finden sind, kommt 0 raus. Der zweite String beginnt mit 33, das wird als Ergebnis der Konvertierung genommen, der Rest wird ignoriert.

    Meine Frage ist, wie kann dieses sein? Ist diese Prüfung falsch? if($array['test'] > 0

    Ja. Siehe PHP type conversion tables.

    dedlfix.

    1. Hallo,

      Ja. Siehe PHP type conversion tables.

      danke dir für deine Erklärung. Ich prüfe nun so

      if($array['test'] > "")
      

      und siehe da, es funktioniert :) Jetzt muss ich nur einige Stelle suchen wo ich auf "0" prüfe und die gegen "" austauschen.

      1. Hallo

        danke dir für deine Erklärung. Ich prüfe nun so

        if($array['test'] > "")
        

        und siehe da, es funktioniert :)

        Das sieht aber igendwie befremdlich aus. Eine Zeichenkette ist größer als leer?

        Eine Zeichenkette kann länger als 0 sein, dann sollte ihre Länge mit 0 verglichen werden. Eine Zeichenkette kann ungleich leer sein, was hier wohl die Intention ist, dann sollte der Operator auch passend gewählt werden != (ungleich) bzw. !== (ungleich bei Berücksichtigung der Typgleichheit).

        Tschö, Auge

        --
        Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
        Terry Pratchett, „Gevatter Tod“
        1. Hi,

          Das sieht aber igendwie befremdlich aus. Eine Zeichenkette ist größer als leer?

          Was ist daran befremdlich? Warum sollte eine Zeichenkette nicht größer sein als die leere Zeichenkette?

          Ist doch ganz normal bei String-Sortierung.

          "Abc" ist größer als "Aac", und "Abc" ist auch größer als "Ab".

          Und jetzt nehmen wir den zweiten Vergleich ("Abc" > "Ab"), und lassen die identischen Stringteile am Anfang weg, dann bleibt "c" > "".

          cu,
          Andreas a/k/a MudGuard

          1. Hi,

            Was ist daran befremdlich?

            Fast hätte ich geschrieben: die Befremdlichkeit liegt nur im Auge des @Auge (bzw. Betrachters) ;-)

            cu,
            Andreas a/k/a MudGuard

          2. Hallo

            Das sieht aber igendwie befremdlich aus. Eine Zeichenkette ist größer als leer?

            Was ist daran befremdlich? Warum sollte eine Zeichenkette nicht größer sein als die leere Zeichenkette?

            Ist doch ganz normal bei String-Sortierung.

            Ja, aber. … Hier geht es ja nicht um Sortierung, sondern um „nichts oder mehr als nichts“. Da wirkt ein Sortierungsvergleich für mich fehl am Platze.

            Tschö, Auge

            --
            Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
            Terry Pratchett, „Gevatter Tod“
            1. Hi,

              Ja, aber. … Hier geht es ja nicht um Sortierung, sondern um „nichts oder mehr als nichts“.

              "mehr als" = "größer als" = ">" ;-)

              cu,
              Andreas a/k/a MudGuard

            2. Tach!

              Ja, aber. … Hier geht es ja nicht um Sortierung, sondern um „nichts oder mehr als nichts“. Da wirkt ein Sortierungsvergleich für mich fehl am Platze.

              Igendeinen Code zu schreiben, den der Computer versteht, sollte nicht das alleinige Ziel sein. Man muss, um ein System auch später noch pflegen zu können, als Mensch die Intention hinter den Dingen erkennen können, und das auch, wenn - wie üblich - sämtliche Kommentare fehlen oder nutzlos sind, weil sie nur das sowieso Offensichtliche beschreiben, statt Absichten zu erklären oder Verwendungshinweise zu geben.

              Insofern ist es am besten, wenn man Strings weder mit Zahlen vergleicht, noch Größer- oder Kleiner-Vergleiche anstellt, wenn man eigentlich leer oder nicht leer wissen möchte. Zudem sollte man vielleicht auch über ein besseres Ausdrücken des Nichtvorhandenseins nachdenken. Als Alternative zum Leerstring wäre dann nämlich null angebracht.

              dedlfix.