Ankündigung

Einklappen
Keine Ankündigung bisher.

Dynamische Sprachänderung Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dynamische Sprachänderung Problem

    Moin Leute,
    hab ein Problem bei meinem Versuch meine Seite dynamisch auf 2 Sprachen anzeigen zu lassen.
    Zunächst mal die relevanten Codeteile:

    frontendHandler.php
    PHP-Code:
    if(isset($_GET['lang']))
    {
        
    $lang $_GET['lang'];
        
    $_SESSION['lang'] = $lang;
        
    setcookie("lang"$langtime() + (3600 24 30));
    }
    else if(isset(
    $_SESSION['lang']))
    {
        
    $lang $_SESSION['lang'];
    }
    else if(isset(
    $_COOKIE['lang']))
    {
        
    $lang $_COOKIE['lang'];
    }
    else
    {
        
    $lang 'en';
    }

    switch(
    $lang){
        case 
    'en':
            
    $lang_file 'lang.en.php';
            break;

        case 
    'de':
            
    $lang_file 'lang.de.php';
            break;

        default:
            
    $lang_file 'lang.en.php';
    }

    include_once 
    'languages/'.$lang_file
    main.php
    PHP-Code:
    <?php
        
    include_once("./frontendHandler.php");
        
    session_start();
    ?>

    [...]

    <div id="lang">
          <a href="main.php?page=home&lang=de"><img src="res/flag-german.jpg"></a><br>
          <a href="main.php?page=home&lang=en"><img src="res/flag-uk.jpg"></a>
    </div>

    [...]

    <a href="main.php?page=home"><li id="home"><?php echo $lang['MENU_HOME']; ?></li></a>
    lang.en.php
    PHP-Code:
    <?php
    $lang 
    = array(); 

    [...]

    $lang['MENU_HOME'] = 'Home';
    $lang['MENU_NEWS'] = 'News';

    usw.
    Bis hierhin ist alles kein Problem und funktioniert genauso wie es sollte.
    Mein Problem tritt auf, wenn ich die Sprache bei einer dynamisch reingeladenen Seite ändern will.

    frontendHandler.php
    PHP-Code:
    function getPage(){
        global 
    $page;
            
        switch(
    $page){
            case 
    "home":
                include(
    "backend/home.php");
                break;
                    case [...]
            }

    home.php
    PHP-Code:
    <?php
        
    include_once("./frontendHandler.php");
    ?>

    [...]

    <h1 id="headline"><?php echo $lang['PAGE_HOME']; ?></h1>

    [...]
    Der Fehler der nun auftritt:
    Undefined variable: lang in C:\xampp\htdocs\Template\backend\home.php

    Nun ist meine Frage, wie ich das fixen kann.
    Ich bin mittlerweile echt ratlos, meiner Meinung nach müsste es funktionieren,
    da ich genau die selbe Logik in main.php und home.php verwende,
    es allerdings lediglich in der main funktioniert.

    Ich hoffe ihr könnt mir helfen,
    MfG Brainshaker

  • #2
    Es ist prinzipiel keine Gute Idee, eine Session-Variable vor einem session_start zu setzen oder zu lesen

    Immer gerne genommen:

    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Zitat von uha Beitrag anzeigen
      Es ist prinzipiel keine Gute Idee, eine Session-Variable vor einem session_start zu setzen oder zu lesen
      Hab ich das gemacht?
      Falls ja hätte ich gerne die Stelle, anscheinend bin ich zu blöd sie zu finden^^

      Und zum debuggen:
      Ich hab schon versucht das Problem möglichst auf alle relevanten Teile zu reduzieren, allerdings stehe ich immernoch vor der Frage wieso es in der main.php problemlos funktioniert und in der home.php mit dem exakt gleichen Syntax nicht.

      Kommentar


      • #4
        Zitat von Brainshaker Beitrag anzeigen
        Hab ich das gemacht?
        Falls ja hätte ich gerne die Stelle, anscheinend bin ich zu blöd sie zu finden^^

        Und zum debuggen:
        Ich hab schon versucht das Problem möglichst auf alle relevanten Teile zu reduzieren, allerdings stehe ich immernoch vor der Frage wieso es in der main.php problemlos funktioniert und in der home.php mit dem exakt gleichen Syntax nicht.
        <?php
        include_once("./frontendHandler.php");
        session_start();
        ?>

        Kommentar


        • #5
          Zitat von Brainshaker Beitrag anzeigen
          Falls ja hätte ich gerne die Stelle, anscheinend bin ich zu blöd sie zu finden
          Och büdde!!!

          In der fronendhandler.php greifst du auf Session-Variablen zu, aber session_start kommt erst nach dem include_once
          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

          Kommentar


          • #6
            Oh mein Gott bin ich blöd
            Sorry für die Begriffsstutzigkeit...

            Ich habs jetzt geändert, das hat an meinem Problem allerdings nichts bewirkt

            Kommentar


            • #7
              Dann hilft wohl nur "Richtig debuggen", siehe #2
              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar

              Lädt...
              X