Hansi: Abfrage ist falsch?

Hallo,

ich habe ein kleines Problem
Und zwar wenn $anzahl == "" oder $anzahl =="0" ist dann soll kein neues Array Feld erzeugt werden. Aber meine funktion dort unten erzeugt trotzdem ein neues Feld auch wenn es leer ist. Aber wieso?
Schliesslich habe ich doch schon die if Abfrage eingebaut die alles abfangen soll aber die wird einfach ignoriert wieso?

Hat jemand eine Idee wodran es liegen kann?
Gruß Hansi

function in_warenkorb_legen($art_nr, $anzahl)
{
$count = count($_SESSION['warenkorb']);
echo "anzahl: ".$anzahl."<br>";
  if ($anzahl != "" || $anzahl != "0")
  {
  echo "art_nr: ".$art_nr;
  $_SESSION['warenkorb'][] = 'Art_Nr='.$art_nr.'&anzahl='.$anzahl;
  }
}

  1. Hi

    Und zwar wenn $anzahl == "" oder $anzahl =="0" ist dann soll kein

    ...

    if ($anzahl != "" || $anzahl != "0")

    Das ist nicht das, was du da geschrieben hast:
    Was da steht ist, anzahl soll entweder nicht leer oder nicht 0 sein (informatisch gesehen "und auch nicht beides").
    Diese Abfrage ist IMMER wahr: Wenn anzahl="", dann ist Anzahl != 0, ist anzahl=0, dann ist Anzahl !="".
    Du suchst wohl mehr ein &&, also Anzahl soll nicht leer und nicht 0 sein.

    Hoffe, ich hab mich nicht vertan...

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi

      Und zwar wenn $anzahl == "" oder $anzahl =="0" ist dann soll kein
      ...
        if ($anzahl != "" || $anzahl != "0")
      Das ist nicht das, was du da geschrieben hast:
      Was da steht ist, anzahl soll entweder nicht leer oder nicht 0 sein (informatisch gesehen "und auch nicht beides").
      Diese Abfrage ist IMMER wahr: Wenn anzahl="", dann ist Anzahl != 0, ist anzahl=0, dann ist Anzahl !="".
      Du suchst wohl mehr ein &&, also Anzahl soll nicht leer und nicht 0 sein.

      Hoffe, ich hab mich nicht vertan...

      MfG
      Rouven

      »»
      »»
      »»
      »»

      Die Lösung war:

      if (!empty($anzahl))
      {
      ...
      }

      aber wieso das nicht das gleiche ist habe ich nicht wirklich verstanden?

      Gruß Hansi

      1. Hallo!

        Spielen wir mal folgende Situationen durch und schauen uns das Ergebnis der einzelnen Abfragen an:

        1. anzahl = "5"
          $anzahl != "" -> true  (*)
          $anzahl != "0" -> true (**)
          (*) || (**) -> true
          empty($anzahl) -> false

        2. anzahl = ""
          $anzahl != "" -> false (*)
          $anzahl != "0" -> true (**)
          (*) || (**) -> true  (denn ein OR ist wahr, sobald eine der Teilaussagen wahr ist, und anzahl ist ja != 0)
          empty($anzahl) -> true (empty und (*) liefern also das gewünschte Ergebnis, die Oder-Verknüpfung aber nicht)

        3. anzahl = "0"
          $anzahl != "" -> true (*)
          $anzahl != "0" -> false (**)
          (*) || (**) -> true (denn ...)
          empty($anzahl) -> ?! (ACHTUNG: "0" ist meines Wissens nicht das selbe wie 0, damit ist $anzahl=0 empty, $anzahl="0" aber nicht, da das ein String mit Inhalt 0 ist, aber da bin ich mir nicht ganz sicher).

        MfG
        Rouven

        --

        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        1. Hi,

          empty($anzahl) -> ?! (ACHTUNG: "0" ist meines Wissens nicht das selbe wie 0, damit ist $anzahl=0 empty, $anzahl="0" aber nicht, da das ein String mit Inhalt 0 ist, aber da bin ich mir nicht ganz sicher).

          das ist falsch. empty() liefert bei "0" ebenfalls true. Auszug aus http://de3.php.net/manual/en/function.empty.php:

          In otherwords, "", 0, "0", NULL, FALSE, array(), var $var;, and objects with empty properties, are all considered empty.

          Gruß.

          1. Hello,

            das ist falsch. empty() liefert bei "0" ebenfalls true. Auszug aus http://de3.php.net/manual/en/function.empty.php:

            In otherwords, "", 0, "0", NULL, FALSE, array(), var $var;, and objects with empty properties, are all considered empty.

            Und da muss Hansi dann aufpassen, wenn er den Warenkorb nochmal vorlegt, und der Kunde bei einem Artikel die Menge wieder auf 0 reduzieren will...

            Außerdem sollte er sich noch mal den Unterschied zwischen

            $wert = 0;

            $wert == false;   -> true
             $wert === false;  -> false;

            $wert = "";

            $wert == 0;   -> true
             $wert === 0;  -> false
             $wert == false; -> true
             $ wert === false;  -> false;

            anschauen. Einfach mal im Manual link:http://de2.php.net/manual/de/language.operators.php] das ganze Kapitel über Operatoren nebst User-Bemerkungen lesen und selber ausprobieren.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hi,

      Und zwar wenn $anzahl == "" oder $anzahl =="0" ist dann soll kein

      Du suchst wohl mehr ein &&, also Anzahl soll nicht leer und nicht 0 sein.

      Hoffe, ich hab mich nicht vertan...

      nein, hast du nicht, denn was Hansi möchte, ist eine Verneinung der Abfrage if ($anzahl == "" || $anzahl =="0"). Bei einer Verneinung wird nicht nur das == zu !=, sondern auch || zu && bzw. umgekehrt, in diesem Fall also if ($anzahl != "" && $anzahl !="0").

      Ich würde aber als Ergänzung noch die Funktion empty() (http://de3.php.net/manual/en/function.empty.php) vorschlagen, die genau diesen Fall prüft. Die Abfrage würde also

      if (!empty($anzahl))

      lauten.

      Gruß,
      Andreas.