KD-one: Parse Error?!?

Hallo alle,

Frage 1: Warum führt folgende Bedingung zu einem Parse-Error?

if (isset($_GET['content']) && (isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

M.E. müsste es true ergeben, wenn $_GET['content'] gesetzt und entweder Wert 1 oder Wert 2 zutrifft.

Frage 2: Wo kann ich am besten nachlesen, wie sich Schachtelungen von Klammern auswirken(rein mathematisch? Dann müsste obiges Beispiel gehen, oder wird durch Klammerung die Operatorenreihenfolge nicht beeinflusst?), respektive welche Art von Klammern für welchen Zweck vorgesehen sind? Ich hab PHP.net auf den Kopf gestellt, aber leider nicht das richtige gefunden.

Gruß

Kurt

--
"Wenn du einen Menschen gluecklich machen willst, dann fuege nichts seinen Reichtuemern hinzu, sondern nimm ihm einige von seinen Wuenschen."  (Epikur von Samos; gr. Philosoph; 341-271 v.Chr.)
http://elektro-dunzinger.at
http://shop.elektro-dunzinger.at
  1. Hallo KD-one!

    Frage 1: Warum führt folgende Bedingung zu einem Parse-Error?

    if (isset($_GET['content']) && (isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

    Zu wenig Klammern:

    if ((isset($_GET['content']) && ((isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

    So müsste es gehen!

    Gruß

    mdkiller

    1. Hallo mdkiller,

      Frage 1: Warum führt folgende Bedingung zu einem Parse-Error?

      if (isset($_GET['content']) && (isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

      Zu wenig Klammern:

      if ((isset($_GET['content']) && ((isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

      So müsste es gehen!

      ???
      Du öffnest hierbei 7 Klammern, schliesst aber nur 5.
      Wo ist da die Logik?

      Gruß

      Kurt

      --
      "Andere beherrschen erfordert Kraft. Sich selbst beherrschen fordert Staerke."  (Laotse; chin. Philosoph; 4.-3. Jh. v. Chr.)
      http://elektro-dunzinger.at
      http://shop.elektro-dunzinger.at
  2. Hallo Philipp Hasenfratz, Sorgenkind Mech und mdkiller,

    Ich habe eure Nachrichten noch im Cache und danke euch für eure Antworten.
    Weiss der Teufel, warum die Nachrichten gelöscht wurden, scheint ein Serverausfall gewesen zu sein.

    Gruß

    Kurt

    --
    "Staunen ist der erste Grund der Philosphie"  (Aristoteles; gr. Philosoph; 384-322 v. Chr.)
    http://elektro-dunzinger.at
    http://shop.elektro-dunzinger.at
    1. Hallo KD-one,

      Weiss der Teufel, warum die Nachrichten gelöscht wurden, scheint ein Serverausfall gewesen zu sein.

      Man sollte eine Spendenaktion durchfuehren, um neue Hardware zu kaufen.

      *SCNR*

      David Schneider

  3. Moin!

    Frage 1: Warum führt folgende Bedingung zu einem Parse-Error?

    if (isset($_GET['content']) && (isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

    isset() ist eine Funktion, die die Existenz einer Variablen prüft.

    isset($_GET['content']) ist ein korrekter Aufruf.

    isset($_GET['content']=="wert1) ist kein korrekter Aufruf, weil das Argument von isset() keine Variable mehr ist, sondern ein Ausdruck, der entweder wahr oder falsch ist.

    Wenn du wissen willst, ob $_GET['content'] einen bestimmten Wert hat, lass isset() einfach weg.

    Und da PHP Kurzschluß-Evaluation benutzt, ist folgender Ausdruck problemlos möglich, auch wenn $_GET['content'] nicht existiert und normalerweise eine Notice erzeugt:

    if (isset($_GET['content']) && (($_GET['content']=="wert1") || ($_GET['content']=="wert2")))

    Der zweite Teil des && wird nur ausgeführt, wenn er erste Teil wahr ist. Andernfalls kann die AND-Bedingung ja nicht mehr wahr werden - das Ergebnis der AND-Verknüpfung steht fest (falsch).

    - Sven Rautenberg

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
    1. Hallo Sven,

      if (isset($_GET['content']) && (isset($_GET['content']=="wert1") || isset($_GET['content']=="wert2")))

      isset() ist eine Funktion, die die Existenz einer Variablen prüft.

      isset($_GET['content']) ist ein korrekter Aufruf.

      isset($_GET['content']=="wert1) ist kein korrekter Aufruf, weil das Argument von isset() keine Variable mehr ist, sondern ein Ausdruck, der entweder wahr oder falsch ist.

      Wenn du wissen willst, ob $_GET['content'] einen bestimmten Wert hat, lass isset() einfach weg.

      Und da PHP Kurzschluß-Evaluation benutzt, ist folgender Ausdruck problemlos möglich, auch wenn $_GET['content'] nicht existiert und normalerweise eine Notice erzeugt:

      if (isset($_GET['content']) && (($_GET['content']=="wert1") || ($_GET['content']=="wert2")))

      Der zweite Teil des && wird nur ausgeführt, wenn er erste Teil wahr ist. Andernfalls kann die AND-Bedingung ja nicht mehr wahr werden - das Ergebnis der AND-Verknüpfung steht fest (falsch).

      Ja, danke, ähnlich hatten es mir auch Philipp Hasenfratz und Sorgenkind Mech erklärt, aber leider sind diese beiden Postings bei einem Serverabsturz gelöscht worden.
      Eigentlich hätte ich da auch selbst draufkommen können, aber, wie so oft, wenn man die Nase zu tief im "Dreck" stecken hat,... ;-)
      Man sollte logische Überlegungen nicht nur auf das Problem eingrenzen sondern auch ab und zu die Umgebung mitbetrachten.
      Ich habe Klammern gezählt und was mir sonst noch so alles eingefallen ist, aber die Logik der Syntax zu hinterfragen, auf die Idee bin ich nicht gekommen.
      Danke dir.

      Gruß

      Kurt

      --
      "Feindseligkeit ist eine persoenliche Unabhaengigkeitserklaerung."  (Aldous Leonard Huxley; engl. Schriftsteller u. Kulturkritiker; 1894-1963)
      http://elektro-dunzinger.at
      http://shop.elektro-dunzinger.at