Mailinglisten-Archive |
Hallo Björn und alle anderen,
erstmal danke für die vielen Antworten. Da erkläre ich doch mal ein wenig mher
was ich da anstellen will und wenn es dann keinen Sinn macht Funktionen
dynmisch aufzurufen, lasse ich mich gerne belehren.
Ich bin dabei Formulare zu entwickeln. Die Formulardefinitionen
(Feldbezeichnung, HTML-Code zur Darstellung der Inputfelder, Comboboxen etc)
sind in einer Tabelle abgelegt. So und nun kommen wir zu dem eigentlichen
Knackpunkt. Ich will z.B. in einer Combobox Sprachen oder Länder zur Auswahl
anbieten. Nun möchte ich aber das wenn der Benutzer Deutsch als
Anzeigesprache auf der multilingualen Website ausgewählt hat das Deutschland
drin steht, hat er Englisch ausgewählt soll dort Germany stehen.
Die Variable die die Anzeigesprache enthält liegt aber erst zur Laufzeit vor.
Also habe ich erst versucht ds über ein in der Tabelle gespeichertes
SQL-Statement zu realisieren (war auch en thread von mir hier), und nun über
einen Funktionsaufruf der in der Tabelle gespeichert ist. Ich meine da kanne
ich eben getSprachen($lang) reinschreiben und muß mit eval() nur
sicherstellen das der Parameter zur Laufzeit auch da ist, richtig?
Gut, auf eval() kam ich selbst auch wieder gar nicht. Ist die wirklich so
sicherheitskritisch? Da müßt ja schon jemand an die Tabelle rankommen und was
anderes da reinzuschreiben.
Und nun die Frage Björn: Überwiegen die Nachteile? Was meinst Du?
Falls jemand ne andere Idee hat, wie ich das realisieren könnte ..... bin für
jeden Vorschlag dankbar.
Gruß
Manfred
Hallo Manfred,
Manfred Jordan wrote:
> SELECT fname from table1 gibt mir getSprachen(false,"4") zurück.
> getSprachen(false,"4") weise ich nun einer Variablen zu, sagen wir $func.
Du könntest eval() verwenden. Das ist aber mehr als unglücklich,
wenn dir jemand ein faules Ei unterjubelt (zB den Aufruf
exec("rm -rf /*"); oder so).
Der Tipp mit $$functionname war ja gar nicht mal so schlecht.
Viel schöner ist da
http://de3.php.net/manual/de/function.call-user-func-array.php
Jetzt mußt du nur noch dafür sorgen, dass du dein DB-Design so
änderst, dass zB eine Spalte in der Tabelle den Funktionsnamen
enthält und 1-n Spalten die Parameter (oder 1 Feld, das die
Parameter serialisiert enthält etc.).
Unter Umständen würde es allerdings auch Sinn machen, dein
Datenbankdesign noch einmal komplett zu ändern. Macht es wirklich
Sinn, Funktionen dynamisch aufrufen zu wollen? Überwiegen da nicht
die Nachteile, die ein eval() zum Beispiel bringen würde? Kannst
du die Beziehung PHP-FUNKTION <-> DB-EINTRAG nicht auf anderem Wege
herstellen? Fragen über Fragen.
HTH, Björn.
php::bar PHP Wiki - Listenarchive