Bei Sprachwechsel eine andere Tabelle auslesen

  • @Cybergreek

    Zitat

    Was steht denn in den Variablen $lang und in $sql drin vor Deinem foreach in dem Miniblog?


    Also alles komplett aus dem Mini-Blog Script, vor dem foreach, sieht so aus ...

    PHP
    1. <?php
    2. // Verbindung zur Datenbank herstellen
    3. $pdo = new PDO('mysql:host=localhost;dbname=DB_NAME, 'BENUTZER', 'PASSWORT');
    4. // Sprache ermitteln und Datens�tze aus DB auslesen
    5. if ($lang=="de") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_de ORDER BY ID ASC LIMIT 3"; }
    6. else if ($lang=="en") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_en ORDER BY ID ASC LIMIT 3"; }
    7. else if ($lang=="fr") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_fr ORDER BY ID ASC LIMIT 3"; }
    8. else if ($lang=="ru") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_ru ORDER BY ID ASC LIMIT 3"; }


    Die Variable $lang ist somit an die Srache gebunden und die Variable $sql an der Datenbankverbindung. So das mit $lang die Sprache per Sprachweiche erkannt wird und letztlich damit mit der $sql Variable die entsprechenden Daten aus der Datenbank selectiert werden.


    Aber es will und will einfach nicht funktionieren :(


    Ich rufe lokal meine Webseite auf und sehe in der Adresszeile lediglich ...

    HTML
    1. localhost/www/html/MeineWebseite


    Die Webseite wird mir dann auch, durch die common.php, in der Default-Sprache "de" angezeigt.
    Lediglich die Blogbeiträge werden nicht dargestellt.
    Wenn ich aber nun die Sprachauswahl "en" oder auch "de" und selbst dann wenn dieses ohnehin die Default Sprache ist, wird mir in der Adresszeile folgendes angezeigt ...

    HTML
    1. localhost/www/html/MeineWebseite?lang=de


    ... und damit werden dann auch alle Blogeinträge in der jeweilig gewählten Sprache angezeigt.


    Meine Fehlervermutungen:

    • Es gibt keinen Default-Sprachwert in dem Blog-Script
      (Wobei dieses ja nicht sein muss, denn der wird ja schon aus der common.php gegeben)
    • Es gibt einen Fehler in der Zusammenarbeit zwischen common.php und dem Blog-Script
      (Vielleicht eine Variable die nicht übereinstimmt und/oder ein anderer Variablenfehler)
    • Es gibt einen Fehler beim setzen/lesen der Session bzw. des Cookies
      (Wobei das unverständlich wäre, denn die Sprachauswahl der Webseite mittels Session/Cookie funktioniert ja)


    Also stehe ich da mit ein Haufen Fragezeichen über dem Kopf und weiß nicht weiter :confused:
    So das ich letztlich hoffe, dass Du mir da ggfls. weiter helfen kannst :rolleyes:


    Gruss

  • @Cybergreek


    Also alles komplett aus dem Mini-Blog Script, vor dem foreach, sieht so aus ...


    Sorry, da war wohl ein Missverständnis.
    Ich meinte, was in den Variablen steht. Also mal for dem foreach mit echo ausgeben lassen und dann versuchen im Skript nachzuverfolgen, wie das was da drin steht auch da rein gekommen ist.

    Grüße vom Griechen,
    Cybergreek!

  • @Cybergreek

    Zitat

    Ich meinte, was in den Variablen steht. Also mal for dem foreach mit echo ausgeben lassen und dann versuchen im Skript nachzuverfolgen, wie das was da drin steht auch da rein gekommen ist.


    Also wenn ich vor dem foreach mit ...

    PHP
    1. echo "$lang $sql";


    mir die Variablen ausgeben lasse, dann kommt als Ergebnis einzig und allein ...

    PHP
    1. Array


    Demnach gehe ich nun mal davon aus, dass dies aus der common.php kommt.
    Aber schlauer werde ich dadurch nun leider auch nicht. Denn das in der common.php enthaltende Array ist ja auch für die Sprachauswahl da und das arbeitet auch einwandfrei - sprich, die Webseite wird mir in der Default-Sprache oder aber der angeklickten gewünschten Sprache angezeigt. Nur wenn die Seite zum ersten mal aufgerufen wird, dann wird durch die Default-Sprachausgabe eben nicht z.B.: "index.php?lang=de" angezeigt, sondern lediglich "index.php". Dies bedeutet, dass die Sprachauswahl zwar funktioniert, aber der Defaultwert der Sprachvariable in der common.php nicht beim ersten Seitenaufruf übergeben wird und damit letztendlich auch keine Blogbeiträge angezeigt werden. Ich weiß nicht ob ich Dir dieses nun mit diesen Worten wenigstens einigermaßen de Problematik schildern konnte, denn dieses Problem zerbricht mir wirklich noch den Kopf. Habe dafür extra eine Kopie von allen erstellt an welchen ich rumtüftle aber zum Erfolgbringenden Ergebnis komme ich leider nicht :confused:



    EDIT:
    Wenn ich Deinen zuletzt genannten Code

    PHP
    1. <?php
    2. // Verbindung zur Datenbank herstellen
    3. $pdo = new PDO('mysql:host=localhost;dbname=DB_NAME, 'BENUTZER', 'PASSWORT);
    4. // Sprache ermitteln und Datens�tze aus DB auslesen
    5. if ($lang=="de") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_de ORDER BY ID ASC LIMIT 3"; }
    6. else if ($lang=="en") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_en ORDER BY ID ASC LIMIT 3"; }
    7. else if ($lang=="fr") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_fr ORDER BY ID ASC LIMIT 3"; }
    8. else if ($lang=="ru") { $sql = "SELECT Blogtitle, Blogdate, Blogpost FROM blog_ru ORDER BY ID ASC LIMIT 3"; }


    mit meinen vorherigen ersetze, werden selbst auch nach getätigter Sprachauswahl keine Blogbeiträge ausgelesen und ausgegeben. So das letztlich daraus zu schließen ist, dass das "GET" irgendwie darin erhalten bleiben muss, um letztlich die Blogbeiträge in den jeweiligen Sprachen auszugeben.
    Mittlerweile denke ich, dass es ggfls. viel einfacher ist/wäre, wenn alles über die Datenbank geregelt werden würde - nur dann müsste ich wieder alles umschreiben bzw. anpassen, was ich lieber vermeiden möchte.


    Gruss

    Einmal editiert, zuletzt von php_echo ()

  • Da ist unterwegs wohl irgendwas verlorengegangen. Bei dem letzten Abschnitt fehlt das abschließende else.
    So sah der Code zwischendurch mal aus:


    PHP
    1. if ($_GET['lang']=="de") { echo "ifde";$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_de ORDER BY ID ASC LIMIT 3"; }
    2. else if ($_GET['lang']=="en") { echo "ifen";$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_en ORDER BY ID ASC LIMIT 3"; }
    3. else if ($_GET['lang']=="fr") { echo "iffr";$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_fr ORDER BY ID ASC LIMIT 3"; }
    4. else if ($_GET['lang']=="ru") { echo "ifru";$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_ru ORDER BY ID ASC LIMIT 3"; }
    5. else { echo "else";$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_ru LIMIT 3 ORDER BY Name ID LIMIT 3"; }


    Wenn Du hier alle "$_GET['lang']" mit "$lang" ersetzt, dann solltest Du auch einen Default haben.


    Allerdings finde ich die Ausgabe von "Array" etwas seltsam.
    Ich würde Dir empfehlen, dass Du in Deinem Code an vielen Stellen ein "echo $lang" einbaust, damit Du herausfindest, wann da was rein geschrieben wird.
    Mit diesen Ausgaben, kannst Du dann besser verstehen, warum es nicht klappt.


    Ich befürchte aber, dass Dir ein bisschen das Grundverständnis von dem if...else if...else if...else Block fehlt, oder?
    Verstehen kannst Du solche einen Code ganz gut, wenn Du mit echo $irgendwas Dir "Zwischenstände ausgeben lässt und dadurch auch siehst, was das Skript ausführt und was nicht.

    Grüße vom Griechen,
    Cybergreek!

  • @Cybergreek

    Zitat

    Wenn Du hier alle "$_GET['lang']" mit "$lang" ersetzt, dann solltest Du auch einen Default haben.


    Vielen Dank für Deinen Hinweis. Daran habe ich noch nicht gedacht und zudem auch nicht gesehen. Wobei dies, insofern man wie meine Wenigkeit auf die in der common.php vorhandene Variable $lang zurückgreifen will und um damit letztlich die entsprechenden Blogbeiträge in der wiederum gewählten Sprache (oder eben den Defaultwert) anzuzeigen, auch einleuchtend ist. Ich werde es gleich mal ausprobieren und dann Bericht erstatten ob dies nun funktioniert oder nicht ;)



    Zitat

    Allerdings finde ich die Ausgabe von "Array" etwas seltsam.


    Das findest Du nicht nur alleine so!
    Andererseits wurde das echo auch vor dem Array ausgegeben. Denn die common.php wird gleich am Anfang der Webseite eingebunden und wenn ich dann im späteren folgenden Blog-Script dann das echo vor dem in der common.php ausgeben lasse, dann könnte es ggfls. daran liegen/gelegen haben. Ich hoffe, dass ich dies nun verständlich ausgedrückt habe ;)



    Zitat

    Ich befürchte aber, dass Dir ein bisschen das Grundverständnis von dem if...else if...else if...else Block fehlt, oder?


    Jain! Ich bin zwar kein PHP-Profi wie Du oder auch andere sind, aber PHP-Grundkenntnisse habe ich schon. Wenn man mit der englischen Sprache vertraut ist, dann sollte man auch PHP ein wenig nachvollziehen können. Sprich "if = wenn" und "else = sonst" so das letztlich daraus folgendes Beispiel zu entnehmen ist:
    if der_apfel_grün then iss_den_apfel else schmeiß_ihn_weg



    Zitat

    Verstehen kannst Du solche einen Code ganz gut, wenn Du mit echo $irgendwas Dir "Zwischenst�nde ausgeben lässt und dadurch auch siehst, was das Skript ausführt und was nicht.


    Ausführen klappt ja sowohl in der common.php so wie auch im Blog-Script. Lediglich arbeitet nicht beides so zusammen wie es sollte. Denn die Blogeinträge werden eben erst nach dem anklicken der Sprachauswahl angezeigt, jedoch nicht der Default-Sprachwert wenn die Sprachwahl nicht getätigt wurde. Und genau das ist das dumm-dusselige Problem :confused: