Meowsalot: Prüfung schlägt fehl

Hallo,

ich habe ein kleines Problem mit diesem Code

if($status == "07bc9a80a0da7031218f1a9514a327c3" OR 
                "8f9bdc964d3b7496587b8161e2c43d1f" OR 
                "904895f93ccb9f1f44479582c9d4bd4e") {
	$StatusInsert = 1;
} elseif ($status == "54a556b805869244d18fe0dc0c19c4ce" OR 
                       "3018babe7d2a1fbeb43c3bae0fcd532f" OR
                       "2afeb8b8f86e17862748b6402da01db6" OR
                       "6e623de7c366c92accd2b4a7ee49ad2a" OR
                       "602c5602d0a86003a925951b46a012b4" OR 
                       "5555d1be56a4b410da755026783b4d9e") {
	$StatusInsert = 2;
} else {
	$StatusInsert = 3;
}

in $status steht derzeit 54a556b805869244d18fe0dc0c19c4ce also müsste er doch in den elseif Zweig gehen? In meiner Datenbank kommt nur eine 1 an.

Seht ihr den Fehler?

Bis bald!
Meowsalot (Bernd)

akzeptierte Antworten

  1. Tach!

    ich habe ein kleines Problem mit diesem Code

    if($status == "07bc9a80a0da7031218f1a9514a327c3" OR 
                    "8f9bdc964d3b7496587b8161e2c43d1f" OR 
                    "904895f93ccb9f1f44479582c9d4bd4e") {
    

    Du hast da sinngemäß stehen: if ( (a == 1) or (2) or (3) ) Dabei wird a mit 1 verglichen, dann wird die 2 nach boolean konvertiert und das ergibt true. Der Rest wird nicht mehr ausgewertet, weil sich am Ergebnis nichts mehr ändern kann.

    Aber eigentlich möchtest du if ( (a == 1) or (a == 2) or (a == 3) ), wobei die inneren Klammern weggelassen werden können, sie dienen nur der Demonstration. Oder du möchtest if ( in_array(a, [1, 2, 3]).

    dedlfix.

  2. Lösung 😉

    $status = "54a556b805869244d18fe0dc0c19c4ce";
    
    if(
        $status == "07bc9a80a0da7031218f1a9514a327c3" OR
        $status == "8f9bdc964d3b7496587b8161e2c43d1f" OR
        $status == "904895f93ccb9f1f44479582c9d4bd4e")
    {
        $StatusInsert = 1;
    }
    elseif (
        $status == "54a556b805869244d18fe0dc0c19c4ce" OR
        $status == "3018babe7d2a1fbeb43c3bae0fcd532f" OR
        $status == "2afeb8b8f86e17862748b6402da01db6" OR
        $status == "6e623de7c366c92accd2b4a7ee49ad2a" OR
        $status == "602c5602d0a86003a925951b46a012b4" OR
        $status == "5555d1be56a4b410da755026783b4d9e")
    {
        $StatusInsert = 2;
    }
    else
    {
        $StatusInsert = 3;
    }
    
    1. Hallo pl,

      vielen lieben Dank für deine Hilfe!

      Bis bald!
      Meowsalot (Bernd)

      1. Hallo Meowsalot,

        Hallo pl,

        vielen lieben Dank für deine Hilfe!

        dedlfixens Hilfe ist um vieles wertvoller.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. Hallo

          dedlfixens Hilfe ist um vieles wertvoller.

          Zwar hat dedlfix zusätzlich das auch meiner Meinung nach übersichtlichere in_array vorgeschlagen – und ich selbst würde es an dieser Stelle nutzen – aber zuvor auch genau die Lösung, die pl hier feilbot. Dein „um vieles wertvoller“ diskreditiert pls Antwort ohne einen triftigen Grund.

          Das ist meiner Meinung nach schlecht. Daher von mir 'nen Strich.

          Tschö, Auge

          --
          Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
          Kleine freie Männer von Terry Pratchett
          1. Hallo

            Das ist meiner Meinung nach schlecht. Daher von mir 'nen Strich.

            Deine Bewertung in Ehren aber ich kann auch ohne die einschätzen mit Wem ich es hier zu tun habe. Das ist so dermaßen schäbig und arrogant, da fehlen mir einfach die Worte. Das eigentlich Schlimme ist, daß er nicht der Einzige ist und aufgrund seiner Position im Verein normalerweise ein anderes Verhalten an den Tag legen sollte.

            Total daneben!

            1. Hallo

              Dein schäbiges Gepolter brauche ich nicht.

              Tschö, Auge

              --
              Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
              Kleine freie Männer von Terry Pratchett
          2. Hallo Auge,

            Dein „um vieles wertvoller“ diskreditiert pls Antwort ohne einen triftigen Grund.

            Mein „um vieles wertvoller“ diskreditiert pl's Antwort als das bloße Nennen einer Lösung, im Gegensatz zu dedlfix, der auch erläutert hat, was da passiert. Und da ging es mir erst sekundär um in_array.

            Bis demnächst
            Matthias

            --
            Rosen sind rot.
            1. Moin,

              ich zitiere den Footer dieses Forums:

              Die Energie des Verstehens

              Daher +1 von mir.

              Viele Grüße
              Robert

            2. Hallo

              Dein „um vieles wertvoller“ diskreditiert pls Antwort ohne einen triftigen Grund.

              Mein „um vieles wertvoller“ diskreditiert pl's Antwort als das bloße Nennen einer Lösung, im Gegensatz zu dedlfix, der auch erläutert hat, was da passiert.

              Das findet aber normalerweise nicht statt, außer irgendwer widerspricht der präsentierten Lösung (teilweise), was ja oft genug passiert. Hast du aber nicht getan. Das lässt deine Formulierung in meinen Augen mindestens unschön erscheinen.

              Tschö, Auge

              --
              Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
              Kleine freie Männer von Terry Pratchett
              1. Hallo Auge,

                Dein „um vieles wertvoller“ diskreditiert pls Antwort ohne einen triftigen Grund.

                Mein „um vieles wertvoller“ diskreditiert pl's Antwort als das bloße Nennen einer Lösung, im Gegensatz zu dedlfix, der auch erläutert hat, was da passiert.

                Das findet aber normalerweise nicht statt,

                Falls du mit „Das“ das Erläutern einer Lösung meinst, ist es genau das, was ich an diesem Forum sehr schätze.

                Das lässt deine Formulierung in meinen Augen mindestens unschön erscheinen.

                Das sei dir unbenommen. Sie sollte auch zum Nachdenken anregen. Ich seh das auch aus pädagogisch-didaktischer Sicht und mit Konfuzius "Erzähle mir und ich vergesse, zeige mir und ich erinnere, lass es mich tun und ich verstehe."

                Bis demnächst
                Matthias

                --
                Rosen sind rot.
                1. Hallo

                  Dein „um vieles wertvoller“ diskreditiert pls Antwort ohne einen triftigen Grund.

                  Mein „um vieles wertvoller“ diskreditiert pl's Antwort als das bloße Nennen einer Lösung, im Gegensatz zu dedlfix, der auch erläutert hat, was da passiert.

                  Das findet aber normalerweise nicht statt,

                  Falls du mit „Das“ das Erläutern einer Lösung meinst …

                  Nein. Ich meinte die explizite Kritik an der fehlenden, aber ansonsten richtigen Lösung. Solche Kritik wird hier, meiner Beobachtung nach, recht selten geäußert.

                  … ist es genau das, was ich an diesem Forum sehr schätze.

                  Dem kann und werde ich nicht widersprechen, habe ich auch nicht. Dennoch ist eine Lösung erstmal eine Lösung und die sollte man nicht mit herabqualifizierenden Worten bedenken.

                  "Erzähle mir und ich vergesse, zeige mir und ich erinnere, lass es mich tun und ich verstehe."

                  Eine sehr schön formulierte Binsenweisheit. 😀

                  Tschö, Auge

                  --
                  Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
                  Kleine freie Männer von Terry Pratchett
        2. @@Matthias Apsel

          dedlfixens Hilfe ist um vieles wertvoller.

          So ist es. Die ganzen Werte in mittendrin in if-Abfragen zu haben ist Spaghetti-Code.

          Sinnvoll ist, Daten und Programmlogik voneinander zu trennen. Bspw. so:

          $statusInserts = [
          	1 => [
          		'07bc9a80a0da7031218f1a9514a327c3',
          		'8f9bdc964d3b7496587b8161e2c43d1f',
          		'904895f93ccb9f1f44479582c9d4bd4e',
          	],
          	2 => [
          		'54a556b805869244d18fe0dc0c19c4ce',
          		'3018babe7d2a1fbeb43c3bae0fcd532f',
          		'2afeb8b8f86e17862748b6402da01db6',
          		'6e623de7c366c92accd2b4a7ee49ad2a',
          		'602c5602d0a86003a925951b46a012b4',
          		'5555d1be56a4b410da755026783b4d9e',
          	],
          ];
          
          function getStatusInsert($status, $statusInserts)
          {
          	foreach ($statusInserts as $statusInsert => $statusArray)
          	{
          		if (in_array($status, $statusArray))
          		{
          			return $statusInsert;
          		}
          	}
          
          	return 3;
          }
          
          var_dump(getStatusInsert('8f9bdc964d3b7496587b8161e2c43d1f', $statusInserts));	// 1
          var_dump(getStatusInsert('6e623de7c366c92accd2b4a7ee49ad2a', $statusInserts));	// 2
          var_dump(getStatusInsert('33333333333333333333333333333333', $statusInserts));	// 3
          

          oder die Datenstruktur andersrum:

          $statusInserts = [
          	'07bc9a80a0da7031218f1a9514a327c3' => 1,
          	'8f9bdc964d3b7496587b8161e2c43d1f' => 1,
          	'904895f93ccb9f1f44479582c9d4bd4e' => 1,
          	'54a556b805869244d18fe0dc0c19c4ce' => 2,
          	'3018babe7d2a1fbeb43c3bae0fcd532f' => 2,
          	'2afeb8b8f86e17862748b6402da01db6' => 2,
          	'6e623de7c366c92accd2b4a7ee49ad2a' => 2,
          	'602c5602d0a86003a925951b46a012b4' => 2,
          	'5555d1be56a4b410da755026783b4d9e' => 2,
          ];
          
          function getStatusInsert($status, $statusInserts)
          {
          	if (array_key_exists($status, $statusInserts))
          	{
          		return $statusInserts[$status];
          	}
          	else
          	{
          		return 3;
          	}
          }
          
          var_dump(getStatusInsert('8f9bdc964d3b7496587b8161e2c43d1f', $statusInserts));	// 1
          var_dump(getStatusInsert('6e623de7c366c92accd2b4a7ee49ad2a', $statusInserts));	// 2
          var_dump(getStatusInsert('33333333333333333333333333333333', $statusInserts));	// 3
          

          LLAP 🖖

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

            So ist es. Die ganzen Werte in mittendrin in if-Abfragen zu haben ist Spaghetti-Code.

            Sinnvoll ist, Daten und Programmlogik voneinander zu trennen. Bspw. so:

            Aha. Dann mach das doch. Programmlogik sollte doch verständlich sein.

            Muss ich aber 07bc9a80a0da7031218f1a9514a327c3 verstehen?

            --
            Neu im Forum! Signaturen kann man ausblenden!
            1. Hallo beatovich,

              das ist ein ganz anderer Punkt, aber einer, der mir bei meowsalots Themen schon öfter auffiel. Da tauchen wüste magic strings im Programmcode auf, und ich habe mich mehrfach schon gefragt, ob es sinnvoll ist, dass solche Trümmer im Code stehen.

              Man müsste aber das Gesamtkonzept seiner Anwendung kennen, um zu verstehen, wie das entstanden ist und ob - und wie - man es verbessern könnte. Offenbar haben bestimmte Status eine bestimmte Semantik, und dann wäre es möglicherweise sinnvoll, diese Semantik in der Datenbank zu modellieren. Man kann sie dann in der DB ggf. als Fremdschlüssel darstellen und damit Inkonsistenzen abfangen, die bei Statuscode-Änderungen entstehen.

              Rolf

              --
              sumpsi - posui - clusi
              1. hallo

                Man müsste aber das Gesamtkonzept seiner Anwendung kennen, um zu verstehen, wie das entstanden ist und ob - und wie - man es verbessern könnte.

                Es schreit danach dass da ein Datenobjekt als separate Datei oder DB-Tabelle gehalten wird.

                Offenbar haben bestimmte Status eine bestimmte Semantik,

                Nicht offenbar, sondern vermutlich. Über derlei Code kann man nur Vermutungen anstellen.

                --
                Neu im Forum! Signaturen kann man ausblenden!
            2. Hallo beatovich,

              Muss ich aber 07bc9a80a0da7031218f1a9514a327c3 verstehen?

              wen du so wie ich jeden Tag mit solchen Zahlen arbeiten würdest, würdest du diese auch verstehen. Für ein fremden sieht diese Zahlen merkwürdig aus. Hat mit dem Thema auch nichts zu tun.

              Bis bald!
              Meowsalot (Bernd)

              1. Tach!

                Muss ich aber 07bc9a80a0da7031218f1a9514a327c3 verstehen?

                wen du so wie ich jeden Tag mit solchen Zahlen arbeiten würdest, würdest du diese auch verstehen. Für ein fremden sieht diese Zahlen merkwürdig aus. Hat mit dem Thema auch nichts zu tun.

                Die eigentliche Frage ist, müssen diese Zahlen in der Form im Code stehen? Inhaltlich kannst das nur du beantworten, weswegen ich mich aus einer konkreten Bewertung raushalte. Aus der allgemeinen Sicht eines Programmierers möchte man das aber eigentlich nicht. Es handelt sich hierbei um Magic String. Wenn man den richtigen String verwendest, passiert irgendeine Magie im Programm, sozusagen. Wenn du den String nicht kennst, ist es schwer, die Bedeutung des Codes zu erfassen. Wenn du dich bei diesem String vertippst, gibts keine Fehlermeldung, der Code macht nur nicht was er soll (vorausgesetzt die Sache mit der Logik ist ansonsten richtig implementiert). Wenn zwei Stringwerte gleich sind, heißt das dann, dass denen dieselbe Bedeutung innewohnt, oder ist die Gleichheit nur Zufall? Nicht nur bezogen auf deinen Fall - da scheint es aufgrund der Länge recht eindeutig zu sein - aber mal generell gesprochen. Solche Fragen kannst du nicht ohne Kommentare oder das Wissen um den Anwendungsfall beantworten. Zudem vergisst das Gehirn recht schnell solche Einzelheiten und dann rätselt man, was man da früher gemeint hat. Autovervollständigung gibts bei Strings üblicherweise auch nicht.

                Es ist besser, solche Magic String zu vermeiden. Falls man diese Daten nicht aus dem DBMS oder anderer Datenhaltung (z.B. Konfigurationsdaten) holen kann, wäre eine Alternative, Konstanten zu definieren (oder auch einmalig beschriebene Variablen). Da gibt es wenigstens Fehlermeldungen, wenn man lesend auf nicht existierende Elemente zugreift. Zudem kann man den Konstanten-/Variablennamen sprechend gestalten, also dass man aus ihm den Sinn entnehmen kann. In einer IDE über Rechtsklick -> Finde Verwendungen, kann man weitere Vorkommen der angeklickten Variable finden. Bei String-Literalen geht das nicht, die sind immer Einzelwert. Da bleibt nur ein Text-Vergleich.

                dedlfix.

          2. @Gunnar Bittersmann

            dedlfixens Hilfe ist um vieles wertvoller.

            So ist es. Die ganzen Werte in mittendrin in if-Abfragen zu haben ist Spaghetti-Code.

            Sinnvoll ist, Daten und Programmlogik voneinander zu trennen. Bspw. so:

            Unsinn!!! Primär gings darum zu zeigen worin der Denkfehler lag. Außerdem sind Kontrollstrukturen mit Mehrfachvergleichen durchaus üblich und man sollte schon seine eigenen Erfahrungen beim Aufbau Solcher machen.

            Und im Übrigen kannst Du doch gar nicht einschätzen was hier überhaupt insgesamt am Zweckmäßigsten ist.

            Aber Du kannst Dich gerne bei den Anderen einreihen und wenn Du es nicht tust, mach ich das für Dich.

            .

            1. @@pl

              Aber Du kannst Dich gerne bei den Anderen einreihen und wenn Du es nicht tust, mach ich das für Dich.

              Ich bin längst bei den anderen eingereiht. Wie immer: alle anderen gegen dich.

              LLAP 🖖

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

                Aber Du kannst Dich gerne bei den Anderen einreihen und wenn Du es nicht tust, mach ich das für Dich.

                Ich bin längst bei den anderen eingereiht. Wie immer: alle anderen gegen dich.

                Auch hier irrst Du Dich. Weil: Darum gehts gar nicht. Vielmehr gehts darum, was ich von Dir und den anderen zu halten habe, insbesondere in Sachen Fachlichkeit, Sachlichkeit, Kompetenz und Erfahrung.

                MfG

              2. Ich bin längst bei den anderen eingereiht. Wie immer: alle anderen gegen dich.

                Ich fühle mich geadelt mit den anderen tollen Menschen hier eingereiht zu sein.

      2. hi Bernd,

        vielen lieben Dank für deine Hilfe!

        Das hast Du aber ganz nett gesagt, herzlichen Dank zurück. Es ist manchmal so, da guckt man stundenlang auf den Code und siehts einfach nicht. Das liegt dann aber nicht an der Optik sondern daran, daß man einfach davon ausgeht alles richtig gemacht zu haben. Solche Fehler machen wir aber alle 😉

        Schöne Grüße!

  3. Hi @Meowsalot,

    also eigentlich kann diese Prüfung …

    if($status == "07bc9a80a0da7031218f1a9514a327c3" OR 
                    "8f9bdc964d3b7496587b8161e2c43d1f" OR 
                    "904895f93ccb9f1f44479582c9d4bd4e") {
    	$StatusInsert = 1;
    }
    

    gar nicht fehlschlagen, wie bereits erklärt worden ist 😉

    Viele Grüße
    Robert

  4. Hello,

    ergänzende Frage:

    • woher kommen die Status-Werte?
    • wohin soll das StatusInsert oder abhängig davon ein Datensatz (?) geschrieben werden?

    Wenn es sich um eine Datenbank handelt, vielleicht könntest Du das Regelwerk dann gleich dort formulieren. Das könnte für erhebliche Geschwindigkeitssteigerung sorgen.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.