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