Bernd: if/OR

0 46

if/OR

Bernd
  • php
  1. 0
    Bernd
    1. 0
      Linuchs
    2. 0
      dedlfix
      1. 0
        Robert B.
        • menschelei
        • programmiertechnik
        1. 0
          Tabellenkalk
      2. 0
        Der Martin
        1. 0
          Matthias Apsel
          • menschelei
      3. 0
        Gunnar Bittersmann
        1. 0
          dedlfix
    3. 0
      Linuchs
  2. 0
    Linuchs
    1. 0
      Bernd
  3. 1
    Robert B.
    • php
    • programmiertechnik
    1. 1
      dedlfix
      1. 0
        Gunnar Bittersmann
    2. 0

      Deppen-Apostroph

      Linuchs
      • menschelei
      1. 0
        Der Martin
        1. 0
          Gunnar Bittersmann
          • menschelei
          • typografie
          1. 0
            Rolf B
        2. 0
          Auge
          1. 0
            Der Martin
          2. 0
            Gunnar Bittersmann
            • menschelei
            • sprache
            1. 0
              Tabellenkalk
            2. 0
              Linuchs
      2. 0
        Robert B.
        • menschelei
        • sprache
  4. 0
    Rolf B
    1. 0
      Matthias Apsel
      1. 0
        Rolf B
        1. 0
          Tabellenkalk
          1. 0
            Rolf B
            1. 0
              Tabellenkalk
              1. 0
                Matthias Apsel
                1. 0
                  Rolf B
    2. 0
      Bernd
      1. 0
        Bernd
      2. 0
        Der Martin
        1. 0
          Bernd
          1. 0
            Rolf B
          2. 0
            Bernd
            1. 0
              Rolf B
              1. 0
                Bernd
                1. 0
                  Rolf B
            2. 0
              Tabellenkalk
              1. -1
                Bernd
                1. 0
                  Gunnar Bittersmann
                  • meinung
                  • zu diesem forum

In einem if kann ich doch ein OR nutzen?

if ($ab_datum != "" OR $ab_datum != "0000-00-00")

