Kein Schleifchen um die PHP Schleife

Silke Schümann wrote this 11:02:

Gewöhnlich lasse ich ja programmieren und programmiere nicht selbst, entsprechend bin ich ein Grünschnabel im Programmieren. Aber wenn man nicht anfängt, lernt man es nie. Jetzt stehe ich wie der Ochs vorm Berg und trotz intensiven Kopfkratzens bleibt mir mein Denkfehler verborgen … zum Problem:

Basisordner und Unterordner

Ich habe eine Grundinstallation in irgendeinem Ordner auf dem Server und in diesem Ordner mehrere Unterordner. Ich habe weiterhin die Unterscheidung, dass ich mich mal direkt im Ordner mal im Unterordner ‘/admin’ befinde.

Ich habe als vier verschiedene Konstelationen, die in einer Schleife zur Erzeugung der Links angetroffen werden können.

  1. Bin ich A) in der ersten Ebene oder B) in der zweiten Ebene?
  2. Bin ich A) im ‘/admin’ einer Ebene oder B) bin ich nicht im Admin?

Ich möchte entweder auf der User-Ebene oder auf der Admin-Ebene bleiben

Zunächst einmal erfasse ich wo ich bin und setze den Array mit den Verzeichnisnamen

  1. $aktDir=getcwd();
  2. $aktDirName=basename($aktDir);
  3. $troot = "http://.../";
  4. $tbase = "baseordner";
  5. $tdirs = ",Startsequenz |subordner1/,Menuname1 |subordner2/,Menuname2 |subordner3/,Menuname3 |subordner4/,Menuname4 |";
  6. $tedit = "admin/";

Nun meine ich habe ich alles was ich brauche. Ich habe den aktuellen Verzeichnisnamen, den ich aktuellen Pfadnamen und ich kann unterscheiden, zwischen 1. und 2. Ebene und ob ich gerade im admin bin oder nicht. ich schnippel also jetzt erst mal den Array in seine Bestandteile auf.

  1. $tdpa = split('\|',$tdirs);
  2. $c = count($tdpa);

Schreibe eine Schleife, in der diese süßen Stückechen verarbeitet werden.

  1. for($i=0; $i< $c; $i++){
  2. $tcd = explode(',',$tdpa[$i]);
  3. $tsep = ($i == $c-1) ? '' : ' • '; //Linkseperator
  4. if ($aktDirName == $tbase) {$tcrl = '';}
  5. elseif ($tcd[0].$aktDirName == $tcd[0].$tedit && $tcd[0] == '') {$tcrl = '../';}
  6. elseif ($tcd[0].$aktDirName == $tcd[0].$tedit && $tcd[0] != '') {$tcrl = '../../';}
  7. else {$tcrl = '../';}
  8. echo '<a href="'.$tcrl.$tcd[0].$tedit.'">'.$tcd[1].$tsep;}

Und da in der Schleife liegt ein Denkfehler und ich ich verstehe aktuell nicht, wo ich auf dem Holzweg bin. Ich habe Schleifen so verstanden, dass für jedes süße Stückchen also für “,Startsequenz ” und “subordner1/,Menuname1 ” etc. der Code in der Schleife durchlaufen wird und in jedem einzelnen Fall entschieden wird, was Sache ist.

Wenn ich also Frage, ob tcd[0] also “” oder “subordner1/” befüllt ist oder nicht, dann habe ich die Unterscheidung, ob die Schleife gerade im Array den Link für die Basisebene oder eine Unterebene schreibt. Wenn ich frage, ob tcd[0] == $aktDirName ist weiß ich, wann er das Menü gerade im Baseordner aufbaut. Prüfe ich die Zusammensetzung wie in Zeile 6. des Scripts, dann weiß ich ob es der Admin im Baseordner ist. Ich habe also alle Fall unterscheidungen, die ich brauche, und trotzdem kommt nicht das gewünschte Ergebnis heraus. Ich bekomme den Kohl, das Schaf und den Wolf noch nicht über den Fluß.

