Pieti: Session ändern / Dynamische Sprachauswahl

Hallo erstmal,
ich habe meine Seite in zwei Sprachen laufen Deutsch und Englisch. Über eine Session wird die ausgewählte Sprache jeweils im nächsten Menüpunkt weitergegeben (die Seite ist mit PHP aufgebaut). Mein Problem ist nun wenn ich mich in einem Menüpunkt befinden und die Sprache ändern möchte falle ich wieder auf die index-Seite zurück. Das liegt wohl an der Methode die ich benutze die Sprache zu ändern, mein Code sieht wie folgt aus:
Die Session:
<?php
//starts session
session_start();

//defines existing languages
$existing_languages = array ( 'de', 'en' );

if(isset($_GET['lang']) && in_array($_GET['lang'], $existing_languages) ) {
   $_SESSION['language'] = $_GET['lang']; }

else { if(!isset($_SESSION['language'])) {
   $_SESSION['language'] = "de"; }} //default language = deutsch

//includes language file
include($_SESSION['language'] . "/language.php");
?>

Die Links zum ändern:
<a href="index.php?lange=de" target="_self" id="de">Deutsch</a>
<a href="index.php?lange=en" target="_self" id="en">Englisch</a>

Wie kann ich die Session, also ob "de" oder "en" anders ändern, so dass ich in dem momentanen Menüpunkt bleibe?

  1. Hello,

    <a href="index.php?lange=de" target="_self" id="de">Deutsch</a>
    <a href="index.php?lange=en" target="_self" id="en">Englisch</a>

    sofern dein Sprachwechselcode nicht nur in der index.php sondern überall enthalten ist (z.B. per include), dann könntest du den link ändern zu
    href="$_SERVER["PHP_SELF"]?lang=de"

    ansonsten musst du in der index.php nach dem Sprachwechsel eine Weiterleitung starten:
    i. href ändern, exemplarisch index.php?lang=de&amp;page=seite.php
    ii. Umleitung mittels header() - beachte Hinweis zu Ausgaben vor dem header()-Aufruf.

    MfG
    Rouven

    --
    -------------------
    There's no such thing as a free lunch  --  Milton Friedman
    1. Hello,

      sofern dein Sprachwechselcode nicht nur in der index.php sondern überall enthalten ist (z.B. per include), dann könntest du den link ändern zu
      href="$_SERVER["PHP_SELF"]?lang=de"

      Da würde ich lieber $_SERVER['SCRIPT_NAME'] benutzen.

      $_SERVER['PHP_SELF'] kann vom Script-Namen abweichen.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Das Problem ist dass meine Url in etwa so aufgebaut ist:
    ...index?page=seite1.php
    ...index?page=seite2.php
    ...index?page=seite3.php

    Da funktioniert es leider nicht wenn ich es bei dem Link zum ändern z.b. so machen würde:
    ...index?lang=de?page=seite1.php
    ...index?lang=de?page=seite2.php
    ...
    bzw. statt "de" halt dann "en"

    Hast du das vllt. versucht mir mir deiner Methode zu zeigen, Rouven?

    sofern dein Sprachwechselcode nicht nur in der index.php sondern überall enthalten ist (z.B. per include), dann könntest du den link ändern zu
    href="$_SERVER["PHP_SELF"]?lang=de"

    ansonsten musst du in der index.php nach dem Sprachwechsel eine Weiterleitung starten:
    i. href ändern, exemplarisch index.php?lang=de&amp;page=seite.php
    ii. Umleitung mittels header() - beachte Hinweis zu Ausgaben vor dem header()-Aufruf.

    Wenn dann versteh ichs grad net, kannst dus mir bitte ausführlicher zeigen dann check is vllt. gleich? Wär super! Und danke schonmal.

    1. Hello,

      Da funktioniert es leider nicht wenn ich es bei dem Link zum ändern z.b. so machen würde:
      ...index?lang=de?page=seite1.php
      ...index?lang=de?page=seite2.php

      das ergibt ja auch nichts sinnvolles - zwischen "de" und "page" solltest du ein "&amp;" unterbringen, wenn dein Skript sowieso mit sowas umgehen kann.

      MfG
      Rouven

      --
      -------------------
      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
      Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
      1. Hello,

        Da funktioniert es leider nicht wenn ich es bei dem Link zum ändern z.b. so machen würde:
        ...index?lang=de?page=seite1.php
        ...index?lang=de?page=seite2.php
        das ergibt ja auch nichts sinnvolles - zwischen "de" und "page" solltest du ein "&amp;" unterbringen, wenn dein Skript sowieso mit sowas umgehen kann.

        MfG
        Rouven

        Jo des haut schon gut hin wenn ichs so mach (^^wurde von euch auch schonmal gepostet):
        <a href="index.php?lang=de&amp;page=seite1.php" target="_self" id="de">Deutsch</a>
        <a href="index.php?lang=en&amp;page=seite1.php" target="_self" id="en">Englisch</a>

        Ein Problem noch, wie lese ich z.b. aus solch einer Url korrekt die page, also hier "seite1.php" aus um es oben in den Link jeweils einzusetzen? Bsp.:
        ...index.php?page=seite1.php

        Beim mir kommt wenn ich
        <? echo ($_GET['page']) ?>
        als Antwort
        de/seite1.php
        und das "de/" muss für den Link oben weg das es funktioniert!?

        1. Ein Problem noch, wie lese ich z.b. aus solch einer Url korrekt die page, also hier "seite1.php" aus um es oben in den Link jeweils einzusetzen? Bsp.:
          ...index.php?page=seite1.php

          Beim mir kommt wenn ich
          <? echo ($_GET['page']) ?>
          als Antwort
          de/seite1.php
          und das "de/" muss für den Link oben weg das es funktioniert!?

          Habs rausbekommen, Problem gelöst!
          Mit folgender Funktion werden die ersten drei Symbole/Buchstaben/Zahlen, wie auch immer, von $_GET['page'] (also de/seite1.php) enfernt. Bei mir ist das "de/" bzw. "en/". Hier die Funkrion:
          <? echo substr($_GET['page'], 3) ?>

          (Je höher die Zahl (hier "3") desto mehr wird von links aus "gelöscht", wird die Zahl negativ, also je kleiner, wird von rechts nach links "gelöscht")

    2. Hello,

      Das Problem ist dass meine Url in etwa so aufgebaut ist:
      ...index?page=seite1.php
      ...index?page=seite2.php
      ...index?page=seite3.php

      Da funktioniert es leider nicht wenn ich es bei dem Link zum ändern z.b. so machen würde:
      ...index?lang=de?page=seite1.php
      ...index?lang=de?page=seite2.php

      aber wenn Du es so machst, wie es vorgesehen ist:

      index?lang=de&pg=1
         index?lang=de&pg=2

      und dann in der index.php entsprechend auswählst, welche Seite angezeigt werden soll.
      Nur nicht den Fehler machen, und den GET-Parameter für die Seite dirket an include() weitergeben!
      Das wäre eine Injektionsmöglichkeit.

      gleich? Wär super! Und danke schonmal.
      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)