C. Almer: $end - error

hi!

ich hab probiert, ein script zu schreiben, das ne sql-db ausliest und danach ein menü erstellt.

mein script schaut bis jetzt so aus:

------------------------------------------------------------------------------------
<?php

$menuname = "mainmenu";

$query =
  "SELECT
   menu_pos
   menu_level
   menu_text
   menu_target
  From
    $menuname
  ORDER BY
   menu_pos Asc
   menu_level Asc";

$result = mysql_query($query);

echo "<div id="".$menuname.""><ul id="".$menuname."_menu"><li id="".$menuname."_left"></li>";

while ($row = mysql_fetch_assoc($result)) {

if(isset($lastlevel)) {
  if($result['menu_level'] == $lastlevel) {
   echo "</li>";
  } elseif ($result['menu_level'] > $lastlevel) {
   echo "<ul><li class="".$menuname."_level_top"></li>";
  } elseif ($result['menu_level'] < $lastlevel) {
   $leveldifference = ($lastlevel-$result['menu_level']);
   for ($i=1; $i<$leveldifference; $i++) {
    echo "</li><li class="".$menuname."_level_bottom"></li></ul>";
   }
  }
  }

echo "<li><a href="".URL."index.php?".$result['menu_target']."">".$result['menu_text']."</a>";

$lastlevel = $result['menu_level'];

}