in der DB steht 0000-00-00 warum wird mir die Ausgabe dennoch angezeigt?

  1. Ich glaube, ich habe wieder ein Verständnisproblem mit AND und OR.

    OR heißt dich oder, AND und? Richtig?

    Wenn ich AND nutze dann geht es, aber ich möchte möchte doch beide prüfen also müsste doch OR richtig sein?

    1. OR heißt doch oder, AND und? Richtig?

      Sowohl mit AND als auch mit OR verknüpfst du in deinem Beispiel zwei Bedingungen.

      Bei AND müssen beide zutreffen, damit die Gesamtheit TRUE ist:

      if ($ab_datum != "" AND $ab_datum != "0000-00-00")

      Beim Wert "0000-00-00" in der DB ist die zweite Bedingung FALSE, "0000-00-00" ist nicht ungleich "0000-00-00", sondern gleich.

      if ($ab_datum != "" AND $ab_datum == "0000-00-00")

      wäre TRUE

    2. Tach!

      Ich glaube, ich habe wieder ein Verständnisproblem mit AND und OR.

      OR heißt dich oder, AND und? Richtig?

      Ja, aber es wird beim Programmieren etwas anders verwendet als im allgemeinen Sprachgebrauch.

      OR heißt, mindestens eine Bedingung muss erfüllt sein. In allgemeiner Sprache wird "oder" oft als XOR verwendet also als "entweder ... oder ...".

      "Bringen Sie mir Kaffee oder Tee!" würde den Kellner vor eine Entscheidungsfrage stellen, der Computer würde beides bringen, wenn in der Küche sowohl Tee als auch Kaffee vorhanden ist.

      Wenn ich AND nutze dann geht es, aber ich möchte möchte doch beide prüfen also müsste doch OR richtig sein?

      AND heißt, alle beide Bedingungen müssen erfüllt sein. Hingegen "geeignet für Sommer und geeignet für Winter" wäre beim Programmieren ein OR, weil "geeignet für" nicht gleichzeitig zwei Daten enthalten kann - es sei denn, es ist ein Set.

      Vielleicht waren die Beispiele verwirrend. Wichtig ist nur, dass OR und AND streng nach Wahrheitstabelle arbeiten, und man deren Arbeitsweise kennen muss, anstatt sich die Bedeutungen anderswo herzuleiten.

      dedlfix.

      1. Moin,

        "Bringen Sie mir Kaffee oder Tee!" würde den Kellner vor eine Entscheidungsfrage stellen, der Computer würde beides bringen, wenn in der Küche sowohl Tee als auch Kaffee vorhanden ist.

        Oder der Klassiker:

        „Möchten Sie Ihren Kaffee mit Milch oder Zucker?“
        „Ja.“

        Das ist formal korrekt 😉

        Viele Grüße
        Robert

        1. Hallo,

          Da ich sowieso keinen Kaffee trinke, nehm ich den Zucker!

          Gruß
          Kalk

      2. Hallo,

        OR heißt, mindestens eine Bedingung muss erfüllt sein. In allgemeiner Sprache wird "oder" oft als XOR verwendet also als "entweder ... oder ...".

        genau, deswegen mache ich mir auch manchmal den Spaß, einfach streng logisch mit "Ja" zu antworten, wenn mich die Dame an der Supermarktkasse fragt: "Zahlen Sie bar oder mit Karte?"

        "Bringen Sie mir Kaffee oder Tee!" würde den Kellner vor eine Entscheidungsfrage stellen, der Computer würde beides bringen, wenn in der Küche sowohl Tee als auch Kaffee vorhanden ist.

        Ganz lustig wird's bei der bitweisen Oder-Verknüpfung von Ganzzahlen.
        Was ist 3 oder 5? Natürlich 7. :-)

        Vielleicht waren die Beispiele verwirrend.

        Ja, vielleicht.

        Wichtig ist nur, dass OR und AND streng nach Wahrheitstabelle arbeiten, und man deren Arbeitsweise kennen muss, anstatt sich die Bedeutungen anderswo herzuleiten.

        Ja. Und es ist fast immer falsch (d.h. nicht das, was man wirklich meint), wenn zwei oder mehr Ungleich-Operationen mit einem ODER zusammen auftreten. Jede nur denkbare Zahl ist beispielsweise ungleich 1 oder ungleich 2.

        Ciao,
         Martin

        --
        Ein Tag, an dem du nicht wenigstens einmal gelacht hast, ist ein verlorener Tag.
        1. Hallo Der Martin,

          genau, deswegen mache ich mir auch manchmal den Spaß, einfach streng logisch mit "Ja" zu antworten, wenn mich die Dame an der Supermarktkasse fragt: "Zahlen Sie bar oder mit Karte?"

          Das hat dir der TeufelApsel gesagt.

          - Ich hätte gern einen Kaffee.
          - Mit Milch und Zucker?
          - Mit Kaffee.

          Bis demnächst
          Matthias

          --
          Pantoffeltierchen haben keine Hobbys.
          ¯\_(ツ)_/¯
      3. @@dedlfix

        "Bringen Sie mir Kaffee oder Tee!" würde den Kellner vor eine Entscheidungsfrage stellen, der Computer würde beides bringen, wenn in der Küche sowohl Tee als auch Kaffee vorhanden ist.

        Nein, warum sollte er? Der Computer würde das erstbeste nehmen, was er findet, egal ob Kaffee oder Tee.

        (Und der Computer würde das Getränk nicht bringen. Ein von diesem gesteuerter Roboter könnte das tun.)

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        1. Tach!

          "Bringen Sie mir Kaffee oder Tee!" würde den Kellner vor eine Entscheidungsfrage stellen, der Computer würde beides bringen, wenn in der Küche sowohl Tee als auch Kaffee vorhanden ist.

          Nein, warum sollte er? Der Computer würde das erstbeste nehmen, was er findet, egal ob Kaffee oder Tee.

          Kommt darauf an, wie das Programm geschrieben ist. Wenn bei Erfolg die Suche abgebrochen wird, dann das erstbeste. Wenn wir aber wie so ein DBMS mengenbasiert arbeiten, dann besteht die Ergebnismenge aus beiden.

          dedlfix.

    3. Wenn ich AND nutze dann geht es

      Definiere, was "es" sein soll. Eine Aufgabe könnte sein, fehlerhafte Datensätze ohne Datum zu selektieren:

      if ($ab_datum == "" OR $ab_datum == "0000-00-00")

      Wobei der DB-Wert NULL nicht abgedeckt ist

      Eine andere Aufgabe wäre, "vermutliche" Datümer zu finden:

      if ($ab_datum != "" AND $ab_datum != "0000-00-00")

      damit findest du auch 2019-02-29 also kein gültiges Datum.

      Schaue dir mal checkdate an.

  2. Bei Verknüpfungen mit OR muss nur eine Bedingung wahr sein.

    "0000-00-00" != "" TRUE

    1. Danke für die Info

  3. Hallo Bernd,

    In einem if kann ich doch ein OR nutzen?

    if ($ab_datum != "" OR $ab_datum != "0000-00-00")
    

    in der DB steht 0000-00-00 warum wird mir die Ausgabe dennoch angezeigt?

    In Ergänzung zu Linuchs' Antwort sei noch darauf hingewiesen, dass in den meisten Programmiersprachen von links nach rechts ausgewertet wird, das heißt:

    • Bei einer Verknüpfung mit oder ist die Bedingung erfüllt, wenn der erste Teilterm wahr ist.
      In deinem Fall prüfst zu zuerst, ob $ab_datum nicht leer ist – ist das erfüllt, ist die gesamte Bedingung wahr und der zweite Ausdruck muss nicht mehr ausgewertet werden. Nur, wenn $ab_datum leer ist, wird der zweite Ausdruck überprüft.
    • Bei einer Verknüpfung mit und bricht der Vergleich dann ab, wenn der erste Teilterm falsch ist, weil der gesamte Ausdruck dann schon nicht mehr wahr werden kann.

    In deinem Fall ist vielleicht auch noch die Boolesche Algebra mit ihren Rechenregeln interessant – manchmal wird etwas klarer, wenn man das Gegenteil formuliert und dann komplett negiert, weil man auf das Nichterfüllen einer Bedingung prüfen möchte. Für deinen Code oben gilt bspw.

        ($ab_datum != ""  OR $ab_datum != "0000-00-00")
    == !($ab_datum == "" AND $ab_datum == "0000-00-00")
    

    So wird direkt offensichtlich, dass der Gesamtausdruck nicht zum gewünschten Erfolg führt.

    Viele Grüße
    Robert

    1. Tach!

      • Bei einer Verknüpfung mit oder ist die Bedingung erfüllt, wenn der erste Teilterm wahr ist.
        In deinem Fall prüfst zu zuerst, ob $ab_datum nicht leer ist – ist das erfüllt, ist die gesamte Bedingung wahr und der zweite Ausdruck muss nicht mehr ausgewertet werden. Nur, wenn $ab_datum leer ist, wird der zweite Ausdruck überprüft.
      • Bei einer Verknüpfung mit und bricht der Vergleich dann ab, wenn der erste Teilterm falsch ist, weil der gesamte Ausdruck dann schon nicht mehr wahr werden kann.

      Für die Logik ist dieses sogenannte Kurzschlussverfahren nicht weiter wichtig. Wenn das Ergebnis sich nicht mehr ändern kann, kann man abbrechen. Wichtig ist das nur, wenn der zweite Ausdruck nicht nur einen booleschen Wert liefert, sondern auch noch irgendeine Nebenwirkung hat, dass diese Nebenwirkung bei einem Kurzschluss nicht mehr ausgeführt wird. Sowas kann gewollt sein, muss aber nicht. - Ist für den vorliegenden Fall wie gesagt nicht weiter wichtig, da nur ein Vergleich stattfindet.

      dedlfix.

      1. @@dedlfix

        Für die Logik ist dieses sogenannte Kurzschlussverfahren nicht weiter wichtig. Wenn das Ergebnis sich nicht mehr ändern kann, kann man abbrechen. Wichtig ist das nur, wenn der zweite Ausdruck nicht nur einen booleschen Wert liefert, sondern auch noch irgendeine Nebenwirkung hat, dass diese Nebenwirkung bei einem Kurzschluss nicht mehr ausgeführt wird. Sowas kann gewollt sein, muss aber nicht. - Ist für den vorliegenden Fall wie gesagt nicht weiter wichtig, da nur ein Vergleich stattfindet.

        In anderen Fällen macht man sich genau das zunutze: feature detection.

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    2. Linuchs' Antwort

      irgendwie habe ich dabei an das Deppen-Apostroph gedacht. Doch wie wird in der deutschen Schriftsprache ein Genitiv gebildet, wenn das Substantiv schon auf s endet?

      Wären die Geschäfte, die Worms gehören Wormsens Geschäfte? Die Läden von Hans Hansens Läden?

      Aber wie würde man dann die Läden von jemandem benennen, der schon Hansen heißt?

      Man könnte ausweichen auf Geschäfte in Worms: Wormser Geschäfte

      Aber Linuchser Antwort klingt vollkommen daneben. Linuchsens Antwort auch.

      Ist off topic, aber ich lerne nebenbei gerne dazu.

      1. Hallo,

        Linuchs' Antwort

        irgendwie habe ich dabei an das Deppen-Apostroph gedacht.

        falsch gedacht. ;-)

        Doch wie wird in der deutschen Schriftsprache ein Genitiv gebildet, wenn das Substantiv schon auf s endet?

        Genau so, wie es Robert hier gemacht hat. Das ist einer der seltenen Fälle, in denen auch im Deutschen ein Genitiv-Apostroph richtig ist.

        Wären die Geschäfte, die Worms gehören Wormsens Geschäfte?
        Die Läden von Hans Hansens Läden?

        Das ist AFAIK eine alte, aussterbende Variante. Trifft man noch hier und da, aber zum Glück eher selten.

        Aber wie würde man dann die Läden von jemandem benennen, der schon Hansen heißt?

        Siehste, das ist ein Problem dieser Methode.

        Man könnte ausweichen auf Geschäfte in Worms: Wormser Geschäfte

        Das geht bei Ortsnamen. Aber da ist ja auch ein Bedeutungsunterschied: Wormser Geschäfte sind Geschäfte, die in Worms ansässig sind, und nicht die Worms gehören (also kein Genitiv).

        Ist off topic, aber ich lerne nebenbei gerne dazu.

        +1

        Ciao,
         Martin

        --
        Ein Tag, an dem du nicht wenigstens einmal gelacht hast, ist ein verlorener Tag.
        1. @@Der Martin

          Linuchs' Antwort

          irgendwie habe ich dabei an das Deppen-Apostroph gedacht.

          falsch gedacht. ;-)

          Na, sooo falsch nun auch wieder nicht. ' anstatt Apostroph zu verwenden ist schon etwas deppisch. 😜

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
          1. Hallo Gunnar,

            wenn das Forum ja bei Eingabe von ' automatisch ein Popup anzeigte mit

            ' - Schreibmaschinen-Apostroph U+0027
            ’ - typographischer Apostroph U+2019
            ′ - Prime (Fuß, Bogenminuten) U+2032
            ʻ - hawaiianisches ʻOkina U+02BB (bzw. das usbekische Gʻ und Oʻ)

            dann könnte man ja drüber nachdenken.

            Rolf

            --
            sumpsi - posui - clusi
        2. Hallo

          Linuchs' Antwort

          Das ist einer der seltenen Fälle, in denen auch im Deutschen ein Genitiv-Apostroph richtig ist.

          Undzwar, nur um es noch einmal geschreiben zu haben, hintendran und nicht vor einem zusätzlichen „s“. Es ist Marx' Buch oder eben Linuchs' Antwort, aber nicht Linuch's oder Linuchs's Antwort oder gar Marx's Buch (weder Kalles noch das des Kardinals).

          Wären die Geschäfte, die Worms gehören Wormsens Geschäfte?
          Die Läden von Hans Hansens Läden?

          Das ist AFAIK eine alte, aussterbende Variante. Trifft man noch hier und da, aber zum Glück eher selten.

          Warum „zum Glück“? ich würde die variante übrigens eher im hohen Norden Deutschlands verorten und dort halte ich sie in einigen küstennahen Gegenden noch durchaus für üblich.

          Aber wie würde man dann die Läden von jemandem benennen, der schon Hansen heißt?

          Meint er gar „Hansens Läden“?

          Siehste, das ist ein Problem dieser Methode.

          Man könnte ausweichen auf Geschäfte in Worms: Wormser Geschäfte

          Das geht bei Ortsnamen. Aber da ist ja auch ein Bedeutungsunterschied: Wormser Geschäfte sind Geschäfte, die in Worms ansässig sind, und nicht die Worms gehören (also kein Genitiv).

          Das wären eben nicht „Wormser Läden“ sondern, wenn es (abseits typografischer Ganz-Genau-Igkeiten) korrekt sein soll, „Wormsens Läden“ (vermutlich am ehesten im Norden) oder „Worms' Läden“. Wobei, dank der üblichen Deppenapostrophitis, die Realität wohl eben doch „Worms's Läden“ wäre.

          Bio hatte dazu ehedem mal das Beispiel der Imbisse von Carlo und Carlos gebracht. Das fand ich damals gut verständlich. 😀

          Tschö, Auge

          --
          Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
          Hohle Köpfe von Terry Pratchett
          1. Mahlzeit,

            Linuchs' Antwort

            Das ist einer der seltenen Fälle, in denen auch im Deutschen ein Genitiv-Apostroph richtig ist.

            Undzwar, nur um es noch einmal geschreiben zu haben, hintendran und nicht vor einem zusätzlichen „s“.

            ja natürlich - es erschien mir unnötig, das nochmal zu betonen, weil es ja völlig korrekt geschrieben war.

            Es ist Marx' Buch oder eben Linuchs' Antwort, aber nicht Linuch's oder Linuchs's Antwort oder gar Marx's Buch (weder Kalles noch das des Kardinals).

            Ich war bisher weder mit dem einen noch dem anderen Marx auf ein Bier verabredet, also ist es mir egal, welchen von beiden du nicht meinst. ;-)

            Die Läden von Hans Hansens Läden?

            Das ist AFAIK eine alte, aussterbende Variante. Trifft man noch hier und da, aber zum Glück eher selten.

            Warum „zum Glück“?

            Weil ich finde, dass sich das grausam anhört.

            ich würde die variante übrigens eher im hohen Norden Deutschlands verorten und dort halte ich sie in einigen küstennahen Gegenden noch durchaus für üblich.

            Kann sein; da fehlt mir der Einblick.

            Ciao,
             Martin

            --
            Ein Tag, an dem du nicht wenigstens einmal gelacht hast, ist ein verlorener Tag.
          2. @@Auge

            Undzwar, nur um es noch einmal geschreiben zu haben, hintendran und nicht vor einem zusätzlichen „s“. Es ist Marx' Buch oder eben Linuchs' Antwort, aber nicht Linuch's oder Linuchs's Antwort oder gar Marx's Buch (weder Kalles noch das des Kardinals).

            Dem Marx sein Buch, dem Linux seine Antwort. Wozu braucht der Genitiv ein Apostroph?

            BTW, im Englischen hört man schon mal Bruce’s guitar.

            LLAP 🖖

            --
            „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
            1. Hallo,

              Dem Marx sein Buch, dem Linux seine Antwort. Wozu braucht der Genitiv ein Apostroph?

              Dem Dativ braucht's kein's. De's Genitiv's s'chon...

              Gruß
              Kalk

            2. Ganz unnötig schlägst du damit ein neues Kapitel auf, nämlich die deutschen (m/w/d) Artikel:

              Dem Marx sein Buch, dem Linux seine Antwort. Wozu braucht der Genitiv ein Apostroph?

              Dem Brigitte sein Geige?

              BTW, im Englischen hört man schon mal Bruce’s guitar.

              Ja, die Englischen haben's gut:

              Brigitte's violin

      2. Hallo Linuchs,

        Linuchs' Antwort

        irgendwie habe ich dabei an das Deppen-Apostroph gedacht. Doch wie wird in der deutschen Schriftsprache ein Genitiv gebildet, wenn das Substantiv schon auf s endet?

        Falsch gedacht und richtig gefragt:

        Der Apostroph […] ist ein Satzzeichen, das […] zwingend den Genitiv von Eigennamen verdeutlicht, die im Nominativ bereits auf einen s-Laut (geschrieben: -s, -ß, -z, -x, -ce) enden, wenn sie nicht einen Artikel, ein Possessivpronomen oder dergleichen bei sich haben.

        -- https://de.wikipedia.org/wiki/Apostroph

        „Robert's Antwort“ enthielte ein Deppenapostroph.

        Viele Grüße
        Robert

  4. Hallo Bernd,

    da ich schon mehrfach versucht habe, Dir die Regeln von de Morgan zu erklären, und es offenbar eine Hirndrehung zuviel für Dich ist, versuche ich es einmal anders.

    Was Du möchtest, kann man auch so formulieren:

    wenn (dies OR jenes) {
       tue nichts
    }
    sonst
    {
       mache etwas
    }
    

    oder in deinem Fall:

    if ($ab_datum == "" OR $ab_datum == "0000-00-00") {
       // ab_datum ist leer, nichts tun
    }
    else
    {
       // ab_datum ist gültig, verarbeiten
    }
    

    Dieses Programmiermuster ist gut lesbar. Das Problem ist nun der leere THEN Teil, den der ökonomische Sinn des Programmierers nicht gern sieht. Also vertauscht man THEN und ELSE, invertiert die Bedingung und lässt das nun leere ELSE weg:

    if ( !($ab_datum == "" OR $ab_datum == "0000-00-00")) {
    {
       // ab_datum ist gültig, verarbeiten
    }
    

    Bis hierin geht es auch noch halbwegs. Da steht NOT (dies OR jenes) und das erkennt man ohne Hirnakrobatik als WEDER dieses NOCH jenes.

    Will man nun noch die Klammern auflösen, muss man die Regeln von De Morgan beachten. Sie besagen, dass das "Ausmultiplizieren" eines NOT dazu führt, dass aus einem OR ein AND wird, und aus einem AND ein OR. Und danach wird aus dem NOT $a == $b ein $a != $b.

    Also:

              !($ab_datum == "" OR $ab_datum == "0000-00-00")
    wird zu
              !($ab_datum == "") AND !($ab_datum == "0000-00-00")
    wird zu
              $ab_datum != "" AND $ab_datum != "0000-00-00"
    

    Das ist der Grund, warum der korrekte Code so aussieht:

    if ( $ab_datum != "" AND $ab_datum != "0000-00-00" ) {
    {
       // ab_datum ist gültig, verarbeiten
    }
    

    Wenn Dir das zu hirnverknotet ist, um es sofort richtig hinzuschreiben, dann tu es nicht. Versuche, ein WEDER NOCH mit einer der vorher gezeigten Methoden aufzuschreiben. Es mögen 3 bis 13 Tastendrücke mehr sein, aber es funktioniert dann auf Anhieb.

    Oder mach Dir ein Poster an die Wand, dass ein WEDER NOCH mit AND gebildet werden muss.

    Update: Ich habe diesen Beitrag wikifiziert

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf B,

      da ich schon mehrfach versucht habe, Dir die Regeln von de Morgan zu erklären, und es offenbar eine Hirndrehung zuviel für Dich ist, versuche ich es einmal anders.

      Die Erklärung mit den grünen Bohnen oder dem Spinat fand ich richtig gelungen.

      Bis demnächst
      Matthias

      --
      Pantoffeltierchen haben keine Hobbys.
      ¯\_(ツ)_/¯
      1. Hallo Matthias,

        wo findet die sich denn? Tante Google kommt mit leeren Händen zurück.

        Aber ich habe mein Auto-Beispiel im Wiki gerne durch Bohnen und Spinat ersetzt. Was mir schwer fiel, ich mag nämlich beides gern 😂

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo,

          Tante Google kommt mit leeren Händen zurück.

          Warum Google beauftragen, wenn das Forum selbst eine Suchfunktion besitzt?

          Dein Posting ist erst 2 Monate alt. Also könnte man diesen Thread erstmal zu machen und dann Anfang September wieder hervorholen…

          Gruß
          Kalk

          1. Hallo Tabellenkalk,

            soviel zu meinem Gedächtnis, und zum Versuch, Bernd etwas über De Morgan verständlich machen zu wollen :(

            Natürlich habe ich mit der Forensuchfunktion angefangen und bin dann auf Google umgestiegen, aber mein Posting von damals enthielt keine Bohnen, darum habe ich es nicht gefunden.

            Rolf

            --
            sumpsi - posui - clusi
            1. Hallo,

              soviel zu meinem Gedächtnis,

              und zu Matthias ihm seins.

              aber mein Posting von damals enthielt keine Bohnen, darum habe ich es nicht gefunden.

              das erklärt's…

              Gruß
              Kalk

              1. Hallo Tabellenkalk,

                soviel zu meinem Gedächtnis,

                und zu Matthias ihm seins.

                aber mein Posting von damals enthielt keine Bohnen, darum habe ich es nicht gefunden.

                aber Spinat 😀

                Bis demnächst
                Matthias

                --
                Pantoffeltierchen haben keine Hobbys.
                ¯\_(ツ)_/¯
                1. Hallo Matthias,

                  womit wir bei Linuchs’ Problem mit der Suche wären (und auch gleich bei seinem Apostrophenthema, toller integrativer Thread hier 😂)

                  Rolf

                  --
                  sumpsi - posui - clusi
    2. Danke für die Ausführliche Erklärung. Ich verstehe es einfach nicht. Ich möchte einen Block nicht anzeigen, wenn alle dieser Felder leer sind

      • $firma
      • $name
      • $firma_L
      • $name_L

      meine Idee war

      if ($firma != "" OR $name != "" OR $firma_L != "" OR $name_L != ""):
      

      oder auch

      if ($firma != "" AND $name != "" AND $firma_L != "" AND $name_L != ""):
      

      ich habe es auch so versucht, aber nichts klappt!

      if ($firma == "" OR $name == "" OR $firma_L == "" OR $name_L == ""):
      

      oder auch

      if ($firma == "" AND $name == "" AND $firma_L == "" AND $name_L == ""):
      

      Ich weiß einfach nicht wo der Fehler ist. Mit diesem scheiß AND und OR ich könnte ausrasten mein Kopf brummt schon.

      1. Ein ganz anderes Problem, das komplette ausblenden funktioniert scheinbar mit

        if ($firma != "" AND $name != "" AND $firma_L != "" AND $name_L != ""):
        

        allerdings wird mir jetzt auch ein Block innerhalb dieser Prüfung ausgeblendet wenn dieses leer ist

        $firma != "" AND $name != ""
        

        Warum gibt es keinen einfacheren Weg?

      2. Hallo,

        Danke für die Ausführliche Erklärung. Ich verstehe es einfach nicht. Ich möchte einen Block nicht anzeigen, wenn alle dieser Felder leer sind

        so schwer ist das doch gar nicht. Versuch mal, von deiner Prosa-Formulierung aus zu starten:

        "Wenn alle Felder leer sind" ist doch gleichbedeutend mit:
        "Wenn Feld 1 leer ist UND Feld 2 leer ist UND Feld 3 leer ist ..."

        Wenn du die Bedingung so ausführlich formulierst, hast du doch schon fast den passenden Wortlaut für eine Programmiersprache - z.B. PHP.

        if ($firma != "" OR $name != "" OR $firma_L != "" OR $name_L != ""):
        

        Das heißt: "Wenn in $firma etwas steht ODER in $name etwas steht ODER in $firma_L etwas steht ..."
        Anders ausgedrückt: Wenn in mindestens einem der vier Felder etwas steht.

        if ($firma != "" AND $name != "" AND $firma_L != "" AND $name_L != ""):
        

        "Wenn in $firma etwas steht UND in $name etwas steht UND in $firma_L etwas steht ..."
        Mit anderen Worten: "Wenn alle Felder ausgefüllt sind"

        if ($firma == "" OR $name == "" OR $firma_L == "" OR $name_L == ""):
        

        Das ist das genaue Gegenstück: "Wenn mindestens eins der Felder leer ist ..."

        if ($firma == "" AND $name == "" AND $firma_L == "" AND $name_L == ""):
        

        "Wenn alle Felder leer sind ..."

        So long,
         Martin

        --
        Ein Tag, an dem du nicht wenigstens einmal gelacht hast, ist ein verlorener Tag.
        1. Hallo,

          Wenn du die Bedingung so ausführlich formulierst, hast du doch schon fast den passenden Wortlaut für eine Programmiersprache - z.B. PHP.

          if ($firma != "" OR $name != "" OR $firma_L != "" OR $name_L != ""):
          

          Das heißt: "Wenn in $firma etwas steht ODER in $name etwas steht ODER in $firma_L etwas steht ..."
          Anders ausgedrückt: Wenn in mindestens einem der vier Felder etwas steht.

          also benötige ich genau das oben genannte. Dieser Block soll angezeigt werden wenn mindestens in einem Feld etwas steht. Soweit so gut.

          Es funktioniert wenn alles leer ist oder wenn alles gefüllt ist. Das funktioniert also. Was nicht funktioniert sobald nur eines der beiden nicht gefüllt ist.

          Benötige ich nicht eher so etwas?
          https://www.soscisurvey.de/help/doku.php/de:create:filter-boolean

          1. Hallo Bernd,

            was da bei soscisurvery steht, haben wir Dir hier im Thread eigentlich schon längst erklärt.

            Mein Problem ist gerade, dass deine Anforderung sich beständig zu ändern scheint. Oder Du beschreibst sie ständig anders. Mal ist es "alles muss gefüllt sein", jetzt ist es auf einmal "mindestens ein Feld muss gefüllt sein". Ja was denn nun?

            Und dann kommt noch eine Zusatzabfrage hinzu, wo nur 2 der 4 Felder drin sind. Dazu kann ich nur eins sagen: wenn Du 4 Bedingungen AND verknüpfst und dabei TRUE heraus bekommst, dann ist jede einzelne Bedingung wahr. Und dann ist die AND-Verknüpfung von einem Teil dieser Bedingungen notwendigerweise ebenfalls wahr.

            Heißt:

            if ($firma != "" AND $name != "" AND $firma_L != "" AND $name_L != ""):
            
               // Wenn das Programm hierhin kommt
            
               if ($firma != "" AND $name != ""):
            
                  // dann kommt es zwangsweise auch hierhin. 
            
               endif;
            endif;
            

            Rolf

            --
            sumpsi - posui - clusi
          2. Es war mein Fehler, hatte eine falsche Variable genutzt! 😟

            1. Hallo Bernd,

              okay. Das ist unser aller Lieblingsfehler :)

              Rolf

              --
              sumpsi - posui - clusi
              1. Wahrscheinlich schlägt ihr jetzt die Hände über dem Kopf zusammen, mein ganzes sieht jetzt so aus

                <?php if ($firma != "" OR $name != "" OR $firma_L != "" OR $name_L != ""): ?>
                	
                <h3 style="border-bottom: 1px solid #efefef; width: 81%; padding-bottom: 6px;">Besteller</h3>
                
                <div style="display: flex;">
                	
                	<?php if ($firma != "" OR $name != "" ): ?>
                
                	<div style="width: 36%; <?php if ($firma_L != "" AND $kname_L != ""): ?> border-right: 1px solid #efefef; <?php endif ?>">
                		<h4>Ansprechpartner</h4>
                		<?php if ($firma != "") { echo htmlspecialchars($firma) . "<br>"; } ?>
                		<?php if ($name != "") { echo htmlspecialchars($name) . "<br>"; } ?>
                		<?php if ($telefon != "") { echo htmlspecialchars($telefon) . "<br>"; } ?>
                		<?php if ($handy != "") { echo htmlspecialchars($handy) . "<br>"; } ?>
                		<?php if ($email != "") { echo htmlspecialchars($email) . "<br>"; } ?>
                	</div>
                	
                	<?php endif ?>
                
                	<?php if ($firma_L != "" OR $name_L != ""): ?>
                	
                	<div style="width: 50%; <?php if ($firma != "" AND $name != ""): ?> padding-left: 7em; <?php endif ?>">
                		<h4>alternativer Ansprechpartner</h4>
                		<?php if ($firma_L != "") { echo htmlspecialchars($firma_L) . "<br>"; } ?>
                		<?php if ($name_L != "") { echo htmlspecialchars($name_L) . "<br>"; } ?>
                		<?php if ($telefon_L != "") { echo htmlspecialchars($telefon_L) . "<br>"; } ?>
                		<?php if ($handy_L != "") { echo htmlspecialchars($handy_L) . "<br>"; } ?>
                		<?php if ($email_L != "") { echo htmlspecialchars($email_L) . "<br>"; } ?>
                	</div>
                	
                	<?php endif ?>
                
                </div>
                
                <?php endif ?>
                

                Kann man dieses einfacher/übersichtlicher schreiben? 😮

                1. Hallo Bernd,

                  okay. Also - wenn eins der vier Felder firma, name, firma_L oder name_L gefüllt ist, wird der Besteller-Bereich ausgegeben. Der besteht aus zwei Abschnitten: Ansprechpartner und alternativer Ansprechpartner. Diese Abschnitte werden ausgegeben, wenn es den jeweiligen Ansprechpartner gibt. Das sollte so, wie es jetzt programmiert ist, grundsätzlich funktionieren.

                  Deine Abfragerei mit dem Strich zwischen den Ansprechpartnern kannst Du rein mit CSS erledigen. Das führt zu kleinerem PHP Code. Dein h3 sollte dazu noch class="besteller" bekommen, und die Ansprechpartner-divs darin ein class="ansprechpartner". Das ermöglicht Dir, die inline-styles loszuwerden. Im CSS schreibst Du dann:

                  .besteller {
                     border-bottom: 1px solid #efefef;
                     width: 81%; 
                     padding-bottom: 6px;
                  }
                  
                  .besteller .ansprechpartner {
                     flex: 0 0 36%;
                  }
                  
                  .besteller .ansprechpartner:nth-of-type(n+2) {
                     border-left: 1px solid #efefef;
                     padding-left: 7em;
                  }
                  

                  Damit hast Du alle inline-styles versorgt, und du bekommst den Abstand von 7em und einen Strich links vom Abstand, wenn mehr als ein Ansprechpartner-Bereiche vorhanden ist. Ich setze ganz bewusst border-left auf der 2. Spalte und nicht border-right auf der 1. Spalte. Von der Optik her sollte das identisch sein, aber es ist in CSS nicht möglich, "vorauszugucken", d.h. ich kann dem linken Ansprechpartner keinen Rand geben, wenn noch ein weiterer Ansprechpartner folgt.

                  Ob das alles so optimal gestyled ist, darauf gehe ich nicht ein, das führt mir hier zu weit.

                  Was mich fachlich wundert, ist: Was ist, wenn nur name_L oder firma_L gefüllt sind, gibst Du einen "alternativen Ansprechpartner" aus, ohne "Ansprechpartner". Ist das so von Dir gewollt? Oder sollte man in dem Fall nicht lieber den alternativen Ansprechpartner als Ansprechpartner betiteln

                  Die Übersichtlichkeit verbesserst Du einerseits durch das oben gezweigte CSS, und ansonsten eigentlich - wie immer - durch den Einsatz von Funktionen. Zum Beispiel diese:

                  function hatAnsprechpartner($name, $firma) {
                     return $name != "" OR $firma != "";
                  }
                  
                  function schreibeAnsprechpartner($titel, $firma, $name, $telefon, $handy, $email) {
                     echo "<div class='ansprechpartner'>";
                     echo "<h4>$titel</h4>";
                     schreibeAnsprechpartnerZeile("Firma:", $firma);
                     schreibeAnsprechpartnerZeile("Name:", $name);
                     schreibeAnsprechpartnerZeile("Telefon:", $telefon);
                     schreibeAnsprechpartnerZeile("Mobil:", $handy);
                     schreibeAnsprechpartnerZeile("E-Mail:", $email);
                     echo "</div>";
                  }
                  
                  function schreibeAnsprechpartnerZeile($label, $wert) {
                     if ($wert != "") {
                        echo $label . ": " . $wert . "<br>";
                     }
                  }
                  

                  Das "Hauptprogramm" besteht dann nur noch im Aufruf dieser Funktionen (ich unterstelle mal, dass die styles vom h3 auch ins CSS wandern):

                  <?php if (hatAnsprechpartner($name, $firma) OR hatAnsprechpartner($name_L, firma_L)): ?>
                  <h3 class="besteller">Besteller</h3>
                  <div>
                  <?php
                     if (hatAnsprechpartner($firma, $name) {
                        schreibeAnsprechpartner("Ansprechpartner", $firma, $name, $telefon, $handy, $email);
                     }
                     if (hatAnsprechpartner($firma_L, $name_L) {
                        schreibeAnsprechpartner("alternativer Ansprechpartner", $firma_L, $name_L, $telefon_L, $handy_L, $email_L);
                     }
                  ?>
                  </div>
                  <?php endif; ?>
                  

                  Damit hast Du eine einzige Stelle, wo die Aufbereitung der Ansprechpartnerzeilen erfolgt, d.h. wenn Du das schicker machen willst, musst Du es nur 1x programmieren.

                  Auf das erwähnte fachliche Problem ("Alternativer AP ohne normalen AP") bin ich jetzt auch nicht eingegangen.

                  Rolf

                  --
                  sumpsi - posui - clusi
            2. Hallo,

              Es war mein Fehler,

              Ohje und wir dachten schon alle, du hättest eine neue bool'sche Algebra entdeckt…

              Gruß
              Kalk

              1. Was tut dieses jetzt zur Sache? Hier wird so viel "Müll" geschrieben was mit dem Thema nichts zu tun hat und man stundenlang beschäftigt ist mit jedem Beitrag zu lesen weil vielleicht doch etwas wichtiges drin stehen könnte.

                Finde ich nervig und total unnötig.

                1. @@Bernd

                  Was tut dieses jetzt zur Sache? Hier wird so viel "Müll" geschrieben was mit dem Thema nichts zu tun hat und man stundenlang beschäftigt ist mit jedem Beitrag zu lesen weil vielleicht doch etwas wichtiges drin stehen könnte.

                  Finde ich nervig und total unnötig.

                  Du bist seit einer ganze Weile hier im Forum und immer noch nicht imstande/gewillt, die hiesigen Gepflogenheiten zu akzeptieren‽

                  Wir machen hier unsere Späßchen, egal wie du das findest.

                  LLAP 🖖

                  --
                  „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann