2016-08-30 1 views
0

Ich habe eine common.php für die Sprachauswahl der gesamten Website verwendet und die Übersetzungen der einzelnen Wörter/Phrasen der Webseite liest pro Sprachvariablen aus den Sprachdateien, z Beispiel lang/lang.de.php, lang.en.php usw. und Ausgaben. Das funktioniert auch wunderbar und ist kein Problem. Nun, da ich in der Website einen Blog geplant habe, dessen Beiträge sich in einer Datenbank befinden, möchte ich dies nun, je nach Wahl der Besuchersprache, aus dem gesamten Tisch heraus, sprechen, lesen und ausgeben.Bei Sprachwechsel eine andere Tabelle lesen

Kurz:
Der Besucher wählt die deutsche Sprache, und alles, was aus der folgenden Tabelle gelesen wird, und Ausgang ...

<?php 
$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_de ORDER BY ID ASC LIMIT 3 
?> 

... oder wenn der Besucher auswählt, beispielsweise die Englisch Sprache, dann nach der folgenden Tabelle zu lesen ...

<?php 
$sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_en ORDER BY ID ASC LIMIT 3 
?> 

... und so weiter

common.php

<?php 
session_start(); 
header('Cache-control: private'); 
if(isSet($_GET['lang'])) { 
$lang = $_GET['lang']; 
$_SESSION['lang'] = $lang; 
setcookie('lang', $lang, time() + (3600 * 24 * 30)); 
} else if(isSet($_SESSION['lang'])) { 
$lang = $_SESSION['lang']; 
} else if(isSet($_COOKIE['lang'])) { 
$lang = $_COOKIE['lang']; 
} else { $lang = 'de'; } 
switch ($lang) { 
case 'en': $lang_file = 'lang.en.php'; break; 
case 'de': $lang_file = 'lang.de.php'; break; 
case 'ru': $lang_file = 'lang.ru.php'; break; 
case 'fr': $lang_file = 'lang.fr.php'; break; 
default: $lang_file = 'lang.de.php'; } 
include_once 'lang/'.$lang_file; 
?> 

blog.php

<section id="blog" class="row"> 
<div class="center"> 
    <h1 style="color:#fff; text-shadow: 1px 1px 2px #000000;"><i class="fa fa-newspaper-o" aria-hidden="true"></i> Blog</h1> 
    <div id="blogcontent"> 
    <?php 
     $pdo = new PDO('mysql:host=localhost;dbname=DATENBANK', 'BENUTZER', 'PASSWORT'); 
     if ($_GET["lang"]=="de") { $sql = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_de ORDER BY ID ASC LIMIT 3"; } 
     else if ($_GET["lang"]=="en") { $abfrage = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_en ORDER BY ID ASC LIMIT 3"; } 
     else if ($_GET["lang"]=="fr") { $abfrage = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_fr ORDER BY ID ASC LIMIT 3"; } 
     else if ($_GET["lang"]=="ru") { $abfrage = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_ru ORDER BY ID ASC LIMIT 3"; } 
     else { $abfrage = "SELECT Blogtitel, Blogdate, Blogpost FROM blog_ru LIMIT 3 ORDER BY Name ID LIMIT 3"; } 
     foreach ($pdo->query($sql) as $row) { 
     echo "<div class='post'><div class='blog_titel'><i class='fa fa-comment-o' aria-hidden='true'></i> " .$row['Name']. "</div>"; 
     echo "<div class='blog_date'><i class='fa fa-calendar' aria-hidden='true'></i> " .$row['Phone']. "</div>"; 
     echo "<div class='blog_post'> " .$row['Email']. "</div>"; 
     echo "</div>"; 
     } 
     ?> 
     </div> 
    </div> 
    </div> 
</section> 

Die Sprachausgabe funktioniert wunderbar, und es wird auch auf allen Seiten der vorhandenen Sprachen auf der Variable aus dem lang/lang.de.php ausgelesen werden, lang/lang.en.php, etc. richtig und ausgestellt. Wenn ich jetzt aber zum Beispiel mit:

index.php?lang=en 

Die englische Sprache in der Navigation ruft, dann lesen Sie nicht die Blog-Beiträge, wie aus der entsprechenden Tabelle gewünscht. Meiner Meinung nach sollte es aber mit dem obigen Code funktionieren oder gibt es da einen Tippfehler oder irre ich mich da? Also meine Frage an die Erfahreneren unter Ihnen, wie ich das tun kann, je nach gewünschter Auswahl der entsprechenden Tabelle aus der vorhandenen Datenbank und in der Sprache angezeigt.

+2

Wenn Sie mehrere Tabellen erstellen müssen, um im Wesentlichen den gleichen Inhalt zu hosten, ist das ein Zeichen für ein falsches oder zumindest zweifelhaftes DB-Design. Warum fügen Sie keine Spalte in die Tabelle ein, die die Sprachwerte "en", "de" usw. darstellt? – ppeterka

+0

Sie haben eine Menge Text, der nicht mit dem tatsächlichen Problem zu tun hat und ich habe Probleme zu verstehen, was Ihre eigentliche Frage ist? – Epodax

+0

Ich möchte nur meine vorhandenen Tabellen behalten. Denn ich möchte meine bestehende Website nicht komplett überarbeiten. Es muss anhand der gespeicherten Session in der common.php die entsprechende Tabelle und View gelesen werden können. Entschuldigung, wenn mein Englischkenntnisse nicht gut sind (Google Translator Grüße von) - weil ich aus Weißrussland komme –

Antwort

0

Im Fall $ _GET ['lang'] == 'de' setzen Sie die Abfrage in $ sql, was korrekt ist, denn dann tun Sie $ pdo-> query ($ sql). In den anderen Fällen steckst du es in $ abfrage, also ist der Fehler da.

Wie auch immer, ein einfacherer Ansatz, die gleiche Datenbankstruktur mantaining, wäre gewesen:

foreach($pdo->query("SELECT ... FROM blog_".$_GET['lang']." WHERE ...") as row) ... 

Wie auch immer, ppeterka Lösung ist wahrscheinlich die beste.

+0

Das wars! Danke! So ist das Thema fertig –

Verwandte Themen