variable aus der DB lesen und ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • variable aus der DB lesen und ausgeben

    Also ich habe in meiner DB tabelle (daten) eine Spalte "beschreibung", gespeichert ist dort drinne "bla $lang['test']"
    mit nur echo() gibt er mir 1 zu 1 aus was drinne steht was ja auch sinnvoll ist.
    jedoch habe ich dieser variable (sprachdatei) einen wert zugewiesen.
    jetzt soll das script die daten auslesen die variable einbinden aus der DB und auch im script genutzt werden.
    egal was ich versuche mit eval() auch das geht nicht. Was mache ich falsch?

    //////////////////////////////////////////
    //////////////////////////////////Datenbank
    DB Tabelle: "extra"
    Spalte: "beschreibung"
    Inhalt in beschreibung: "bla $lang["test"]"
    /////////////////////////////////////////////
    ////////////////////////////////////////////

    // includierte (Sprachdatei): $lang["test"]='test';


    Quellcode

    1. $query ='SELECT * FROM extra ';
    2. $result=mysql_query($query, $db_id);
    3. while($extra = mysql_fetch_assoc($result))
    4. {
    5. $php = '$variable = $extra["beschreibung"]';
    6. eval($php);
    7. echo $variable;
    8. }
  • Hi,

    das Konstrukt ist schon sehr abenteuerlich ;)
    Könnte daran liegen, dass am ende das Semikolon fehlt, also innerhalb des Strings, da dieser ja für eval() eine gültige Syntax beötigt.

    Aber ich würde dir Vorschlagen, für die Internationalisierung einen anderen Weg zu suchen anstatt Php Variablen in der Datenbanbank zu speichern.
  • ok Semikolon übersehen habs damit versucht er gibt mir dennoch immer nur $lang["test"] aus sprich er nutzt diese einfach nicht.

    Und ne andere möglichkeit ffällt mir gerade nicht ein. Extra die inhalte der Variable in DB schreiben wäre doof da ich ja dann für jede Sprache neue DB brauche was ich aber nicht möchte. einfachste weg ist einfach das ich die langauge variable mit in der DB habe und diese dann nutzen würde.

    Aber villt habt ihr noch ideen.
  • Hi,

    was genau möchtest du denn übersetzten? Alle Inhalte oder nur ein paar Wörter ?


    Probier mal ob deine eval() Funktion überhaupt funktioniert und schalte mal explizit das Error Reporting an.

    Quellcode

    1. error_reporting(E_ALL);


    Quellcode

    1. $string = 'Bierglas';
    2. $name = 'Binding-Lager';
    3. $str = 'Das ist mein $string, voll mit $name.';
    4. echo $str . "\n";
    5. eval ("\$str = \"$str\";");
    6. echo $str . "\n";

    (Biespiel ist von php.net kopiert)


    Vielliecht hat dein Hoster die Funktion auch gesperrt oder auf deinem lokalen Server ist die Funktion gesperrt.
  • Vermutlich wird PHP Code, der innerhalb einer ausgewerteten Variable als String vorliegt nicht als PHP-Code evaluiert, sondern als String; aber das ist jetzt geraten.

    Zum Thema Lokalisierung:

    Wenn es unbedingt auf einer Datenbank basieren muss, heißt das nicht, dass du pro Sprache eine eigene Datenbank notwendig ist. (Vermutlich meinst du Tabelle)
    Wobei ich jetzt kein Problem darin sehe, verschiedene Sprachen auf verschiedene Tabellen innerhalb einer Datenbank abzulegen - im Gegenteil, so muss die Datenbank auf der Suche nach den Beschreibungen einer Sprache nicht alle anderen durchsuchen.
    Wenn es in einer Tabelle sein soll, kannst du diese auch um ein weiteres Attribut erweitern: language / lang_code / local o.ä.

    So wie ich deine jetztige Tabellenstruktur verstehe, befinden sich die sprachübergreifend eindeutigen Bezeichner für die einzusetzenden Textbausteine innerhalb der 'Beschreibung' als assoziativer Index des Arrays 'lang'.
    Um nun den Weg über eval() zu umgehen, könntest du diesen eindeutigen Bezeichner aus 'Beschreibung' lösen, und als Wert in einem neuen Attribut ablegen, das dir diese Bezeichner speichert.

    Die Zuordnung zwischen Sprache, Textbaustein und sprachabhängigem Inhalt findet dadurch auf Tabellenebene statt, und du kannst das Array 'lang' direkt in deinem PHP-Code mit der Ausgabe deines Querys füttern.


    Die meisten Lösungen zur Lokalisierung nutzen im übrigen einfache Dateien im Format Textbaustein=sprachabhängiger Text in je einer Datei pro Sprache.


    Irgendwie habe ich das Gefühl, deinen Ansatz nicht ganz verstanden zu haben. ?(


    Edit:
    Aus dem von vince zitierten kann man das Problem schon herauslesen: Dort wird Wert der Variable, der Wert erneut andere Variablen beinhaltet, vor dem evaluieren als String eingefügt, wohingegen bei dir diese Variable direkt eingebettet wird.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von evilwm ()