Klemens Rangger: Variablen aus Datenbank

Hallo zusammen,

ich habe in einer Tabelle 3 Felder:

  • bezeichnung (zB. "$Sprache")
  • deutsch     (zB. "Deutsch")
  • englisch    (zB. "Englisch")

Eigentlich wollte ich, dass in der while-Schleife
der jeweiligen Variable aus "bezeichnung" der Wert
"deutsch" oder "englisch" zugewiesen wird.

Was habe ich da falsch gemacht?
Danke für eure Hilfe!
Klemens

// Variablen aus Datenbank

$abfrage  = "select * from $db5 order by bezeichnung";
  $ergebnis = mysql_query($abfrage);
  if($sprache == "DE")
    {
    while($row = mysql_fetch_object($ergebnis))
      {
      $row->bezeichnung = $row->deutsch;
      }
    }
  else
    {
    while($row = mysql_fetch_object($ergebnis))
      {
      $row->bezeichnung = $row->englisch;
      }
    }

  1. Hi,

    Was habe ich da falsch gemacht?

    1. keine verwertbare Problembeschreibung angegeben.
    2. auch ohne 1. erkennbar: das Datenbankdesign!

    LG

  2. echo $begrüßung;

    • bezeichnung (zB. "$Sprache")

    [...]

    Eigentlich wollte ich, dass in der while-Schleife der jeweiligen Variable aus "bezeichnung" der Wert "deutsch" oder "englisch" zugewiesen wird.

    Du hast im Feld "bezeichnung" keine Variable sondern nur eine Zeichenkette. Dass diese wie der Name einer Variable aussieht spielt erstmal keine Rolle. Wenn du daraus einen Variablenbezeichner machen willst, musst du aus der Zeichenkette Code macht. Das geht mit eval() oder in deinem Fall einfacher mit den so genannten variablen Variablen. Beides sind aber Techniken, die man nur mit Bedacht einsetzen sollte, wenn sie sich nicht vermeiden lassen. Wenn es jemandem gelingt, die Daten in der Datenbank gegen deinen Willen zu verändern, könnte dein Script ungewünschte Variablen anlegen, oder im Fall von eval() Code ausführen.

    Es ist vielleicht nicht nötig, einzelne Variablen anzulegen. Ein Vorschlag wäre, ein Array anzulegen, dessen Keys aus dem Inhalt von "bezeichnung" gebildet werden. Damit hast du eine definierte Stelle und keinen Variablen-Wildwuchs. Hier ein Beispiel:

    $config[$row->bezeichnung] = $row->deutsch;

    und vor dem while ein

    $config = array();

    Im Feld "bezeichnung" sollte nun aber der Inhalt nicht mehr mit einem $ beginnen.

    echo "$verabschiedung $name";