if(isset($lastlevel) AND $lastlevel > 1) {
  for ($i = 1; $i  <$lastlevel; $i++) {
    echo "</li><li class="".$menuname."_level_bottom"></li></ul>";
 }

echo "</li><li id="".$menuname."_left"></li></ul>";
?>

(c) by C.Almer
------------------------------------------------------------------------------------

wenn ich dieses script ausführe, bekomme ich eine fehlermeldung:
     "Parse error: parse error, unexpected $end in C:\Programme\xampp\htdocs\blz\components\menus\menu.php on line 49"

ich weiß (oder glaube zu wissen), dass $end is ein gravierender fehler is, wie ne klammer zu wenig, wodurch das script nicht beendet werden kann

hab also den code einige male durchgelesen, aber ich finde nichts!

vielleicht findet ja einer von euch etwas!

aber bitte, bitte nicht einfach ne lösung posten (hab ich hier schon n paar mal gesehen), ich will wissen, was ich falsch gemacht hab!

  1. Hi,

    ich weiß (oder glaube zu wissen), dass $end is ein gravierender fehler is, wie ne klammer zu wenig, wodurch das script nicht beendet werden kann

    Du weißt korrekt.

    hab also den code einige male durchgelesen, aber ich finde nichts!

    Dann formatiere den Code besser. Rücke *jeden* Block mit exakt vier Leerzeichen ein. Der Fehler wird Dir entgegenspringen, wenn Du fast fertig bist.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      Rücke *jeden* Block mit exakt vier Leerzeichen ein.

      Pah! Das ist nun wirklich Geschmackssache[1]!

      ;-)  Erwin

      [1] obwohl ich spaces statt tabs bevorzuge

    2. Servus,

      Rücke *jeden* Block mit exakt vier Leerzeichen ein.

      Also das is nun wirklich Geschmacksache :) Ich verwende 2 Leerzeichen (ebenso keine Tabs), das zieht sich bei vielen Einrückungen nich so in die Breite, und mit Indentation-"Guidelines" bleiben die Blöcke trotzdem genauso ersichtlich.

      Wenn alles nichts hilft, die fehlende Klammer zu finden, dann hilft es eine Kopie des Codes "von innen heraus" zu reduzieren, also die Blöcke nacheinander zu entfernen beginnend mit den innersten.

      Der Fehler steckt, wie Hendrik bereits sagte, in diesem Teil:

      if(isset($lastlevel) AND $lastlevel > 1) {
        for ($i = 1; $i  <$lastlevel; $i++) {
          echo "</li><li class="".$menuname."_level_bottom"></li></ul>";
      }

      Ausserdem, was mir bei vielen immer wieder auffällt:

      echo "</li><li class="".$menuname."_level_bottom"></li></ul>";

      Warum zur Hölle setzt du (also C.Almer, nich Cheatah ;) den String in Double-Quotes wenn du die Variablen dann trotzdem konkatenierst?

      Gruss
      Patrick

      --
      sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
      1. Hi,

        Rücke *jeden* Block mit exakt vier Leerzeichen ein.
        Also das is nun wirklich Geschmacksache :)

        ja, natürlich. Man tut allerdings (spätestens dann, wenn man nicht bis in alle Ewigkeit der einzige ist, der diese Codes bearbeitet) gut daran, sich an dem allgemeinen Geschmack - nämlich den verbreitetsten Styleguides - zu orientieren. Dann sind vier Leerzeichen plötzlich nicht mehr Geschmackssache, sondern Pflicht.

        Ich verwende 2 Leerzeichen

        Viel zu eng, da kann man die Blöcke visuell gar nicht mehr richtig zuordnen.

        (ebenso keine Tabs),

        Gut :-)

        das zieht sich bei vielen Einrückungen nich so in die Breite,

        Wenn Du so viele Einrückungen hast, dass sich das bemerkbar machst, solltest Du Dir mal über Modularisierung und Objektorientierung Gedanken machen ;-)

        Wenn alles nichts hilft, die fehlende Klammer zu finden, dann hilft es eine Kopie des Codes "von innen heraus" zu reduzieren,

        Um solche Verrenkungen zu vermeiden, nennen die meisten Styleguides vier Leerzeichen als das Maß aller Dinge. Man erkennt die Zugehörigkeiten mit dem bloßen Auge, ohne dass der Code zu weit nach rechts rausläuft.

        Ausserdem, was mir bei vielen immer wieder auffällt:

        echo "</li><li class="".$menuname."_level_bottom"></li></ul>";
        Warum zur Hölle setzt du (also C.Almer, nich Cheatah ;) den String in Double-Quotes wenn du die Variablen dann trotzdem konkatenierst?

        Ja, solche Dinge werde ich auch nie verstehen ...

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Servus,

          spätestens dann, wenn man nicht bis in alle Ewigkeit der einzige ist, der diese Codes bearbeitet

          Wir arbeiten firmenintern mit 2 Leerzeichen, und wer anders muss da nich ran :)

          Viel zu eng, da kann man die Blöcke visuell gar nicht mehr richtig zuordnen.
          Wenn Du so viele Einrückungen hast, dass sich das bemerkbar machst, solltest Du Dir mal über Modularisierung und Objektorientierung Gedanken machen ;-)

          Wir kommen damit erstaunlich gut zurecht :P Das Problem mit den Einrückungen besteht auch nicht in den Klassen, sondern vielmehr in Templates.
          Für mich war der Umstieg von 4 auf 2 Leerzeichen anfangs auch recht ungewohnt, aber inzwischen bin ich soweit zu sagen, dass die Vorteile die Nachteile (für mich) überwiegen.

          Um solche Verrenkungen zu vermeiden [...]

          Ich brauche solche Verrenkungen auch nicht mehr, aber ich weiss noch, dass sie mir geholfen haben als ich noch jung und unbeholfen war ;)

          Gruss
          Patrick

          --
          sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
          1. Hi,

            spätestens dann, wenn man nicht bis in alle Ewigkeit der einzige ist, der diese Codes bearbeitet
            Wir arbeiten firmenintern mit 2 Leerzeichen, und wer anders muss da nich ran :)

            achherrje[tm] :-)

            Wir kommen damit erstaunlich gut zurecht :P Das Problem mit den Einrückungen besteht auch nicht in den Klassen, sondern vielmehr in Templates.

            Okay, bei HTML (oder etwas, was dem ähnlich sieht, etwa im Sinne von Template-Engines wie Smarty) bin ich gerne bereit, Ausnahmen zu akzeptieren; nicht zuletzt weil man bei End-Tags durch Zusatzinformationen (nämlich den Namen :-)) ein weiteres Identifizierungsmerkmal des zugehörigen Start-Tags erhält. Wir rücken allerdings auch diese Codes mit vier Leerzeichen ein, schon allein der Einheitlichkeit wegen - und weil die Begründung für weniger spätestens dann ad absurdum geführt wird, wenn man in modularen Konzepten arbeitet, die verschiedene Code-Teile inkludieren oder generieren (XSLT).

            Für mich war der Umstieg von 4 auf 2 Leerzeichen anfangs auch recht ungewohnt, aber inzwischen bin ich soweit zu sagen, dass die Vorteile die Nachteile (für mich) überwiegen.

            Ja, Styleguides sind Gewöhnungssache. Allerdings werde ich mich wohl nie daran gewöhnen, dass manche Leute die öffnenden geschweiften Klammern in die nächste Zeile setzen ;-)

            Um solche Verrenkungen zu vermeiden [...]
            Ich brauche solche Verrenkungen auch nicht mehr, aber ich weiss noch, dass sie mir geholfen haben als ich noch jung und unbeholfen war ;)

            Jupp, über Lernvorgänge brauchen wir nicht zu reden :-) zumal man damit einen üblichen Debugging-Mechanismus übt ...

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  2. Hey!

    if(isset($lastlevel) AND $lastlevel > 1) {
      for ($i = 1; $i  <$lastlevel; $i++) {
        echo "</li><li class="".$menuname."_level_bottom"></li></ul>";
    }

    echo "</li><li id="".$menuname."_left"></li></ul>";
    ?>

    Da fehlt glaub ich hinter der echo-Anweisung eine geschwungene Klammer. Also hier:

    echo "</li><li id="".$menuname."_left"></li></ul>";

    } //hier z.b... das wäre die if-Schliessung

    ?>

    Ich hoffe, ich konnte dir weiterhelfen.

    Hendrik

    --
    -------------------
    Zur Info: Ich habe leider nur PHP 4.4.4 und MySQL 4.1.22 zur Verfügung!
    -------------------
    ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
    SELFCode Decoder