carsten schlichting: if oder switch funktionieren nicht

Hi

wollt fragen, ob mir jemand helfen kann.

und zwar funktioniert eine if anweisung nicht. als switch will es aber auch nicht funktionieren.

Habe eine Variable die definitiv auf 0 gesetzt ist. Sie wird auch als Null ausgegeben

jetzt habe ich geschrieben

if ($kon == gkghsf) {

echo'$irgendwas';
};

Und eigentlich dürfte doch jetzt die Anweisung nicht  ausgeführt werden, aber trotzdem wird sie es??

Habe 10.00mal das script nach einem logischen fehler von mir

durchgeschaut, aber nichts gefunden.

das kann doch gar nicht sein oder??

grüße von mir

carsten

  1. Hi

    also wenn ich das nur mit Zahlen mache, funktioniert es komischer weise.

    Aber habe eine andere Variable $language

    die ich so definiert habe

    $language ="english";

    und da funktioniert ein switch:

    switch ($language) {
      case english: echo'irgendwas';break;
      case german:.....
    };

    wird die art der Variable eventuell bei der ersten definition festgelegt--ob sie nur Zahlen versteht, oder strings?

    grüße von mir

    carsten

  2. n'Abend!

    Habe eine Variable die definitiv auf 0 gesetzt ist. Sie wird auch als Null ausgegeben

    Welche Variable ist das?
    Okay, die Frage ist eigentlich überflüssig; in deinem Codeschnipsel ist $kon schließlich die einzige Variable.  ;-)

    jetzt habe ich geschrieben
    if ($kon == gkghsf) {

    Was ist gkghsf in diesem Kontext?
    Eine undefinierte Konstante, die PHP gnädigerweise als 0 annimmt?
    Ohne Fehlermeldung?

    Habe 10.00mal das script nach einem logischen fehler von mir durchgeschaut ...

    Interessant, dass du die Anzahl der Kontrollen als Fließkommazahl angibst. Naja, nach zehnmaliger Durchsicht sollte man die gröbsten Fehler eigentlich finden.

    So long,

    Martin

    1. Hi

      habe zuerst $kon=0;

      definiert. und dann wollte ich , weil es auch um das login geht einen nicht so offensichtlichen Wert nehmen und habe gedacht "gfhjfh" oder sowas.

      Aber wie du sagtest gfhjfh wurde wahrscheinlich als 0 angenommen.

      was ist denn der Unterschied zwischen Variablen und Konstanten? Müssen Konstanten nicht extra durch define(...) definiert werden?

      Wenn ich die Kontrollstruktur nur mit zahlen benutze geht es jetzt doch. Aber schaltet eine Variable nicht automatisch auf einen "string-Modus" um, wenn plöztzlich Buchstaben statt Zahlen eingegeben werden. habe noch so einen ähnlichen fall, aber da war der erste Wert in der Variable eine Buchstaben_Folge, aber dort funktioniert es.

      Grüße von mir carsten

      1. Hallo carsten.

        was ist denn der Unterschied zwischen Variablen und Konstanten? Müssen Konstanten nicht extra durch define(...) definiert werden?

        PHP-Manual: KonstantenPHP-Manual: Variablen

        Von mir empfohlene Ansprechpartner bei Unklarheiten:

        Google
        Archiv-Suche
        Wikipedia
        • Manual zur jeweiligen Sprache--hier: PHP-Manual

        Einen schönen Montag noch.

        Gruß, Ashura

        --
        Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
        30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
        Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
        MathML fetzt
        1. Hallo Ashura,

          Google
          Archiv-Suche
          Wikipedia
          • Manual zur jeweiligen Sprache--hier: PHP-Manual

          sehr gute Zusammenstellung. :-)

          Ja, Carsten: Sich dumm stellen und einfach mal fragen ist schon ganz schön bequem, oder? Ich habe in der Tat den Eindruck, dass es bei dir eher am Verständnis für die Grundlagen fehlt, nicht an den Details, nach denen du wirklich fragst. Ein bisschen "RTFM", durchaus auch Grundlagenkapitel, würde dir bestimmt nicht schaden. Deine Fragen und Beispiele lassen oft vermuten, dass du einfach mal probierst, ohne zu wissen, was du eigentlich tust. Und das ist keine gute Strategie.

          So long,

          Martin

          1. also dummstellen tu ich mich nicht.

            und ich werd immer selbstständiger -oder?.

            Findest du das schlimm, wenn ich mir so die Grundlageninformationen unterstützend erarbeite - soviel poste ich ja auch nicht. ich les auch viel - ohne das geht es ja nicht. Aber machmal kommt man da auch nicht weiter und Fragen bleiben offen. warum dieses eine problem aufgetreten ist, weiß ich eigentlich immer noch nicht genau. ich weiß jetzt wie ichs vermeide. Und ich denke auch nicht, dass ich das beim gezielten suchen in einem Buch finde. hab ich zumindest nicht- weil die "offizielle" Bezeichnung des problems nicht so einfach zu treffen ist.

            Man kommt dann eher durch randinformationen zum eigentlichen Problem

            Also vielen vielen danke an alle für eure Hilfe und ich werd mich benühen noch mehr Fragen selbst zu beanworten - aber machmal gehts leider nicht.

            carsten

            1. hi,

              Und ich denke auch nicht, dass ich das beim gezielten suchen in einem Buch finde. hab ich zumindest nicht- weil die "offizielle" Bezeichnung des problems nicht so einfach zu treffen ist.

              Natürlich nicht - weil nicht jedes spezifische Problem in aller Detailgetreue in Büchern abgehandelt werden kann.

              Und was die Unterschiede zwischen Variablen und Konstanten angeht - das ist Grundlagenwissen, das sollte man sich immer in ausreichendem Maße aneignen, bevor man weitere Schritte in einer Programmiersprache tut. Man kann schließlich nicht erwarten, dass auf jedes aus Mangel an diesem Wissen resultierende Problem einem in vorhandenen Quellen noch mal speziell erklärt wird.

              Aber wenn du solche Fehler wie den hier machst, erkennt PHP dies oftmals schon selber ganz gut, und weißt dich dann auch entsprechend darauf hin - aber dazu darf ihm das sprechen nicht verboten worden sein.
              Also stelle erst mal dein error_reporting auf E_ALL ein - dann weißt PHP dich schon auf viele Anfänger- und Unachtsamkeitsfehler hin.
              http://www.php.net/manual/de/ref.errorfunc.php
              http://www.php.net/manual/de/function.error-reporting.php

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hallo

                hab mir die PHP-ini angeschaut
                und da ist das so schon eingestellt: E_all & ~E_NOTICE

                Also stelle erst mal dein error_reporting auf E_ALL ein - dann weißt PHP dich schon auf viele Anfänger- und Unachtsamkeitsfehler hin.
                http://www.php.net/manual/de/ref.errorfunc.php
                http://www.php.net/manual/de/function.error-reporting.php

                Also Danke und Grüße von mir

                carsten

                1. hi,

                  und da ist das so schon eingestellt: E_all & ~E_NOTICE

                  ~E_NOTICE heißt, dass dir gerade die notices von PHP nicht angezeigt werden sollen - bei Fehlern wie diesem müsste aber eine notice kommen.

                  Also ändere diese Einstellung, so dass dort nur noch E_ALL steht - und probiere dann deinen eingangs geposteten Code noch mal ...

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. echo $begrüßung;

                    Also ändere diese Einstellung, so dass dort nur noch E_ALL steht - und probiere dann deinen eingangs geposteten Code noch mal ...

                    Und bitte zwischendurch mit phpinfo() nachsehen, ob diese Einstellungsänderung auch wirkt (muss 2047 sein) oder ob nicht doch der Apache noch mal neu gestartet werden muss.

                    echo "$verabschiedung $name";

                    1. Hi habe inzwischen die php.ini veränder zu E_ALL.

                      Auch nach einem neustart steht dort E_All.

                      Aber in der phpinfo() ist error-reportig mit 2039 angegeben.

                      grüße aus stuttgart

                      carsten

                      1. echo $begrüßung;

                        Hi habe inzwischen die php.ini veränder zu E_ALL.
                        Auch nach einem neustart steht dort E_All.
                        Aber in der phpinfo() ist error-reportig mit 2039 angegeben.

                        Dann hat das nicht gewirkt, denn das ist immer noch E_ALL ohne E_NOTICE.
                        Steht es in den beiden Spalten "Master Value" und "Local Value"?
                        Steht ganz oben unter "Configuration File (php.ini) Path" der Pfad zur richtigen php.ini drin? Oder andersrum: Hast du die geändert und nicht irgendeine andere?

                        echo "$verabschiedung $name";

            2. Hallo Carsten,

              also dummstellen tu ich mich nicht.

              das hatte ich auch nicht wirklich angenommen - aber ich habe einen Kollegen, bei dem ich mir in diesem Punkt *wirklich* oft unsicher bin, und deshalb denke ich manchmal zwei- oder gar dreimal über diese Möglichkeit nach.

              und ich werd immer selbstständiger -oder?.

              Ja, aber ich ich habe schon ein paarmal Detailfragen von dir gelesen, die du meiner Ansicht nach besser noch gar nicht stellen solltest. Du kommst mir dann manchmal vor wie jemand, der Differentialgleichungen lösen will, aber das kleine Einmaleins noch nicht beherrscht. Sorry, das ist nicht bös gemeint - aber ich vertrete den Standpunkt, dass man lieber erst mit den Grundlagen sattelfest sein sollte, bevor man sich mit anspruchsvollen Aufgaben beschäftigt.
              Natürlich wächst man auch mit den Herausforderungen - aber ist es sinnvoll, die Funktionsweise eines integrierten Schaltkreises verstehen zu wollen, bevor man überhaupt so richtig weiß, was Spannung und Strom ist?
              Wie gesagt, ich möchte das nicht als Beleidigung verstanden wissen - aber ich finde einfach, du eilst deinen eigenen Kenntnissen und Fähigkeiten zu weit voraus. Deine Fragestellungen lassen mich das ab und zu vermuten.

              Findest du das schlimm, wenn ich mir so die Grundlageninformationen unterstützend erarbeite?

              Nein, im Gegenteil. Nur durch praktische Anwendung setzt sich das, was man in der Theorie gelernt (vielleicht gelesen) hat, auch wirklich im Gedächtnis fest.

              Und ich denke auch nicht, dass ich das beim gezielten suchen in einem Buch finde. hab ich zumindest nicht- weil die "offizielle" Bezeichnung des problems nicht so einfach zu treffen ist.

              Naja, Google und die Stichwortsuche im PHP-Manual sind auch bei unscharfen Suchbegriffen nicht zu verachten... ;-)

              [...] und ich werd mich benühen noch mehr Fragen selbst zu beanworten - aber machmal gehts leider nicht.

              Wie gesagt: Das ist nicht der Punkt. Meiner Ansicht nach machst du einfach zu große Schritte. Gib dir selbst etwas mehr Zeit, mit den Grundlagen vertraut zu werden, bevor du etwas Neues ausprobierst, das darauf aufbaut. Das ist nicht immer einfach, weil der Anreiz manchmal verdammt stark ist - aber du tust dir selbst einen Gefallen damit.

              In diesem Sinne,

              Martin

  3. Hallo,

    Habe eine Variable die definitiv auf 0 gesetzt ist.
    Sie wird auch als Null ausgegeben

    0 != null.

    if ($kon == gkghsf) {
    echo'$irgendwas';
    };

    Existiert wirklich eine Konstante namens "gkghsf"?
    Wenn, dann sollte sie groß geschrieben werden.
    Aber ich denke Du meinst eher folgenden Stringvergleich:
    if($kon == "gkghsf") { [..] }
    Die Anführungsstriche dürfen nicht fehlen. So sollte
    'irgendwas' nicht erscheinen (vorausgesetzt der Wert der
    Variablen ist nicht wirklich "gkghsf" ;-)

    mfg
    Patrik

    1. Hallo Patrik.

      Existiert wirklich eine Konstante namens "gkghsf"?
      Wenn, dann sollte sie groß geschrieben werden.

      PHP != Ruby

      Oder beziehst du dich auf ungeschriebene Konventionen zur Konstantenhandhabung?

      Einen schönen Montag noch.

      Gruß, Ashura

      --
      Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
      30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
      Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
      MathML fetzt
      1. Hallo Ashura,

        Oder beziehst du dich auf ungeschriebene Konventionen
        zur Konstantenhandhabung?

        Also es ist ziemlich etabliert Kontstanten mit Uppercases zu titulieren.
        Siehe dazu u.a.:

        ==PHP==
        http://de3.php.net/constants
        "A constant is an identifier (name) for a simple value.
        As the name suggests, that value cannot change during the
        execution of the script (except for  magic constants, which
        aren't actually constants). A constant is case-sensitive by
        default.
        By convention, constant identifiers are always uppercase."

        ==JAVA==
        http://www.torsten-horn.de/techdocs/java-codingconventions.htm#NamingConventions-JavaTypen
        "Konstanten:
        Konstanten werden komplett in Großbuchstaben geschrieben.
        Interne Wortbestandteile werden durch Unterstriche ('_')
        voneinander getrennt.
        Konstanten sollten nicht direkt im Code zum Beispiel als
        Zahl eingefügt werden (keine 'Magic Numbers'), sondern im
        Klassenkopf als 'static final'-Konstante definiert werden.
        static final int    WIDTH_MIN = 100;
        static final int    WIDTH_MAX = 999;
        static final String MEIN_NAME = "Torsten";"
        (Unter Punkt 6)

        ==C/C++==
        http://bel.gsi.de/mk/sty/cstyle.html#constDef
        "Konstanten: Konstanten sollen in Großbuchstaben geschrieben
        werden. Trennzeichen zwischen Namensteilen ist der Unterstrich
        (_). Elemente eines Aufzählungstyps sind ebenfalls Konstanten.
          #define MAX_LOG_DEVICE 10
          const ULong MIL_TIMEOUT = 5;
          enum Color {RED, GREEN, BLUE};"

        ==VB.NET==
        http://www.galileocomputing.de/openbook/vb_net/msvb020018.htm#Rxxmsvb020018256Konstanten
        "2.19 Konstanten
        Eine Konstante ist eine schöne und einfache Sache. Sie wird
        einmal festgelegt und kann nicht mehr geändert, aber (fast)
        überall verwendet werden.
        Normalerweise werden Konstanten in Großbuchstaben geschrieben.
        Dann wird – wie bei Variablen – der Wertebereich angegeben und
        anschließend der Wert. Beispielsweise:
        Const MWST As Double = 0.16"

        ==PERL==
        http://wiki.perl-community.de/bin/view/Wissensbasis/PerlTutorialKapitel2#Konstanten

        Einen schönen Montag noch.

        Danke. Und Gleichfalls.

        Grüße aus Berlin
        Patrik

        1. Hallo Patrik.

          Oder beziehst du dich auf ungeschriebene Konventionen
          zur Konstantenhandhabung?
          Also es ist ziemlich etabliert Kontstanten mit Uppercases zu titulieren.
          Siehe dazu u.a.:

          ==PHP==
          http://de3.php.net/constants
          "A constant is an identifier (name) for a simple value.
          As the name suggests, that value cannot change during the
          execution of the script (except for  magic constants, which
          aren't actually constants). A constant is case-sensitive by
          default.
          By convention, constant identifiers are always uppercase."

          *grummel*

          Hatte ich überlesen, danke für den Hinweis.
          Mir war die Relevanz im Grunde nur bei Ruby bekannt, da dieses sich aber an verbreiteten Sprachen orientiert, musste die Konstantenhandhabung ja einen Ursprung haben.

          Einen schönen Montag noch.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
          Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
          MathML fetzt
          1. Hallo miteinander,

            By convention, constant identifiers are always uppercase."

            *grummel*
            Hatte ich überlesen, danke für den Hinweis.

            Naja, gut und schön.
            Aber Konvention ist nicht Vorschrift. Und solange es nach den Regeln einer Sprache erlaubt ist, Konstanten auch in Kleinbuchstaben zu schreiben, sind auch Verwechslungen und Leichtsinnsfehler ganz schnell passiert.
            Davon abgesehen gibt es auch Konstanten, die ich gemäß anderer Konventionen grundsätzlich klein schreibe, wie etwa die mathematische Konstante π (pi).

            Schönen Abend noch,

            Martin

            1. Hallo Martin.

              Naja, gut und schön.
              Aber Konvention ist nicht Vorschrift.

              Richtig. Es sind „nur“ vorgeschlagene Richtlinien, die sich in der Praxis oft als tauglich erwiesen haben.

              Und solange es nach den Regeln einer Sprache erlaubt ist, Konstanten auch in Kleinbuchstaben zu schreiben, sind auch Verwechslungen und Leichtsinnsfehler ganz schnell passiert.

              Wobei es hier im speziellen Fall in PHP etwas schwierig wird, Variablen und Konstanten zu verwechseln:

              $foo = "Foo";  
              echo $foo;  
                
              define("Bar", "Bar");  
              echo Bar;
              

              Davon abgesehen gibt es auch Konstanten, die ich gemäß anderer Konventionen grundsätzlich klein schreibe, wie etwa die mathematische Konstante π (pi).

              Hm... Wie würde man [latex]\pi[/latex] auch groß schreiben?

              Einen schönen Montag noch.

              Gruß, Ashura

              --
              Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
              30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
              Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
              MathML fetzt
              1. Hi,

                Richtig. Es sind „nur“ vorgeschlagene Richtlinien, die sich in der Praxis oft als tauglich erwiesen haben.

                Genau. Das heißt, dass man sie a) aus Versehen missachten und dann auf die Schnauze fallen kann, oder b) bewusst missachten kann, um einen bestimmten aha-Effekt zu provozieren.

                Wobei es hier im speziellen Fall in PHP etwas schwierig wird, Variablen und Konstanten zu verwechseln:

                $foo = "Foo";

                echo $foo;

                define("Bar", "Bar");
                echo Bar;

                  
                Wieso? Wie schnell hat man nicht aus Gewohnheit $Bar reingehackt, oder bei foo das '$' vergessen, vor allem, wenn man außer PHP auch ab und zu in C programmiert...  
                  
                
                > Hm... Wie würde man [latex]\pi[/latex] auch groß schreiben?  
                  
                Dir ist bekannt, dass es auch im Griechischen Klein- und Großbuchstaben gibt? Kleines pi: π, großes pi: Π.  
                Übrigens: Ich hatte ursprünglich die Schreibweise PI als Alternative in Großschreibung gemeint. ;-)  
                Ciao,  
                  
                 Martin
                
                1. Hallo Martin.

                  Wieso? Wie schnell hat man nicht aus Gewohnheit $Bar reingehackt, oder bei foo das '$' vergessen, vor allem, wenn man außer PHP auch ab und zu in C programmiert...

                  Ersteres ist mir bisher noch nicht passiert, kann ich aber in der Tat nicht ausschließen.
                  Zweiteres kann ich eher weniger nachvollziehen, da PHP bisher meine einzige „große“ Programmiersprache ist.

                  Hm... Wie würde man [latex]\pi[/latex] auch groß schreiben?

                  Dir ist bekannt, dass es auch im Griechischen Klein- und Großbuchstaben gibt? Kleines pi: π, großes pi: Π.

                  Ja, dies war mir schon bekannt, doch dass sich dies auch auf [latex]\pi[/latex] ([latex]\Pi[/latex]? Tatsache...) ausdehnt, nicht.

                  Übrigens: Ich hatte ursprünglich die Schreibweise PI als Alternative in Großschreibung gemeint. ;-)

                  Das dachte ich mir bereits...

                  Einen schönen Montag noch.

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                  30 Days to becoming an Opera8 Lover -- Firefox tools for Opera built-ins
                  Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                  MathML fetzt
  4. Habe eine Variable die definitiv auf 0 gesetzt ist. Sie wird auch als Null ausgegeben

    jetzt habe ich geschrieben

    if ($kon == gkghsf) {

    echo'$irgendwas';
    };

    Und eigentlich dürfte doch jetzt die Anweisung nicht  ausgeführt werden, aber trotzdem wird sie es??

    das kann doch gar nicht sein oder??

    Hi Carsten,

    Nein, kann normalerweise nicht sein, dass sie trotzdem ausgegeben wird. Als 1. würd ich mein Script daraufhin untersuchen, ob evtl an anderer Stelle ein if ($kon == 0) steht, das übersehen wurde, auch und gerade in evtl. includierten Scripts.

    MfG
    Chris