Zuviele $$-Zeichen
Kjorni
- php
Hallo Forum,
Aus einer Mysql-Tabelle hole ich mir Daten, bei denen eine Spalte den für PHP gedachte Variablennamen enthält und die nächste Spalte den dafür zugedachten Wert.
Aber ich komme mit der Syntax etwas durcheinander.
$query="
select variable,wert FROM Tabelle";
$result=mysql_query($query);
if ($result==FALSE)
{
error();
}
while ($row=mysql_fetch_row($result)) {
$$row[0] = $row[1]; <---- Wie weise ich das zu?
} // end while
Beispiel:
Im Array $row stünden die Elemente var1 und wert1.
Wie mache ich in der Schleife dann daraus:
$var1 = $wert1 ?
Grüße, Kjorni
Hi!
$$row[0] = $row[1]; <---- Wie weise ich das zu?
Wenn es nicht eindeutig ist, wie weit der Name einer variablen Variable geht, muss man ihn in {} einrahmen.
Ich würde das allerdings nicht so lösen, sondern eher ein Array anlegen und $row[0] als Key einsetzen.
$config[$row[0]] = $row[1]; // angenommen es sind Konfigurationsdaten
Denn wenn es jemandem gelingt, die Daten der Tabelle zu manipulieren, überschreibst du dir, ohne es nochmal zu prüfen, real existierende Variablen.
Lo!
Hallo Dedlfix,
Ich würde das allerdings nicht so lösen, sondern eher ein Array anlegen und $row[0] als Key einsetzen.
$config[$row[0]] = $row[1];
// angenommen es sind Konfigurationsdaten
Ja, das sind sie.
Hm. Würde ich auch gerne, aber ich verwende all diese Daten bereits in den Scripten. Das hieße dann ja auch, ich müsste in allen Scripten alle (hier benutzten) Variablen ändern.
Denn wenn es jemandem gelingt, die Daten der Tabelle zu manipulieren, überschreibst du dir, ohne es nochmal zu prüfen, real existierende Variablen.
Was meinst Du damit genau?
Und worin besteht dann genau der Unterschied zur Verwendung eines Arrays? Ist "manipuliert" hier nicht gleich "manipuliert"?
Grüße, Kjorni
Hi!
Würde ich auch gerne, aber ich verwende all diese Daten bereits in den Scripten. Das hieße dann ja auch, ich müsste in allen Scripten alle (hier benutzten) Variablen ändern.
Faulheit oder etwas mehr Sicherheit - was ist dir am liebsten? Den bestmöglichen Kompromiss kannst du mit der "Suchen und Ersetzen"-Funktion eines Editors haben haben.
Denn wenn es jemandem gelingt, die Daten der Tabelle zu manipulieren, überschreibst du dir, ohne es nochmal zu prüfen, real existierende Variablen.
Was meinst Du damit genau?
Du vertraust darauf, dass im DBMS nur die Variablennamen enthalten sind, die du selbst dort eingetragen hast. Doch wer garantiert dir das?
Und worin besteht dann genau der Unterschied zur Verwendung eines Arrays? Ist "manipuliert" hier nicht gleich "manipuliert"?
Wenn es eine Variable namens $foo gibt, die bereits in deinem Script mit einer wichtigen Aufgabe betraut ist, wird sie mit deiner Version einfach so überschrieben, wenn es jemandem gelingt, einen Eintrag mit diesen Wert im DBMS einzutragen. Mit der Array-Variante wird lediglich ein Eintrag im Array erstellt - nichts vorhandenes überschrieben.
Lo!
Hi Dedlfix,
Faulheit oder etwas mehr Sicherheit - was ist dir am liebsten? Den bestmöglichen Kompromiss kannst du mit der "Suchen und Ersetzen"-Funktion eines Editors haben haben.
Danke für die Erklärungen.
Ich hätte schon alleine aus der Notwendigkeit des Wissens um die Herkunft der Variablen gerne Dein vorgeschlagenes Array. Aber es sind ca. 100 Variablen, die es zu suchen und ersetzen gilt. Das ist auch im Editor noch echt Arbeit.
Hat für sowas noch nie jemand ein Script geschrieben, dass das in einer Schleife rekursiv erledigen kann?
Gruß und Dank, Kjorni
Hi!
Ich hätte schon alleine aus der Notwendigkeit des Wissens um die Herkunft der Variablen gerne Dein vorgeschlagenes Array. Aber es sind ca. 100 Variablen, die es zu suchen und ersetzen gilt. Das ist auch im Editor noch echt Arbeit.
Hat für sowas noch nie jemand ein Script geschrieben, dass das in einer Schleife rekursiv erledigen kann?
Rekursion braucht man dazu nicht. Die Variablennamen stehen in deiner Tabelle. Hol sie mit einer einfachen Abfrageschleife und erstell ein Array mit $ und dem Namen als Kex und dem neuen Array-Namen als Wert. Öffne dann alle Dateien mit foreach (glob(...) ...) beispielsweise und nimm strtr() in der zweiten Variante (siehe PHP-Handbuch).
Lo!
Hello,
Aus einer Mysql-Tabelle hole ich mir Daten, bei denen eine Spalte den für PHP gedachte Variablennamen enthält und die nächste Spalte den dafür zugedachten Wert.
Aber ich komme mit der Syntax etwas durcheinander.
$query="
select variable,wert FROM Tabelle";
$result=mysql_query($query);
if ($result==FALSE)
{
error();
}
while ($row=mysql_fetch_row($result)) {
$$row[0] = $row[1]; <---- Wie weise ich das zu?
} // end while
Ich sehe zwar den Sinn nicht in der Aktion, aber ich würde es mittels einer dafür vorgesehenen Funktion machen. Du hast doch nur eine Zuordnung pro Datensatz, oder?
Lade alle Ergebnisse der Abrage in ein Array. Das geht bei Verwendung von mysqli\_\* mittles ->fetch\_all()
<http://de2.php.net/manual/en/mysqli-result.fetch-all.php>
Und dann extrahierst Du die Elemente des Arrays am besten in einem begrenzten Scope, z.B. innerhalb einer Funktion.
<http://de2.php.net/manual/en/function.extract.php>
Ich persönlich würde sie aber lieber in einem Array zusammengefasst lassen und bestenfalls eine Referenz für das Array bauen, wenn es denn unbedingt notwendig ist.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>