Deswegen lasse ich gerne programmieren und quäle mich nicht selber durch. Aber vielleicht findet sich ja eine gute Seele, die sich meiner armen Seele erbarmt. Wo mache ich den Fehler mit dem Aufbau und den Rücksprüngen in den Links?

30 Responses to “Kein Schleifchen um die PHP Schleife”

  1. creisi Says:

    Also, ich bin jetzt noch ein bisschen zu müde, um es ganz genau anzusehen, aber Folgendes ist mir aufgefallen:

    - Mach mal beim split (bei $tdpa) einen Backslash vor die Pipe oder statt split explode.

    - Müsste dort $tcdirs nicht $tdirs heissen?

    Und die Schleife habe ich mir jetzt noch nicht genauer angesehen. Was passiert denn bei dem Code, irgendwelche Fehlermeldungen?

  2. Silke Schümann Says:

    Wenn da Fehler drin sind, dann durch das umschreiben für den Beitrag. Die Arrays werden richtig gesplitted und aufgedröselt. Das Problem liegt wie geschrieben in der logischen Zuordnung. Aber ich schaue noch mal, ob und wo ich im Script an dieser Stelle jetzt einen Fehler gemacht habe. :D

    Es ist Sonntagfrüh … trink erst einmal einen Kaffee. *kicher*

    Oh … das kommt davon … ich hatte Komma und Pipe erst umgekehrt und habe wegen der Lesbarkeit im Post gedreht … ich lerne: der Backslash muss sein … danke.

  3. Silke Schümann Says:

    Grundsätzlich ist es doch richtig, dass damit aus diesem Skript eine Zeile wird "Link0 • Link1 • Link2 • Link3 • Link4" der in Abhänigkeit zur Ebene mit entsprechenden Rücksprüngen "../" ausgestattet wird, das Skript 5 Mal durchläuft und den Fall mit ififelseelse abprüft, oder?

    Dann müsste doch auch in Abhänigkeit zu $tcd[0] == ''; eine Fallunterscheidung erfolgen und in jedem Fall auch Bekannt sein ob aktuell der Fall $tcd[0] == $tbase vorliegt … ???

  4. Silke Schümann Says:

    Huch??? Warum wird den die Variable $aktDirName in der schleife zu 1 und ist ausserhalb der Ordnername … wie verhindert man so etwas … sch*** Programmierung … das ist es was ich daran so hasse … man weiß nie woran man ist … Aaaaaaaarrrrrgh! Und fast immer ist es an einer Stelle ein kleiner albener Tippfehler … @#+(*)&%

  5. creisi Says:

    Ja, grundsätzlich schon. Was gibt denn das Script jetzt für eine Ausgabe? Und sind das nur Fehler, die beim Kopieren passiert sind?:

    Zeile 2:
    $tcd = explode(’,',$tdpa[$ti]);
    müsste heissen
    $tcd = explode(’,',$tdpa[$i]); (nicht $ti)

    Und bei $tbase hast Du baseordner drin, im Verzeichnisbaum im ersten Bild steht da aber basisordner. Und in $troot hast Du 3 Punkte.

    Und was ich erst jetzt sehe, in Zeile 4 hast Du ein = zu wenig:
    if ($aktDirName = $tbase) {$tcrl = ‘’;}
    müsste heissen:
    if ($aktDirName == $tbase) {$tcrl = ‘’;}
    Sonst ist $aktDirName immer $tbase, und dann funktioniert’s natürlich nicht mehr…

    Wenn das alles nichts hilft, lass Dir beim Testen evtl. auch ausgeben, was in $aktDirName steht.

  6. creisi Says:

    Da warst Du jetzt wohl schneller ;-)

  7. Silke Schümann Says:

    Ja. Ich habe wohl an einigen Stellen nicht verglichen sondern zugeordnet. Statt == ein =
    So kann das ja nichts werden … trotzdem nun habe ich in allen Überprüfungen und unterscheide tapfer zwischen den fällen und trotztdem schaffe ich es noch nicht aber nagut ich wurschtel an diesem Anfängerproblem also noch den halben Tag … nur gut dass es bis zu Reboot noch einige Tage sind. :D

    Meine Abfrage lautet aktuell:

    if ($aktDirName == $tbase && $tcd[0] == '') {$tcrl = '';}
    elseif ($aktDirName == $tbase && $tcd[0] != ''){$tcrl = '../';}
    elseif ($tcd[0].$aktDirName == $tcd[0].$tedit && $tcd[0] == '') {$tcrl = '../';}
    elseif ($tcd[0].$aktDirName == $tcd[0].$tedit && $tcd[0] != '') {$tcrl = '../../';}

    Und das tut nicht wie es soll.

    Ich habe auch beschlossen, das die aktuelle Seite keinen Link mehr bekkommt und am Ende noch einmal aufgedröselt:

    $tla = ($tcd[0] == $aktDirName) ? '':'<a href="'.$tcrl.$tcd[0].$tedit.'" '.$tclass.'>';
    $tle = ($tcd[0] == $aktDirName) ? '':'</a>';
    echo $tla.$tcd[1].$tle.$tsep;

    Was auch nicht tut, was ich mir so vorstelle …

  8. creisi Says:

    Also am Einfachsten kommst Du solchen Problemen auf die Spur, wenn Du Dir innerhalb der Schleife die Variablen ausgeben lässt, hier:
    $aktDirName
    $tbase
    $tcd[0]
    $tedit

    Und verrat doch mal, was das Script jetzt aktuell ausgibt.

  9. Silke Schümann Says:

    Ich quassel gerade mit Robert. Er meinte ein Switch wäre hier die einfachere Lösung.

    Ein Problem war der Unterschied zwischen $aktDirName und $tcd[0] bei dem am Ende einmal ein Slash ist und einmal nicht. Das heißt, der Vergleich funtkionierte nicht.

  10. DonKult Says:

    Tut mir leid wenn ich das so sagen muss, aber so wie ich das sehe kann das mit deinem Script nicht so richtig funktionieren. (Ich weiss, sowas wollen Anfänger hören…) Ich hab mal ein bisschen rumprobiert und einen Script erstellt der das tun sollte, was du wolltest. (Hab ihn als Website angegeben, da hier einfügen komisch aussehen wird…) Kann man auch gleich live ausprobieren, einfach, index.txt aus der URl entfernen und auf test.php gehen…
    Grundsätzliches zum Ablauf:
    Erste Zeile stellt fürs Debuggen die Fehlerausgabe auf alles. Sehr zu empfehlen! Können nur noch halb so viele Flüchtigkeitsfehler unendeckt bleiben.
    Als nächstes Ermittelt der Script wo er sich befindet ($dir_now) und speichert in $dir_base bis wohin er runter gehen soll.
    Dann folgt ein mehrdimensonaler Array mit den Daten für das Menü, ich halte das für weniger fehleranfällig und nebenbei muss zur laufzeit nicht mehr gesplittet werden.
    In $dirs wird dann jede einzelne Verzeichnisebene abgelegt und per for-Schleife durchgegangen, bis wir unser $dir_base erreicht haben, dann wird abgebrochen. Naja, und dann wird für jeden Menü-Array noch eine Schleife durchlaufen um die Links zu erzeugen. Eigentlich ziemlich einfach ;)
    Kommt jetzt wahrscheinlich ziemlich arogant rüber, ist aber gar nicht so beabsichtigt, sondern soll eine kleine Hilfe sein. Viel Spaß noch mit PHP und/oder den vielen anderen Sprachen. Am Anfang ist es sicher schwer, aber kennt man erstmal eine kennt man alle ;)
    MfG. David

  11. Silke Schümann Says:

    Hallo David,

    ich bin für bessere Lösungen immer zu haben. Und ich weiß, dass ich mit meinem unvollständigen Repertoir nicht selten auf der falschen Straße nach dem Weg frage. Da habe ich kein Problem. Deswegen löse ich im Moment auch immer (fast ausschließlich//meist) meine eigenen Probleme und nicht die der Kunden, das wäre mir noch zu heiß. :-)

    Nun wäre nett zu wissen, wieso mein Ansatz nicht klappen soll?

  12. Silke Schümann Says:

    Ähm … :D bin ich im Ordner subordner1/admin erzeugt Davids Skript Links in admin/subordner1/subordner2/admin … das ist es noch nicht aber es ist schon eine Lösung mit Switch, was ja auch Robert meinte, dass man dies per switch oder case abarbeitet und erst die Ebene und schließlich noch den admin trennt und in getrennten Schleifen behandelt.

  13. DonKult Says:

    Das wundert mich jetzt aber, weil es bei mir beim testen ja funktioniert…
    http://donkult.losespace.de/test/test.php
    http://donkult.losespace.de/test/subordner1/admin/test.php

    lass dir mal den Array $dirs und die Variable $jumper ausgeben. Ich vermute $jumper ist leer bei dir oder $dirs nicht den richtigen Pfad enthält. Auf Anhieb würde mir ansonsten nur einfallen, dass $dir_base bei dir einen ‘falschen’ Wert hat.
    Aber wie creisi schon erwähnt hat: soviele Ausgaben wie möglich machen! Bei Arrays ist print_r($array) eine große Hilfe, ansonsten sollte echo reichen. Dann findet sich ein (kleiner) Fehler recht schnell. ;)

  14. Silke Schümann Says:

    Vielleicht ist es das $dir_file = $_SERVER['PHP_SELF'];
    Das Skript selbst liegt bei mir in einem Plugins-Ordner und wird von dem MiniCMS Editland in die Seite geholt. Aber ich habe mich heute eh schon davon verabschiedet noch etwas anderes außer der Hauptnavigation zu machen, also die zweite Zeile mit den Links zu den Unterordnern von einer sehr sehr umfangreichen Site hinzubekommen. Was für ein Fortschritt, was für ein höllisches Tagwerk. *Pruuust*

  15. Silke Schümann Says:

    Danke erst mal für die Hilfe. Ich jetzt erst einmal das Skript außerhalb von Editland in vergleichbarer Ordner-Konstallation versuchen hinzubekommen, wenn ich das habe, dann kommt schritt zwei, dass ich es wieder als Editland-Plugin da hineinwurschtel. Dann kann ich auch mit error_reporting(E_ALL); arbeiten, was innerhalb von Editland nicht so ganz der Hit ist.

  16. Silke Schümann Says:

    Ich habe den kleine aber feinen Unterschied glaube ich gefunden:
    if(!is_array($link)) {... Damit funktioniert das Skript nur auf der ersten Unterebene, denn schon wenn die Ordner eine Ebene tiefer liegen, habe ich einen Array beim zerlegen der Url an dieser Stelle: $dirs = explode('/',$dir_now);.

    Damit das Skript Blind in jedem Ordner verwendet werden kann brauche ich noch eine andere Lösung, eben das zurückspringen mit ‘../’. Aber über den Zähler des Url-Array sollte da eine Lösung drinstecken. Dass es nicht stur ins admin geht kann ich mittels $tedit = (basename($dir_now)=='admin')? 'admin/':''; verhindern. Soweit bin ich schon. :-)

    Fehlt also nur noch die kleine Bescheidene Hürde der Basis in der 2 oder späteren OrdnerEbene. Wobei ich es für meine aktuelle Anforderung nicht bräuchte, die ist im anspruchsloser.

  17. Silke Schümann Says:

    Ich nehme alles zurück Schmonzes … es ist beliebig, in welcher Unterebene ich es außerhalb von Editland habe, aber nicht innerhalb von Editland … das ist gemein. Ausgerechnet dort brauche ich es. Na dann mal sehen, wo da der Haken steckt.

  18. DonKult Says:

    Ja, hast recht $_SERVER['PHP_SELF'] funktioniert nicht, wenn die Datei includiert wird. Dafür gibt es aber auch eine Lösung: die magische Konstante __FILE__ . Problem daran ist dann nur, dass es mit Pfadangaben arbeitet, die je nach Server-Betriebsystem unterschiedlich sind. Je nachdem muss also ein- und auskommentiert werden.
    Hoffe es funktioniert jetzt auch bei dir, bei mir klappts jetzt jedenfalls (auch includiert) ;)
    http://donkult.losespace.de/test/ Testsystem (UNIX)
    http://donkult.losespace.de/test/index.txt Quellcode

  19. Silke Schümann Says:

    Jetzt habe ich etwas dazugelernt. __FILE__ kann ich den Plugin-Ordner ansteuern, wenn ich das mal brauchen sollte, denn zumindest bei mir lokal im win2k mit der Appserve-Apache-Blase gibt __FILE__ den Ordner des PHP-Skripts aus, das per include eingefügt wurde.

    $dir_file = $_SERVER['PHP_SELF']; gibt den richtigen Ordner aus, aber dennoch springen die Links dann direkt zu localhost/unterverzeichnis.

    Das Skript funktioniert bei mir lokal mit include und $_SERVER['PHP_SELF'] außerhalb von Editland. Ich muss herausfinden, wo das MiniCMS dazwischenfunkt. Bei meinen nicht vorhanden PHP-programmierkenntnissen eine ziemliche Hürde.

    Darf ich Dir ein Editland schenken? Für’s helfen …

  20. DonKult Says:

    dürfen darfst du, ich kann dich ja schlecht davon abhalten ;) Aber um das ganze noch ein wenig zu erklären:
    $_SERVER['PHP_SELF'] enthält die relative Angabe zu der Datei auf dem Server, die der Server aufgerufen hat. Eine Datei die allerdings per include oder require in diese Datei eingefügt wird, wird nicht vom Server aufgerufen, sondern vom PHP-Interpreten, daher behält $_SERVER['PHP_SELF'] ihren Wert – auch über Includedateien hinweg. $_SERVER['PHP_SELF'] ist dazu gedacht z.B. Links/Formulare auf sich selbst zeigen zu lassen.
    Anders verhält es sich bei der magischen Konstante __FILE__. (Der Name ist verwirrend, magisch bedeutet nämlich genau das Gegenteil von konstant.) __FILE__ verändert von Datei zu Datei ihren Wert, und zwar in der Weise, dass der absolute Pfad + Dateiname zur aktuell durch den PHP-Interpreten verarbeiteten Datei geliefert wird.
    Wenn das Script nicht includiert wird, haben beide Variablen (etwa) den selben Inhalt, der Unterschied zwischen beiden wird also erst beim includieren deutlich. Klingt anfangs etwas komisch, hat aber alles seinen Sinn, man muss es halt nur wissen.
    MfG. David

    P.S.: Wäre schön wenn der Kommentar-RSS-Feed den Wordpress unterstützt (und von dem im normalen Feed die Links dazu mitgeliefert werden) auch in der Einzelansicht genannt werden könnte. Den Kommentarfeeds sollte man sich aber sowiso einmal ansehen, der scheint nachdem 16 Kommentar aufgehört zu haben zu aktualisieren, was mir abundan schon bei ein paar Blogs aufgefallen ist…

  21. Silke Schümann Says:

    Dös mit den Kommentaren sag ich dem Robert … dafür habe ich heute keinen Nerv mehr. Ich komme mir aktuell wie die Emanze vor, die feststellt, dass sie auch ganz gut ohne Männer auskommt und die mit einer Flasche Wein begießen will und dann aber beim Entkorken der Weinflasche scheitert und bitterlich zu weinen anfängt, dass kein Mann da ist.

    Programmieren-lernen schafft es jedes Mal, dass ich alle dicken Bücher, die ich zum Thema anschuf, samt Computer im hohen Bogen aus dem ungeöffneten Fenster werfen will. Das fängt bei den vergessenen Zeichen an und endet bei so Variablen-Kuddelmuddel noch lange nicht.

  22. Silke Schümann Says:

    OK. Auf meinem Serverplatz auf einer Unix-Maschine tut das skript. Scheint also ein Problem der lokalen Installation mit win2k und Apache zu sein. Wobei ich noch nicht verstehe, wieso es online funktioniert aber nicht offline.

    Ich habe also die Situation, dass es lokal zwar außerhalb von Editland geht, nicht aber innerhalb. Auf einer Unix-Maschine mit anderen Settings funtkioniert es dann auch innerhalb von Editland. na bravo. Aber ich denke ich kann damit leben, dass ich jetzt für die Entwicklung für CSS-Reboot 2006 lokal die adresse in die Adresszeile geben muss. Hauptsache es funktioniert online und ich kann später bequem die Seiten pflegen.

  23. DonKult Says:

    *kopf streichel* so schlimm sind Männer und Programmiersprachen doch gar nicht, dass man sie auf ewig verbannnen muss. Man kann auch ohne großen Arger friedlich neben ihnen existieren. Es muss ja nicht jeder gleich Profi-Programmierer werden. Ich kann ja auch keine Designs erstellen, die nach was aussehen, aber ich kann immerhin (X)HTML + CSS um vorhandene Designs nach meinen Wünschen anzupassen. Beim programmieren muss das nicht anders sein: Man muss ja nicht gleich sein eigenes Weblog schreiben, es kann ja auch reicht wenn man ein paar Anpassungen an einem vorhanden machen kann. Und genau dafür sollte man eigentlich wenigstens ein bisschen programmieren können. Man kann das alles ja auch nicht von heute auf morgen lernen: English ist auch eine Sprache, die ich nun seit 8 Jahren lernen (muss) – richtig verstehen tue ich sie heute noch nicht ;)
    Wie einer meiner Lehrer immer sagt: “Man hört nie auf zu lernen”. Genau so läuft es. Man kann aus den Büchern die Theorie lernen, wie man if-else konstruiert, wie switch funktioniert und warum Schleifen Schleifen heissen, aber die Praxis ist was anders, die kann man nicht lernen (Erinnert mich an die Fahrschule… Theorie und praktische Theorie). Hier heisst es dann Erfahrung sammeln. Und das geht nur wenn man es sich immer wieder traut etwas zu probieren. Einfach probieren! Damit bin ich bisher immer gut gefahren (auch in der Fahrschule). Und wenn man nicht weiter kommt, dann kann man ja fragen: Kostet ja bekanntlich nichts. Ob jemand antwortet ist eine andere Frage, aber mit einem Weblog im Rücken und einer Leserschaft, die von sich behauptet, sie wäre Web2.0-Kompatibel ~ also “social”-fähig ~ sollte das kein Problem sein jemanden zu finden, der sich gerne die Zeit nimmt und hilft.
    Zum PHP lernen kann ich selbst 2 Seiten empfehlen:
    http://tut.php-q.net/ & http://www.php-faq.de/ (beide deutsch)
    Die helfen beide doch schon ein ganzes Stück weiter: Ansonsten gibt es ja noch Google und das php.net-Manual und wie bereits erwähnt die web2.0-kompatiblen webloglesenden Programmierer ;)
    MfG. David

  24. Silke Schümann Says:

    Ich kann nach einen 1-Jährigen Aufenthalt in meiner Jugend recht fließend Englisch. Aber wo finde ich ein Land das PHP spricht. :-)

    Meine häufigste Frage ist PHP Tutorial und das aktuelle Problem. Ich habe schon X Seiten gelesen und kann sogar schon fizzelig kleines bischen mitreden. Aber wenn ich so “Ich probier’s mal mit Programmieren”-Tage habe, dann weiß ich hinterher, warum ich das in der Regel in Auftrag gebe.

    Das eine oder andere anpassen, z.B. hier in den Kommentaren <code> zuzulassen oder auch Variablen für das Galerie-Provisorium dieser Seite aus 6×4 Variablen und einem heredoc-string zusammenzumischen, das ist nicht das Thema. Aber zu begreifen, warum mein erster Ansatz nicht gehen soll, wo doch die Schleife jedes Mal von neuem beginnt und immer die gleichen Fragen gestellt, es dem Fall entsprechend müsste beantwortet werden. Das mag nun nicht sonderlich performant sein aber bei 5 schleifen, dürfte das keinen Unterschied machen, egal wie groß die Serverlast ist. Naja.

    Großes Dankeschön. Und wenn die Demo zusagt. Lizenzcode ist gleich rausgeschickt, wenn ich weiß auf welche reale Person.

  25. DonKult Says:

    mmh. Leider kann ich mit keinem Land dienen was PHP spricht. Aber es muss ja nicht immer ein Land sein. Latein hab ich auch gelernt und dazu gibt es auch kein Land. Es wird auch nicht mehr gesprochen. Aber es gibt viele viele Texte die nur in dieser Sprache geschrieben sind, der bekannteste bei Designern dürfte “Lorem Ipsum” sein. Wiso also nicht auch die Sprache PHP lernen?!?
    Was dein Script betrifft: Der Versuch war gut. Keine Frage.
    Ich hab mir den jetzt mal ganz genau angesehen:
    Problem bei deinem Script ist nur die Art wie du an das aktuelle Verzeichnis des Scriptes kommst in der 1. und 2. Zeile. 1. Zeile ist noch okay, wir haben “nur” das selbe Problem wie mit $_SERVER['PHP_SELF'], sie liefert den Pfad zur Datei die der Server aufgerufen hat. Die 2. Zeile ist da kritischer: Die Funktion basename() liefert für dich ein falsches Ergebnis. Eigentlich extrahiert sie nur den Namen einer Datei aus einem Pfad, da UNIX-Dateien auch keine Endung haben können, liefert sie allerdings bei dir ein (falsches) Ergebnis: im basisordner wäre das ‘basisordner’ (im subordner1 ’subordner1′, usw). Zum herausfinden des Pfades ist diese Funktion also ungeeignet, daher benutze ich dirname(), das lieft den aktuellen Pfad. Unterstellt man deinem Script, dass basename() das von dir erwartete Ergebnis geliefert hätte (wie es zugegebener Massen der Name der Funktion vermuten lassen könnte), so würde dein Script auch funktionieren. Er ist also keineswegs komplett falsch oder zum gradewegs in die Tonne tretten. Es ist eigentlich nur ein kleiner Fehler drin. Das mein Script so ganz anders aussieht als deiner liegt in der Tatsache begraben, dass mehrere Wege nach Rom führen und dass ich mehr Übung habe. Und auch daran, dass auch dirname() eine anderen Rückgabewert hat, also dein Script es erwartet.
    Es ist also eigentlich nur die 2. Zeile an nun inzwischen 25 Kommentaren und einem Tag Arbeit schuld. Dabei sollte du dich jetzt nicht drüber aufregen, dass du das nicht bemerkt hast, sondern feststellen, dass es sonst auch keiner bemerkt hat. Der Teufel steckt halt wie immer im Detail. Klarer Fall der “80% des Codes brauchen 20% der Zeit, 20% des Codes brauchen 80% der Zeit” – Regel: Und gegen die ist kein Kraut gewachsen. Das muss jeder durchmachen, selbst die Vollprofis die bei Yahoo, Google, Mircosoft & Co. damit ihr Geld verdienen. Ich kann nur sagen, dass es sehr oft hilft sein Problem ihrgendwo zu veröffentlichen. Ob es jetzt in einem Forum oder einem Weblog ist: Man ist gezwungen sich nochmal zu überlegen, was das Script tun soll und was es stattdessen tut, um es akurat zu beschreiben. Manchmal findet man dabei schon selbst die Lösung oder aber ein hilfbereiter Leser findet des Rätsels Lösung. Ich war auch oft genug in Situationen in denen ich gedacht habe: Hättest du dir statt dem C++ Buch doch damals lieber ihrgend einen Ego-Shooter gekauft, ich würde mich nicht mit solch dummen Variablen rumschlagen, sondern Monster verkloppen. Aber gut, es hat nicht sollen sein und für mich sehe ich das auch ganz positiv so und ich bin sicher du wirst auch noch früh genug erkennen, dass du eigentlich viel mehr kannst also du hier zugeben willst, den wie gesagt, der Script ist bis auf den 1 (Logik-)Fehler vollkommen okay.
    MfG. David Kalnischkies
    P.S.: so, jetzt kennst du wohl meinen vollständigen Namen… was du damit macht ist deine Sache. ;) Wer mit Editland morgen mal ansehen, wenn ich dazu komme… aber ich zweifle schon ein wenig daran dass es mir gefällt, schon allein bei der Einschränkung fürs Admin-Menü (IE-only)… Naja, mal sehen. Einem geschenkten Gaul schaut man nicht ins Maul… ;) Hauptsache ich konnte ein wenig helfen, das soll fürs erste Belohnung genug sein. *freudig grinsend einen Stift nehm und auf der TODO-Liste den Punkt ‘eine gute Tat’ durchstreich* Man, fühle ich mich heute wieder so Web2.0 . ;D

  26. Silke Schümann Says:

    Die Gute Tat gilt. :-)

    Latein habe ich auch mal gelernt und sogar in einem Heidelberger Intensivkurs mit einem kleinen Latinum nach 8Wochen abgeschlossen, so dass sich meine Freundin fragen musste, warum sie für dieses Zertifikat mehrere Jahre brauchte. Ich habe aber nur das Zertifikat und keine dauerhaften Lateinkenntnisse erworben im Unterschied zum Englischen, das ich mehr im Bauch als im Kopf habe.

    Aber dann ordne ich PHP eher in die Richtung Mathe ein und da habe ich immer schon mit dem Kopf und nicht mit dem Bauch gearbeitet. Ich denke schon, der Fall “Schümann, die PHP-Programmiererin” ist nicht ganz hoffnungslos.

  27. Templaterie Blog Says:

    [...] So nun ist denke ich ein Schleifchen so verstanden, dass ich damit arbeiten kann. Es ist das wohl wichtigste Schleifchen: Das Schleifchen um den Array. Als ich gestern das Skript von DonKult bekam, präsentierte er mir einen andere Syntax für den Array mit meinem Verzeichnisbaum und ich sah zwar, dass da immer noch mein Array war, aber ich wusste nicht mehr, wie ich denn nun das einzelne Element im Array rankommen würde. [...]

  28. Silkester erzählt » Blog Archive » PHP für blöde Editland-Plugin-Entwickler Says:

    [...] Mit dem Thema hatte ich mich schon einmal rumgeschlagen (Kein Schleifchen um die PHP Schleife) und irgendwie wollte es nie so richtig mit der Portierung von Lokal nach Web klappen … immer wieder verlor ich meinen Pfad. Jetzt ist es noch so flexibel auf auf alle Fälle anwendbar, aber es tut. [...]

  29. Templaterie Blog Says:

    [...] PHP für blöde Editland-Plugin-EntwicklerDie Fortsetzung zu einem Beitrag in diesem Weblog zum Thema (universeller) dynamischer relationaler Link in MehrfachinstallationenIn diesem Zusammenhang auch Pfade … Entwicklungsstufen hin zum Programmierer (unter besonderer Berücksichtigung von STRATO) und einem Querverweis zu einem Tutorial zu Pfaden bei PHP-Freak [...]

  30. Templaterie Blog Says:

    [...] Apropos: dem Thema ging ich schon einmal auf die Spur und habe mir verzweifelt einen abgekrampft: Kein Schleifchen um die PHP Schleife fc6 [...]

Leave a Reply