Paul Styrnol: (MySQL) Werte einer Spalte in Var. schreiben

Hallo,

ich möchte einige Einstellungen für ein Programm, die ein bestimmter Benutzer
selbst anpassen kann in einer Datenbank speichern. Die Tabelle 'einstellungen'
sieht folgendermaßen so aus:

einstellung   |  wert
--------------+--------
min_zeitindex |  28
max_zeitindex |  72
max_lizenzen  |  50

Ich möchte, dass die Werte beim Aufruf des PHP-Scripts in drei entspreche
nde
Variablen geschrieben werden, folgendes habe ich versucht:

$result = mysql_query("SELECT einstellung,wert FROM einstellungen");
while($row = mysql_fetch_array($result)) {
  if($row["einstellung"] = "min_zeitindex") {
    $min_zeitindex = $row["wert"];
  } elseif($row["einstellung"] = "max_zeitindex") {
    $max_zeitindex = $row["wert"];
  } elseif($row["einstellung"] = "max_lizenzen") {
    $max_lizenzen = $row["wert"];
  }
}

Das Problem ist, dass bei der if-Abfrage anscheinend immer nur der erste Fall
zutrifft und die drei Werte jeweils nacheinander der Variable $min_zeitindex
zugewiesen werden. Zur Kontrolle habe ich innerhalb der while-Schleife folgende
Zeile eingefügt:

echo $row["einstellung"] . "; ";

Die Schleife wird (bei 3 Datensätzen) ja drei mal ausgeführt, im Dokument habe
ich dann auch die entsprechenden Werte, die abgefragt werden stehen:

min_zeitindex; max_zeitindex; max_lizenzen

Doch obwohl der Wer von $row["einstellung"] beim zweiten Durchlauf der Schleife
"max_einstellung" ist, wird bei der if-Abfrage nur der erste Teil ausgeführt.

Hat jemand eine Idee, warum das mit der if-Abfrage nicht so klappt wie ich es mir
vorstelle oder kennt jemand ein elegantere Art die Werte in die entsprechenden
Variablen zu schreiben?

Danke im Voraus.

Viele Grüße
Paul

--
Meine Photos: http://www.rapunzeln.de
  1. Hallo,

    while($row = mysql_fetch_array($result)) {
      if($row["einstellung"] = "min_zeitindex") {

    ^Nach dieser _Wertzuweisung_ ist $row["einstellung"] immer gleich "min_zeitindex" und die Wertzuweisung ergibt _immer_ true, so dass alle else-Zweige nicht zum Tragen kommen.

    $min_zeitindex = $row["wert"];

    Sonst hast Du eine gute Fehlerbeschreibung abgegeben ;-))*scnr*

    viele Grüße

    Axel

    1. Hallo,

      while($row = mysql_fetch_array($result)) {
        if($row["einstellung"] = "min_zeitindex") {
                                  ^Nach dieser _Wertzuweisung_ ist $row["einstellung"] immer gleich "min_zeitindex" und die Wertzuweisung ergibt _immer_ true, so dass alle else-Zweige nicht zum Tragen kommen.
          $min_zeitindex = $row["wert"];

      Sonst hast Du eine gute Fehlerbeschreibung abgegeben ;-))*scnr*

      Ok, das ist jetzt peinlich ... :)

      Ich würde mich nicht wirklich als Programmierer bezeichnen, aber ich habe schon 3 oder 4 kleinere Dinge umgesetzt, aber das ist mir bisher nie passiert. Wenn ich mir überlege wie lange ich vorher an diesem Stück Code gegrübelt habe, ist das noch viel peinlicher. ;)

      Naja, ich dank dir für den Hinweis, nochmal wird mir sowas nicht passieren.

      Viele Grüße
      Paul

      --
      Meine Photos:  http://www.rapunzeln.de
      Meine Tribals: http://www.tribal-galerie.de
  2. ... kennt jemand ein elegantere Art die Werte in die entsprechenden
    Variablen zu schreiben?

    Du kannst das übersichtlicher schreiben, wenn du für solche Konstrukte switch verwendest:

    switch ($row['einstellung']) {
      case 'min_zeitindex':
        $min_zeitindex = $row['wert'];
        break;
      case 'max_zeitindex':
        $man_zeitindex = $row['wert'];
        break;
      case 'max_lizenzen':
        $man_lizenzen = $row['wert'];
        break;
    }

    Außerdem geht das in dem Fall noch kürzer mit variablen Variablen zu lösen.

    while ($row = mysql_fetch_array($result)) {
      ${$row['einstellung']} = $row['wert'];
    }

    Das setzt allerdings voraus, dass der Wert im Feld einstellung immer dem Variablennamen entspricht, den du im Script verwenden willst, und dass du dem DB-Inhalt trauen kannst, sonst überschreibt es dir womöglich andere Variablen.