Andrea: Frage zur "include_once" Anweisung

Hallo zusammen,

in der Beschreibung zur "inclue_once" Anweisung habe ich folgendes gefunden:

"Die Anweisung include_once() schließt zur Ausführungszeit die angegebene Datei ein und wertet diese aus. Dies ist ähnlich der include()-Anweisung; mit dem Unterschied, dass_einmal_eingebundener_Code nicht_nochmals_eingebunden_wird."

Kann ich das so verstehen, dass eine eingebundene Datei nur einmal pro Session über diesen Befehl eingebunden wird?

Hintergrund meiner Frage: ich möchte die Mehrsprachigkeit in include-Dateien auslagern, jede Sprache eine Datei. Die Datei enthält ein Array mit den übersetzten Textbausteinen.

Wenn ich nun in jeder php-Datei die include-Datei mit den Textbausteinen über include_once einbinde erfolgt diese Einbindung nur ein mal, selbst wenn ich die nächste Seite aufrufe wo die include_once Anweisung nochmal drin steht?

Was passiert dann eigentlich wenn der Anwender die Sprache ändert? Dann müsste doch eigentlich die neue Sprachdatei eingefügt werden, oder?

Danke im Voraus
Liebe Grüße

Andrea

  1. Hallo,

    Kann ich das so verstehen, dass eine eingebundene Datei nur einmal pro Session über diesen Befehl eingebunden wird?

    Wie kommst du denn auf Session?

    Wenn ich nun in jeder php-Datei die include-Datei mit den Textbausteinen über include_once einbinde erfolgt diese Einbindung nur ein mal, selbst wenn ich die nächste Seite aufrufe wo die include_once Anweisung nochmal drin steht?

    Nein. Die Datei wird zur Laufzeit nur einmal eingebunden. Wenn deine Seite im Browser vollständig geladen ist, ist auch die Laufzeit von PHP beendet. Wenn du dann "auf eine neue Seite gehst" interessiert PHP nicht, was davor war. Um genau zu sein weiss PHP das gar nicht mehr. Der Parser fängt wieder bei null an.

    Was passiert dann eigentlich wenn der Anwender die Sprache ändert? Dann müsste doch eigentlich die neue Sprachdatei eingefügt werden, oder?

    Wenn du das so implementierst, ja. Von Geisterhand jedenfalls nicht ;)

    Viele Grüße
    Patrick

    --
    "Though this be madness, yet there's method in't."
    sh:( fo:| ch:? rl:( br:^ n4:( ie:{ mo:) va:} de:> zu:) fl:| js:( ss:| ls:[
    1. Hallo Patrick,

      Nein. Die Datei wird zur Laufzeit nur einmal eingebunden. Wenn deine Seite im Browser vollständig geladen ist, ist auch die Laufzeit von PHP beendet. Wenn du dann "auf eine neue Seite gehst" interessiert PHP nicht, was davor war. Um genau zu sein weiss PHP das gar nicht mehr. Der Parser fängt wieder bei null an.

      OK, habe ich verstanden. Dann bezieht sich das ganze also nur auf diese eine Datei. Benötige ich dann include_once nur, wenn in einer php-Datei mehrere includes vorhanden sind und ich vermeiden will, dass die über inclue_once includierte Datei zwei mal in dieser einen php-Datei includiert wird?

      Was passiert dann eigentlich wenn der Anwender die Sprache ändert? Dann müsste doch eigentlich die neue Sprachdatei eingefügt werden, oder?

      Wenn du das so implementierst, ja. Von Geisterhand jedenfalls nicht

      Also müsste ich dann bei der erstmaligen Auswahl der Sprache diese in die Session schreiben, in jeder php-Datei prüfen ob der User inzwischen eine neue Sprache ausgewählt hat,
        - wenn ja muss ich den Session Wert für die Sprache aktualisieren und die neue Sprachdatei includieren,
        - wenn nein hole ich die Sprache aus der Session und includiere die zugehörige Sprachdatei .

      Ist das richtig?
      Sorry, das sind wahrscheinlich Anfängerfragen, aber ich bin auf dem Gebiet auch noch Anfänger.

      Noch ne Frage nebenbei:
      Wie findest Du den Vorschlag von Jeena Paradies bezüglich den Sprachdateien?

      Hier ihr Beispiel:
      -------------------
      <?php
      // Datei mit dem Namen language.de.php
      $language = array(
       'hello_world' => 'Hallo Welt',
       'its_me'      => 'Ich bin es!',
      );
      ?>
      -------------------
      <?php
      // Datei mit dem Namen language.en.php
      $language = array(
       'hello_world' => 'Hello World',
       'its_me'      => "It's me!",
      );
      ?>

      Was ist performanter? Die Textbausteine in einem Array zu halten oder für jeden Textbaustein eine eigene Variable deklarieren?
      Ich als Laie finde den Vorschlag von Jeena eigentlich ganz gut.

      Liebe Grüße
      Andrea

      1. Hallo,

        OK, habe ich verstanden.

        Ich glaube, nicht ganz *g*

        Dann bezieht sich das ganze also nur auf diese eine Datei.

        Nicht zwingend auf _eine_ Datei, sondern alle, die zur Ausführung eingebunden werden.
        Du hast beispielsweise eine 'index.php' die der User über den Browser anfordert. In dieser Datei bindest du einige weitere Dateien über include/require(_once), beispielsweise Klassendefinitionen, besagte Arrays oder weiss der Henker ;) Möglicherweise binden diese Dateien weitere ein, und so weiter und so fort.
        Angenommen, du includest in jeder dieser Dateien per include_once ein und dieselbe Datei, so wird diese insgesamt trotzdem nur einmal eingebudnen, nämlich beim ersten include_once.

        Benötige ich dann include_once nur, wenn in einer php-Datei mehrere includes vorhanden sind und ich vermeiden will, dass die über inclue_once includierte Datei zwei mal in dieser einen php-Datei includiert wird?

        Exakt. Wobei du bei der Entwicklung dennoch darauf achten solltest, dass nicht mehrere includes derselben Datei vorhanden sind. Es mag bestimmte Situationen geben, wo sich dies nicht vermeiden lässt, in der Regel jedoch schon.

        Also müsste ich dann bei der erstmaligen Auswahl der Sprache diese in die Session schreiben, in jeder php-Datei prüfen ob der User inzwischen eine neue Sprache ausgewählt hat [...]

        Wie du die Sprachinformation mitführst ist an dieser Stelle irrelevant. Das kann über eine Session-Variable geschehen, oder du übergibst die Information über die URL, ...

        Entscheidend ist zunächst nur, was du mit der Sprachinformation anfängst. Dies könnte beispielsweise durch einen switch zu Beginn des Skriptes realisiert werden.

        Sorry, das sind wahrscheinlich Anfängerfragen, aber ich bin auf dem Gebiet auch noch Anfänger.

        Das Forum ist dazu da, Fragen zu stellen ;)

        Wie findest Du den Vorschlag von Jeena Paradies bezüglich den Sprachdateien?

        Es ist eine Möglichkeit, welche du verwendest hängt von verschiedenen Faktoren ab.

        Was ist performanter? Die Textbausteine in einem Array zu halten oder für jeden Textbaustein eine eigene Variable deklarieren?

        Eigene Variablen pro Baustein wäre unsinnig. Was aber durchaus sinnvoll ist, wäre pro Baustein nicht eine Variable, sondern eine Konstante zu definieren, was aber wiederum nur für Textbausteine greift, die nicht zur Laufzeit geändert bzw. ergänzt werden (z.B. durch Datenbankinhalte).
        Ebenfalls ist es möglich, die Bausteine in einer Datenbank zu speichern, was bei größeren Projekten mögliche Wartungsarbeiten vereinfacht. Bei kleineren Projekten wäre eine Datenbanklösung allerdings ein "overkill", im Endeffekt arbeitest du in dem Fall ohnehin wieder mit Arrays.

        In deinem Fall bist du mit Arrays (oder Konstanten, je nach Veränderbarkeit der Informationen) IMHO am besten beraten.

        Viele Grüße
        Patrick

        --
        "Though this be madness, yet there's method in't."
        sh:( fo:| ch:? rl:( br:^ n4:( ie:{ mo:) va:} de:> zu:) fl:| js:( ss:| ls:[
        1. Hallo Patrick,

          jetz habe ich es verstanden. Danke.

          Mal angenommen ich möchte eine DB-Lösung einsetzen, wie würde ich die Tabelle gestalten?

          Was hälst Du davon:

          • für jede Sprache eine Tabelle (z.B. lang_de, lang_en)
          • in jeder Tabelle hätte ich dann zwei Spalten und zwar in der ersten Spalte den Key (z.B. hello_world) und in der zweiten Spalte den Value (z.B. Hallo Welt)
          • auf der Seite muss ich nun herausfinden welche Sprach der User mag, dann greife ich auf die zugehörige Tabelle zu und hol mir alle Textbausteine für diese Sprache (selbst wenn ich nur zwei davon auf dieser Seite benötige)

          Ist das richtig?
          Könntest Du mir vielleicht mit ein wenig Code auf die Sprünge helfen wie ich dann z.B. Hallo Welt ausgeben würde?

          Vielen Dank für Deine Mühe
          Liebe Grüße
          Andrea

          1. Hallo,

            Was hälst Du davon:
            [...]

            Da würde eine Tabelle reichen. Spalten dann z.B.:
            +----+------------+-------------+--------------+----
            | id | var        | de          | en           | fr
            -----+------------+-------------+--------------+----
            |  1 | helloWorld | Hallo Welt! | Hello World! | ...
            |  2 | ...

            Könntest Du mir vielleicht mit ein wenig Code auf die Sprünge helfen

            // Sprache festlegen, jetzt beispielsweise über URL
            define('LANG', $_GET['lang']);

            // Verbindung zur Datenbank aufbauen
            // ...

            // Datensätze für Sprache holen
            $query  = '
                SELECT
                    var,
                    '.LANG.'
                FROM
                    table
            ';
            $result = mysql_query($query);
            while ($row = mysql_fetch_assoc($result)) {
                $lang[$row['var']] = $row[LANG];
            }

            echo '<html>'."\n";
            // echo ...
            echo '<h1>'.$lang['hello_world'].'</h1>'."\n";
            // ...

            Viele Grüße
            Patrick

            --
            "Though this be madness, yet there's method in't."
            sh:( fo:| ch:? rl:( br:^ n4:( ie:{ mo:) va:} de:> zu:) fl:| js:( ss:| ls:[
            1. Hallo,

              Da würde eine Tabelle reichen. Spalten dann z.B.:
              +----+------------+-------------+--------------+----
              | id | var        | de          | en           | fr
              -----+------------+-------------+--------------+----
              |  1 | helloWorld | Hallo Welt! | Hello World! | ...
              |  2 | ...

              Dieses Design gefällt mir noch besser. Wie viele Zeichen könnte ich maximal denn in eine Tabellenzelle eintragen? Ich denke da an einen Text der etwas länger ist.

              Weiter oben hast Du die Möglichkeit erwähnt das ganze über Pfade zu lösen. Z.B. www.xyz.de/EN/start.php

              Kannst Du auf diese Lösung ein wenig mehr eingehen? Wie würde das dann funktionieren? Müsste ich dann auch entsprechende Ordner anlegen?

              Liebe Grüße
              Andrea

              1. echo $begrüßung;

                Dieses Design gefällt mir noch besser. Wie viele Zeichen könnte ich maximal denn in eine Tabellenzelle eintragen? Ich denke da an einen Text der etwas länger ist.

                Das kommt auf den verwendeten Spaltentyp an. MySQL bietet von 1 bis 2hoch32 Zeichen genug Platz.

                Die Datenbanklösung ist jedoch, wie schon empfohlen, nur bei sehr großen Projekten sinnvoll. Du must bedenken, dass ein Datenbankzugriff im Allgemeinen "teurer" als das Parsen einer Datei ist. Einzelne Datenbankzugriffe sind dabei noch teurer als alles in einem Rutsch abzufragen.[1]
                Einen Vorteil in der Datenbank-Lösung sehe ich nur, wenn gleichzeitig von mehreren Personen an einer Sprachdatei gearbeitet werden soll oder diese Änderungen sehr oft von Personen gemacht werden sollen, denen man eine Oberfläche dazu anbieten muss. In dem Fall würde ich vorschlagen, nach getaner Arbeit aus den Datenbankeinträgen eine statische Datei zu erzeugen, die vom Projekt eingelesen werden kann.

                Weiter oben hast Du die Möglichkeit erwähnt das ganze über Pfade zu lösen. Z.B. www.xyz.de/EN/start.php

                Kannst Du auf diese Lösung ein wenig mehr eingehen? Wie würde das dann funktionieren? Müsste ich dann auch entsprechende Ordner anlegen?

                Man kann URLs (wenn der Server ein Apache ist) mit mod_rewrite modifizieren. www.example.org/EN/start.php [2] würde man damit beispielsweise umschreiben lassen zu www.example.org/start.php?lang=EN. Das umschreiben passiert intern. Die URL-Zeile beim Anwender bleibt unverändert.
                mod_rewrite ist ein nicht ganz einfaches Thema, weswegen ich hier nicht näher darauf eingehe.

                Eine weitere Möglichkeit wäre PathInfo. Bei www.example.org/start.php/EN würde das Script start.php aufgerufen werden, das /EN findet man unter $_SERVER['PATH_INFO'].

                echo "$verabschiedung $name";

                [1] Dies ist vermutlich von der Anzahl der Abfragen bei Einzelabfrage bzw. der Anzahl der Ergebnisse bei AllesInEinem abhängig. Es wird einen Punkt geben, bis zu dem die eine Lösung schneller ist als die andere und sich das Verhältnis dann umdreht.
                [2] Bitte für beispielhafte Domainnamen die dafür vorgesehenen example.com/net/org verwenden, damit es zu keinen Konflikten mit real existierenden Domainnamen kommt.

                1. Hallo,

                  Eine weitere Möglichkeit wäre PathInfo. Bei www.example.org/start.php/EN würde das Script start.php aufgerufen werden, das /EN findet man unter $_SERVER['PATH_INFO'].

                  das ist die Möglichkeit, die ich im Auge hatte. Man kann sie "optisch" noch etwas verfeinern, wenn man
                  a) alle direkt adressierten PHP-Dateien im DocRoot ablegt
                  b) sie ohne die Extension .php speichert und
                  c) den Apachen mit entsprechenden Angaben in der .htaccess dazu bringt, diese Dateien trotzdem druch den PHP-Parser zu blasen, auch wenn sie keine .php Extension haben.

                  Du hast dann URLs, die z.B. so aussehen:
                   http://example.org/start/DE
                   http://example.org/start/EN
                   http://example.org/impressum/DE
                   http://example.org/angebote/DE
                  Dabei sind /start, /impressum und /angebote jeweils die Namen der PHP-Scripte. Sollte $_SERVER['PATH_INFO'] leer oder ungültig sein, kann man einfach auf die Defaultsprache zurückgreifen. Jedenfalls bin ich im Begriff, die Internet-Präsenz eines Bekannten nach diesem Muster umzustricken.

                  Theoretisch kann man das Namensschema natürlich auch umdrehen, so dass man dann z.B. http://example.org/DE/start hat. Dann bräuchte man nur für jede Sprache ein Script, das dann anhand von $_SERVER['PATH_INFO'] die jeweilige Seite generiert. Muss man im Einzelfall abwägen, was günstiger ist; hier wäre zumindest der Vorteil, dass man innerhalb des Projekts sprachneutrale relative Links verwenden kann und damit automatisch immer in der gewählten Sprachumgebung bleibt.

                  [2] Bitte für beispielhafte Domainnamen die dafür vorgesehenen example.com/net/org verwenden, damit es zu keinen Konflikten mit real existierenden Domainnamen kommt.

                  Sehr guter Hinweis. Leider werden hier immer wieder Phantasiedomains verwendet, bei denen die Chance groß ist, dass sie wirklich existieren und genutzt werden.

                  Schönen Tag noch,

                  Martin

                  --
                  You say, it cannot be love if it isn't for ever.
                  But let me tell you: Sometimes, a single scene can be more to remember than the whole play.
                  1. Hallo Martin.

                    c) den Apachen mit entsprechenden Angaben in der .htaccess dazu bringt, diese Dateien trotzdem druch den PHP-Parser zu blasen, auch wenn sie keine .php Extension haben.

                    Und wie?

                    Mit AddHandler bzw. AddType ja wohl kaum.

                    Einen schönen Mittwoch noch.

                    Gruß, Ashura

                    --
                    Last Tears Keep Calling
                    See Angels Falling
                    Black Shadows In Your Head
                    And One Eye For The Dead
                    1. Hallo Ashura,

                      c) den Apachen mit entsprechenden Angaben in der .htaccess dazu bringt, diese Dateien trotzdem druch den PHP-Parser zu blasen, auch wenn sie keine .php Extension haben.

                      Und wie?
                      Mit AddHandler bzw. AddType ja wohl kaum.

                      Warum nicht? In einem <Files>-Container?
                      Ich hab's noch nicht bis ins Detail ausklamüsert, bn aber überzeugt, dass man das hinkriegen sollte.

                      So long,

                      Martin

                      --
                      Ungeschehene Ereignisse können einen katastrophalen Mangel an Folgen nach sich ziehen.
                        (Unbekannter Politiker)
                      1. Hallo Martin.

                        Warum nicht? In einem <Files>-Container?

                        Du willst jede einzelne Datei dort notieren? (Eine Dateieendung steht ja zur Erkennung nicht zur Verfügung.)

                        Ich hab's noch nicht bis ins Detail ausklamüsert, bn aber überzeugt, dass man das hinkriegen sollte.

                        Mit viel Geduld (oder einem geeigneten Script) sicher.

                        Einen schönen Mittwoch noch.

                        Gruß, Ashura

                        --
                        Last Tears Keep Calling
                        See Angels Falling
                        Black Shadows In Your Head
                        And One Eye For The Dead
                        1. Hi Ashura,

                          Warum nicht? In einem <Files>-Container?

                          Du willst jede einzelne Datei dort notieren? (Eine Dateieendung steht ja zur Erkennung nicht zur Verfügung.)

                          Ja klar. Es sind ja überschaubar wenige: Für meinen zweiten skizzierten Ansatz genau eine für jede Sprache, die ich anbieten will. Im ersten Ansatz also zwei (DE und EN), später möchte ich evtl. NL ergänzen, vielleicht auch noch FR. Das sind also maximal vier Dateien, die ich da nennen muss - das ist doch wohl vertretbar, oder nicht?

                          Mit viel Geduld (oder einem geeigneten Script) sicher.

                          Die Geduld ist -so wie ich es im Augenblick sehe- mit dem Hinschreiben von
                           <Files ~ "(DE|EN|NL|FR)">
                            ...
                           </Files>
                          schon ausgereizt. Wobei ich mir mit dem RegEx absolut unsicher bin (davon hab ich noch nicht viel Ahnung), das hab ich jetzt nur aus der Apache-Doku sinngemäß abgeschrieben.

                          Verschneite Grüße,

                          Martin

                          --
                          Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
                          Heißes Wasser kann man immer gebrauchen.
                          1. Hallo Martin.

                            Das sind also maximal vier Dateien, die ich da nennen muss - das ist doch wohl vertretbar, oder nicht?

                            Und was ist mit:

                            Dabei sind /start, /impressum und /angebote jeweils die Namen der PHP-Scripte.

                            Wenn dies bereits PHP-Scripte ohne Dateierweiterung sind, welche manuell dem PHP-Parser untergeschoben werden müssen, können doch stets noch weitere hinzu kommen.

                            Die Geduld ist -so wie ich es im Augenblick sehe- mit dem Hinschreiben von
                            <Files ~ "(DE|EN|NL|FR)">
                              ...
                            </Files>
                            schon ausgereizt.

                            Im Grunde genügt auch:

                            <Files DE EN NL FR …>  
                            # Angaben  
                            </Files>
                            

                            (Mehrere Dateien wurden doch leezeichensepariert angegeben, oder?)

                            Wobei ich mir mit dem RegEx absolut unsicher bin (davon hab ich noch nicht viel Ahnung), …

                            Wie? Von regulären Ausdrücken?

                            Einen schönen Mittwoch noch.

                            Gruß, Ashura

                            --
                            Last Tears Keep Calling
                            See Angels Falling
                            Black Shadows In Your Head
                            And One Eye For The Dead
                            1. Hallo,

                              Das sind also maximal vier Dateien, die ich da nennen muss - das ist doch wohl vertretbar, oder nicht?

                              Und was ist mit:

                              Dabei sind /start, /impressum und /angebote jeweils die Namen der PHP-Scripte.

                              Das war mein erstes Beispiel. Das bräuchte ein paar Dateien mehr, richtig. Konzentriere dich auf das zweite Szenario, das ich beschrieben habe mit dem URL-Schema http://example.org/DE/seitenname.

                              Im Grunde genügt auch:

                              <Files DE EN NL FR …>

                              Angaben

                              </Files>

                              
                              > (Mehrere Dateien wurden doch leezeichensepariert angegeben, oder?)  
                                
                              Das habe ich eben versucht herauszufinden. Die Apache-Doku ist da etwas geizig mit Informationen; aus der Formulierung  
                                
                               | Das Argument Dateiname kann einen Dateinamen oder eine  
                               | Zeichenkette mit Platzhaltern enthalten  
                                
                              habe ich geschlossen, "einen" heißt hier wohl "nur einen".  
                                
                              
                              > > Wobei ich mir mit dem RegEx absolut unsicher bin (davon hab ich noch nicht viel Ahnung), …  
                              > Wie? Von regulären Ausdrücken?  
                                
                              Genau. Die sind für mich noch ein Buch mit sieben Siegeln.  
                              Ciao,  
                                
                               Martin
                              
                              -- 
                              Was sagt der große Keks zum kleinen Keks?  
                              Du kannst dich jetzt verkrümeln.  
                                
                              
                              
                              1. Hallo Martin.

                                Konzentriere dich auf das zweite Szenario, das ich beschrieben habe mit dem URL-Schema http://example.org/DE/seitenname.

                                In Ordnung. Da sind es natürlich nicht allzu viele Dateien, da hast du Recht.

                                Im Grunde genügt auch:

                                <Files DE EN NL FR …>

                                Angaben

                                </Files>

                                
                                > > (Mehrere Dateien wurden doch leezeichensepariert angegeben, oder?)  
                                >   
                                > Das habe ich eben versucht herauszufinden. Die Apache-Doku ist da etwas geizig mit Informationen; aus der Formulierung  
                                >   
                                >  | Das Argument Dateiname kann einen Dateinamen oder eine  
                                >  | Zeichenkette mit Platzhaltern enthalten  
                                >   
                                > habe ich geschlossen, "einen" heißt hier wohl "nur einen".  
                                  
                                Das stimmt offenbar. Ein Versuch bringt mir lediglich ein „Multiple <Files> arguments not (yet) supported.“  
                                  
                                
                                > > Wie? Von regulären Ausdrücken?  
                                >   
                                > Genau. Die sind für mich noch ein Buch mit sieben Siegeln.  
                                  
                                Ich gebe zu, dass ich nun etwas erstaunt bin. Ich bin davon ausgegangen, dass du mit diesen problemlos umgehen kannst, da du ja schon recht lange „im Gewerbe“ bist.  
                                  
                                  
                                Einen schönen Mittwoch noch.  
                                  
                                Gruß, Ashura  
                                
                                -- 
                                Last Tears Keep Calling  
                                See Angels Falling  
                                Black Shadows In Your Head  
                                And One Eye For The Dead
                                
                                1. Hallo,

                                  Wie? Von regulären Ausdrücken?
                                  Genau. Die sind für mich noch ein Buch mit sieben Siegeln.

                                  Ich gebe zu, dass ich nun etwas erstaunt bin.

                                  Gell do guggsch?  :-)

                                  Ich bin davon ausgegangen, dass du mit diesen problemlos umgehen kannst, da du ja schon recht lange „im Gewerbe“ bist.

                                  Ja, stimmt ja auch eigentlich. Aber es gibt ein paar Themen, um die ich bisher noch einen Bogen gemacht habe, weil sie mir kompliziert vorkommen - gemessen daran, dass ich noch keinen Anwendungsfall hatte, wo ich diese Sachen hätte gebrauchen können. Regular Expressions sind ein Beispiel, Datenbanksysteme ein anderes. Das sind Themengebiete, auf denen ich völlig blank bin und auch keinen Anreiz sehe, mich da reinzufuchsen.

                                  Schönen Abend noch,

                                  Martin

                                  --
                                  Wenn der Computer wirklich alles kann,
                                  dann kann er mich mal kreuzweise.
                                  1. Hallo Martin.

                                    […] gemessen daran, dass ich noch keinen Anwendungsfall hatte, wo ich diese Sachen hätte gebrauchen können.

                                    Aha. Du denkst ebenso anwendungsbezogen wie ich.
                                    Ich kann mich erst dann wirklich in ein Thema vertiefen und es begreifen, wenn ich es wirklich brauche. Das war mit HTML, CSS und JavaScript ebenso wie bei PHP.

                                    Regular Expressions sind ein Beispiel, Datenbanksysteme ein anderes. Das sind Themengebiete, auf denen ich völlig blank bin und auch keinen Anreiz sehe, mich da reinzufuchsen.

                                    Mit regulären Ausdrücken solltest du dich meiner Meinung nach befassen.
                                    Sie sind ein überaus nützliches Werkzeug, wenn man sie versteht.
                                    Linktipp hierzu: PCRE Evaluator. Eine der nützlichsten Sites, die ich je im WWW entdeckt habe.

                                    Um DBMS habe aber auch ich bisher einen Bogen gemacht; Daten halte ich lieber XML-basiert.

                                    Einen schönen Mittwoch noch.

                                    Gruß, Ashura

                                    --
                                    Last Tears Keep Calling
                                    See Angels Falling
                                    Black Shadows In Your Head
                                    And One Eye For The Dead
                                    1. Hallo, lieber Bruder im Geiste, :-)

                                      Aha. Du denkst ebenso anwendungsbezogen wie ich.

                                      (O) ja, uneingeschränkt
                                       ( ) ja, meistens schon
                                       ( ) mehr oder weniger
                                       ( ) eher nicht
                                       ( ) auf keinen Fall

                                      Ich kann mich erst dann wirklich in ein Thema vertiefen und es begreifen, wenn ich es wirklich brauche.

                                      So isses. In der Schule habe ich deswegen oft im Lehrbuch mal ein paar Kapitel vorausgeblättert, bis irgendwo etwas auftauchte, bei dem man das gerade aktuelle Thema wieder gebrauchen konnte. Dann hatte ich ein Ziel, und es fiel mir leichter, den aktuellen Stoff zu lernen.

                                      Mit regulären Ausdrücken solltest du dich meiner Meinung nach befassen.

                                      Den Eindruck hatte ich schon das eine oder andere Mal; aber ich hab es bisher nicht geschafft, über meinen Schatten zu springen (ich bin ja auch nicht Lucky Luke).

                                      Linktipp hierzu: PCRE Evaluator. Eine der nützlichsten Sites, die ich je im WWW entdeckt habe.

                                      Danke für den Tipp; das werde ich mir wohl doch mal reinziehen.

                                      Um DBMS habe aber auch ich bisher einen Bogen gemacht; Daten halte ich lieber XML-basiert.

                                      Bingo. Für die relativ kleinen Datenmengen, die bei mir bisher anfielen (und dazu oft noch irgendwie hierarchisch-logisch strukturiert) war XML immer sehr gut geeignet. Wenn's mal wirklich was Großes wird, ist es immer noch früh genug, sich mit DBMS zu befassen.
                                      Schließlich mach ich den ganzen Krempel ja nicht, um damit mein Geld zu verdienen (obwohl, wer weiß ...), sondern als Hobby.

                                      Einen schönen Mittwoch noch.

                                      ... oder was davon noch übrig ist. ;-)

                                      Martin

                                      --
                                      Die letzten Worte des Architekten:
                                      Mir fällt da gerade was ein...
                                      1. Hallo Bruder Martin.

                                        Hallo, lieber Bruder im Geiste, :-)

                                        Hehe.

                                        In der Schule habe ich deswegen oft im Lehrbuch mal ein paar Kapitel vorausgeblättert, bis irgendwo etwas auftauchte, bei dem man das gerade aktuelle Thema wieder gebrauchen konnte. Dann hatte ich ein Ziel, und es fiel mir leichter, den aktuellen Stoff zu lernen.

                                        Hm, sollte ich vielleicht auch einmal ausprobieren.
                                        Obwohl … Wir haben ja gar kein Lehrbuch.

                                        Naja, der Großteil von dem, was uns momentan vermittelt wird, ist mir bereits bekannt; vielleicht ödet es mich deshalb an, wer weiß.

                                        Den Eindruck hatte ich schon das eine oder andere Mal; aber ich hab es bisher nicht geschafft, über meinen Schatten zu springen (ich bin ja auch nicht Lucky Luke).

                                        Ich tue mich damit auch immer sehr schwer.

                                        Einen schönen Mittwoch noch.
                                        ... oder was davon noch übrig ist. ;-)

                                        Meinetwegen.
                                        Ich habe mich heute erst einmal erholt, nachdem ich gestern einer Freundin beim Umzug geholfen habe. Ich war 12 Stunden mit Möbelschleppen und Aufbauen beschäftigt. Die Wohnung ist riesig (sie wohnt dort zwar mit zwei Kindern, aber dennoch) und liegt im 4 Stockwerk. Mir taten und tun die Knochen weh, aber was soll's.

                                        Einen schönen Mittwoch noch.

                                        Gruß, Ashura

                                        --
                                        Last Tears Keep Calling
                                        See Angels Falling
                                        Black Shadows In Your Head
                                        And One Eye For The Dead
                                    2. Hi,

                                      ich nochmal... :-)

                                      Linktipp hierzu: PCRE Evaluator. Eine der nützlichsten Sites, die ich je im WWW entdeckt habe.

                                      Ich hab mir die Seite mal im Schrägflug durchgesehen, vor allen den informativen Teil, die PCRE-Referenz. Du hast Recht, der Informationsgehalt ist hervorragend; vom Usability-Standpunkt lässt die Seite aber stark zu wünschen übrig:
                                       Lauter kleine Informationshäppchen auf einzelnen Seiten, nichts Zusammenhängendes
                                       Schlecht lesbare Krüme^WSerifenschrift, die Umstellung auf Sans-Serif funktioniert nicht (erfordert JS)
                                       nutzlose Session-ID wird kilometerweit in der URL mitgeschleppt
                                      Alles in allem würde ich sagen, als Nachschlagewerk für jemanden, der genau weiß, was er sucht, ist es okay. Für den Neueinsteiger ins Thema eher nicht.

                                      Schönen Abend noch,

                                      Martin

                                      --
                                      why the heck do you jerk think, that wir ein doppelposting nicht bemerken, wenn you zwischendurch the sprache wechselst?
                                        (wahsaga, http://forum.de.selfhtml.org/?t=110904&m=697006, nicht archiviert)
                                      1. Hallo Martin.

                                        Lauter kleine Informationshäppchen auf einzelnen Seiten, nichts Zusammenhängendes

                                        Ja, könnte stimmen. Für ausführlichere Tutorials sollte man entweder SELFHTML oder die Doku einer beliebigen Sprache lesen, die reguläre Ausdrücke implementiert hat.

                                        Schlecht lesbare Krüme^WSerifenschrift, die Umstellung auf Sans-Serif funktioniert nicht (erfordert JS)

                                        Also mit Anti-Aliasing … Jaja, ich höre ja schon auf.

                                        nutzlose Session-ID wird kilometerweit in der URL mitgeschleppt

                                        Ja, ist nervig. Diese Session-ID entferne ich daher auch immer bei Links.

                                        Alles in allem würde ich sagen, als Nachschlagewerk für jemanden, der genau weiß, was er sucht, ist es okay. Für den Neueinsteiger ins Thema eher nicht.

                                        Ja, mag sein. Wenn man einmal in diesem Themenbereich fortgeschritten ist, wird man die Site (und insbesondere den Evaluator) zu schätzen wissen.

                                        Einen schönen Mittwoch noch.

                                        Gruß, Ashura

                                        --
                                        Last Tears Keep Calling
                                        See Angels Falling
                                        Black Shadows In Your Head
                                        And One Eye For The Dead
                                        1. Hi,

                                          Schlecht lesbare Krüme^WSerifenschrift, die Umstellung auf Sans-Serif funktioniert nicht (erfordert JS)
                                          Also mit Anti-Aliasing … Jaja, ich höre ja schon auf.

                                          *g* das Thema hatten wir ja schon das eine oder andere Mal.

                                          nutzlose Session-ID wird kilometerweit in der URL mitgeschleppt
                                          Ja, ist nervig. Diese Session-ID entferne ich daher auch immer bei Links.

                                          Ach, du auch? ;-)

                                          Ja, mag sein. Wenn man einmal in diesem Themenbereich fortgeschritten ist, wird man die Site (und insbesondere den Evaluator) zu schätzen wissen.

                                          Den habe ich noch nicht probiert, aber schon die Idee finde ich klasse.

                                          Ciao,

                                          Martin

                                          --
                                          Lieber eine Fliege im Porzellanladen
                                          als ein Elefant in der Suppe.
              2. Hallo,

                Wie viele Zeichen könnte ich maximal denn in eine Tabellenzelle eintragen? Ich denke da an einen Text der etwas länger ist.

                s. MySQL Column Types

                Da wäre es auch ratsam, mehrere Tabellen, je nach Länge des Inhalts anzulegen, um nicht unnötig Ressourcen zu verschwenden.

                Kannst Du auf diese Lösung ein wenig mehr eingehen? Wie würde das dann funktionieren? Müsste ich dann auch entsprechende Ordner anlegen?

                Nein, das würde serverseitig (im Falle eines Apache Servers) mittels mod_rewrite für den User "unsichtbar" umgewandelt. Für dein Script würde dann effektiv aus
                http://www.example.org/de/seite.php
                z.B.
                http://www.example.org/seite.php?lang=de

                Ich möchte dir jedoch davon abraten, eine Datenbank oder mod_rewrite zu verwenden. Es wäre ratsam, zunächst mit einfachen Mitteln (=> Array anstatt DB, URL-Parameter anstatt mod_rewrite) an Erfahrung zu gewinnen.

                Es ist eine gute Sache, wie engagiert und wissbegierig du an die Sache rangehst. Aber pass' auf, dass du dir nicht zuviel auf einmal aufbürdest!

                Viele Grüße
                Patrick

                --
                "Though this be madness, yet there's method in't."
                sh:( fo:| ch:? rl:( br:^ n4:( ie:{ mo:) va:} de:> zu:) fl:| js:( ss:| ls:[
                1. Hallo zusammen,

                  Es ist eine gute Sache, wie engagiert und wissbegierig du an die Sache rangehst. Aber pass' auf, dass du dir nicht zuviel auf einmal aufbürdest!

                  Du hast Recht. Wenn man mal Blut geleckt hat...
                  Das Projekt ist eigentlich nicht sooo groß, daher werde ich dann wohl doch die Array Lösung nehmen. Falls das ganze mal erweitert werden soll weiß ich nun zumindest wo ich nach einer Lösung suchen werde.

                  Ich möchte mich auch nochmal herzlich bei allen Helfern hier bedanken. Ist ein gutes Forum. Hab heute was dazu lernen können.

                  Liebe Grüße
                  Andrea

      2. Hallo Andrea,

        Also müsste ich dann bei der erstmaligen Auswahl der Sprache diese in die Session schreiben, in jeder php-Datei prüfen ob der User inzwischen eine neue Sprache ausgewählt hat,

        Wenn du das mit Sessions realisieren willst, okay.
        Ich fände es jedoch einfacher, die Sprachauswahl in die URL mit einzuflechten. Entweder als URL-Parameter (http://example.org/seite.php?lang=DE, weniger schön) oder als Pseudo-Verzeichnis (http://example.org/seite.php/DE, sieht eleganter aus).

        Noch ne Frage nebenbei:
        Wie findest Du den Vorschlag von Jeena Paradies bezüglich den Sprachdateien?

        Ich habe vor ein paar Wochen ähnliche Überlegungen angestellt und hatte auch schon einen sehr ähnlichen Ansatz, nämlich ein Array mit Textbausteinen. Ich bin bloß nicht auf die elegante Idee gekommen, das als assoziatives Array anzusetzen.

        Hier ihr Beispiel:

        _Sein_ Beispiel. Nee wirklich, is' so. ;-)
        "Jeena Paradies" ist wohl in gewissem Sinn sein Künstlername.

        Was ist performanter? Die Textbausteine in einem Array zu halten oder für jeden Textbaustein eine eigene Variable deklarieren?
        Ich als Laie finde den Vorschlag von Jeena eigentlich ganz gut.

        Also als Array? Ja, ich auch.
        Alles als einzelne Variablen zu halten gefällt mir dagegen nicht so, aber ich finde im Moment kein wirkliches Argument.

        Schönen Tag noch,

        Martin

        --
        Wer morgens zerknittert aufsteht, hat den ganzen Tag Gelegenheit, sich zu entfalten.
        1. Hallo,

          Ich fände es jedoch einfacher, die Sprachauswahl in die URL mit einzuflechten. [...]

          Noch schöner wäre natürlich
          http://www.example.org/de/seite
          und das dann mit mod_rewrite auseinandernehmen.
          Oder über eine Subdomain:
          http://de.example.org/seite

          Viele Grüße
          Patrick

          --
          "Though this be madness, yet there's method in't."
          sh:( fo:| ch:? rl:( br:^ n4:( ie:{ mo:) va:} de:> zu:) fl:| js:( ss:| ls:[
          1. Hallo,

            Ich fände es jedoch einfacher, die Sprachauswahl in die URL mit einzuflechten. [...]

            Noch schöner wäre natürlich
            http://www.example.org/de/seite
            und das dann mit mod_rewrite auseinandernehmen.
            Oder über eine Subdomain:
            http://de.example.org/seite

            Den Ansatz finde ich auch gut. Aber dann bräuchte ich doch für jede Sprache einen Satz php-Dateien, die in dem entsprechenden Verzeichnis liegen oder?

            Liebe Grüße
            Andrea

      3. echo $begrüßung;

        Dann bezieht sich das ganze also nur auf diese eine Datei.

        Das "once" bezieht sich auf die Date, die hinter dem include_once angegeben ist.

        Benötige ich dann include_once nur, wenn in einer php-Datei mehrere includes vorhanden sind und ich vermeiden will, dass die über inclue_once includierte Datei zwei mal in dieser einen php-Datei includiert wird?

        Immer dann, wenn du nicht ausdrücklich willst, dass der Inhalt einer Datei zweimal eingebunden wird solltest du include_once nehmen. Besonders dann ist es zu empfahlen, wenn die Projekte größer und unübersichtlicher werden und man Funktionalität auslagert, damit man sie an mehreren Stellen verwenden kann.

        Beispiel:
        Gegeben seien

        • die Scripte x.php und y.php, zwei Dateien, die aufrufbare Seiten darstellen.
        • eine Datei common.php, die allgemeinen "Kram" enthält, beispielsweise eine Funktion namens foo()
        • eine Datei db.php, in der Datenbankzugriffsfunktionalität enthalten ist. Dazu wird u.a. foo() benötigt .

        x.php benötigt foo() und die Datenbanksachen:
          include 'common.php';
          include 'db.php';

        y.php benötigt nur die Datenbanksachen:
          include 'db.php';

        Beim Aufruf von y.php steht db.php dumm da, weil es foo() vermisst. Wenn man nun include 'common.php'; zu db.php hinzufügt, beschwert sich x.php, weil foo() zweimal deklariert werden soll.

        Mit include_once passiert das nicht. x.php lädt common.php und db.php. Beim Parsen von db.php trifft es wieder auf common.php, erkennt dies und ignoriert diesen zweiten Aufruf.

        Man könnte nun auf die Idee kommen, alle include-Aufrufe in die Hauptdateien zu verlagern, also den common.php-Aufruf auch in y.php einzutragen. Das hat aber mehrere Nachteile. Ein Außenstehender sieht den Grund nicht, da keinerlei Funktionalität von common.php in y.php verwendet wird. Wenn man db.php später mal um strings.php erweitern will, muss man x.php und y.php und vermutlich auch noch a.php bis z.php durchgehen und überall strings.php nachtragen, statt einmal include_once in db.php einzutragen.

        Also müsste ich dann bei der erstmaligen Auswahl der Sprache diese in die Session schreiben, in jeder php-Datei prüfen ob der User inzwischen eine neue Sprache ausgewählt hat,
          - wenn ja muss ich den Session Wert für die Sprache aktualisieren und die neue Sprachdatei includieren,
          - wenn nein hole ich die Sprache aus der Session und includiere die zugehörige Sprachdatei .

        Ist das richtig?

        Man kann auch zuerst die Sprachauswahl prüfen, in der Session ablegen oder von dort holen und das Includen der Sprachdatei erst in einem zweiten Schritt durchführen. Damit hast du nur noch eine Include-Anweisung anstatt mehrerer verteilter. Den Dateinamen kann man mittels Stringfunktionen zusammensetzen:
        $languageFile = 'language_' . $lang . '.php';
        if (file_exists($languageFile))
          include_once $languageFile;
        else
          // Rumnörgeln wegen Fehler

        Sorry, das sind wahrscheinlich Anfängerfragen, aber ich bin auf dem Gebiet auch noch Anfänger.

        Noch ne Frage nebenbei:
        Wie findest Du den Vorschlag von Jeena Paradies bezüglich den Sprachdateien?

        Wenn er schlecht gewesen wäre hätte ihn sicher schon jemand kritisiert. :-)

        Was ist performanter? Die Textbausteine in einem Array zu halten oder für jeden Textbaustein eine eigene Variable deklarieren?

        Statt vieler Einzel-Variablen, über die man die Übersicht verlieren kann, womit man sich Folgeprobleme wegen doppelter Variablennamensvergabe einhandeln kann, ist eine Ansammlung in einer Variable (Array) übersichtlicher.

        Performance sollte man messen und danach über Veränderungen nachdenken. Darüber zu philosophieren ohne den Rest des Scripts zu kennen ist meist müßig.

        echo "$verabschiedung $name";

        1. Hallo dedlfix,

          hat weiter geholfen. Vielen Dank.
          Ich muss sagen, das Forum hier gefällt mir gut.

          Scheinen eine Menge kompetenter Leute hier zu sein und ich kann einiges dazu lernen.

          Gruss
          Andrea