Übergabevon Variablen aus einerKonfigurationsdatei

Hallo allerseits,

ich habe eine Datei konfdatei.inc.php, die folgenderma=C3=9Fen aussieht:
<?php
....
$_0003 =3D 'Guten Tag $vorname $name,\n\nIhr Benutzerkonto ist
eingerichtet. Ihre Zugangsdaten lauten\n\nBenutzername:
$username\nPasswort: $password\n\n';
$_0004 =3D ...;
$_0005 =3D ...;
$_0006 =3D ...;
....
?>
Diese biete ich privilegierter Benutzern zum Editieren an, damit sie
z.B. die Begr=C3=BC=C3=9Fungsform =C3=A4ndern k=C3=B6nnen, sprich alles bis=
auf die
Variablennamen.


Die Datei wird wiederum in einer zweiten Config-Datei config.inc.php
inkludiert, welche nur Funktionen beinhaltet. Viele davon sollen die
$_xxxx Variablen benutzen, dadurch ich diese in der jeweiligen Funktion
als global deklariere.
<?php
....

function register_user($name, $vorname, $username, $email, $status,
$purer_login, $ids) {
....

global $_0003; //beinhaltet den Email-Body
//eigene Funkt. zumVersenden von Mails
send_mail($emailadd,$subj,$_0003);

....
}

....
?>

Mein Problem ist es, dass ich in der ersten Datei die Variable $_0003
mit Hochkommata-Inhalt belege, da die Variablen $vorname, $name,
$username und $password zu diesem Zeitpunkt noch keine Werte haben und
somit ihre Interpolation vermeiden will.
In der zweiten Datei sind die Werte wegen der Parameter=C3=BCbergabe in der
Funktion schon bekannt. Nun werden aber die Variablen in dem
$_0003-String nicht mehr interpoliert und der Benutzer bekommt im
Messagebody ihre Namen ausgeschrieben und nicht die =C3=BCbergebenen
Werte. Wie kann ich die Interpolation in einem ''-String erzwingen?


Vielen Dank schon mal f=C3=BCr Eure Hilfe!

Gr=C3=BC=C3=9Fe,
Todor
Todor Vachkov [ Mi, 26 September 2007 14:10 ] [ ID #1829918 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Todor Vachkov schrieb:
> Hallo allerseits,
>
> ich habe eine Datei konfdatei.inc.php, die folgenderma=C3=9Fen aussieht=
:
> <?php
> ...
> $_0003 =3D 'Guten Tag $vorname $name,\n\nIhr Benutzerkonto ist
> eingerichtet. Ihre Zugangsdaten lauten\n\nBenutzername:
> $username\nPasswort: $password\n\n';
> $_0004 =3D ...;
> $_0005 =3D ...;
> $_0006 =3D ...;
> ...
> ?>
> Diese biete ich privilegierter Benutzern zum Editieren an, damit sie
> z.B. die Begr=C3=BC=C3=9Fungsform =C3=A4ndern k=C3=B6nnen, sprich alles=
bis auf die
> Variablennamen.
>
>
> Die Datei wird wiederum in einer zweiten Config-Datei config.inc.php
> inkludiert, welche nur Funktionen beinhaltet. Viele davon sollen die
> $_xxxx Variablen benutzen, dadurch ich diese in der jeweiligen Funktion=

> als global deklariere.
> <?php
> ...
>
> function register_user($name, $vorname, $username, $email, $status,
> $purer_login, $ids) {
> ...
>
> global $_0003; //beinhaltet den Email-Body
> //eigene Funkt. zumVersenden von Mails
> send_mail($emailadd,$subj,$_0003);
>
> ...
> }
>
> ...
> ?>
>
> Mein Problem ist es, dass ich in der ersten Datei die Variable $_0003
> mit Hochkommata-Inhalt belege, da die Variablen $vorname, $name,
> $username und $password zu diesem Zeitpunkt noch keine Werte haben und
> somit ihre Interpolation vermeiden will.
> In der zweiten Datei sind die Werte wegen der Parameter=C3=BCbergabe in=
der
> Funktion schon bekannt. Nun werden aber die Variablen in dem
> $_0003-String nicht mehr interpoliert und der Benutzer bekommt im
> Messagebody ihre Namen ausgeschrieben und nicht die =C3=BCbergebenen
> Werte. Wie kann ich die Interpolation in einem ''-String erzwingen?

Die Anwort auf den letzten Satz waere "eval()". Allerdings ist das was
du suchst s|printf()

$_0003 =3D "Guten Tag %s %s,\n\nIhr Benutzerkonto ist eingerichtet. Ihre =

Zugangsdaten lauten\n\nBenutzername:"

[..]

send_mail($emailadd,$subj,printf($_0003,$vornamen, $name));

Als Anmerkung sei noch gesagt das wenn du moechterst das die \n ein
Newline erzeuge du die Strings in " " setzen musst.

Ein weiter Vorschlag waere anstelle von $_003 ein
$_config['msg']['account_created'] Array zu nehmen damit man sehen kann
was in der Variable drin ist.

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Stra=C3=9Fe 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Mi, 26 September 2007 14:22 ] [ ID #1829919 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Todor Vachkov schrieb:

> In der zweiten Datei sind die Werte wegen der Parameterübergabe in der
> Funktion schon bekannt. Nun werden aber die Variablen in dem
> $_0003-String nicht mehr interpoliert und der Benutzer bekommt im
> Messagebody ihre Namen ausgeschrieben und nicht die übergebenen
> Werte. Wie kann ich die Interpolation in einem ''-String erzwingen?

Du hast an dieser Stelle keinen ''-String mehr, sondern eine Variable,
die einen String enthält. An dieser Stelle gibt es keine Unterscheidung
mehr zwischen '' und "". Diese ist nur bei String-Konstanten relevant,
also zum Zeitpunkt Deiner Zuweisung des Strings an $_0003.

Du möchtest also einen String, der in einer Variablen gespeichert ist,
nachträglich interpolieren. Das ist in PHP so nicht vorgesehen. Hier
könnte eval() helfen, etwa so (ungetestet):

eval('$_0003 = "' . addslashes($_0003) . '";');

Übrigens: Variablennamen, die mit $_ beginnen, sind reserviert. Solltest
Du also nicht für eigene Variablen benutzen.

Gruß. Claus
Claus Reibenstein [ Mi, 26 September 2007 15:02 ] [ ID #1829920 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Joerg Behrens schrieb:

> Die Anwort auf den letzten Satz waere "eval()". Allerdings ist das was
> du suchst s|printf()

Und eval() ist Evil ;-)

Soll heissen: Jeder, der Zugriff auf die Configdateien hat, könnte
prinzipiell jeglichen PHP-Befehl auf Deinem Rechner ausführen.

eval() ist mir Vorsicht zu genießen. Die oben genannte Alternative ist
eindeutig vorzuziehen.

Michael
Michael Vogel [ Mi, 26 September 2007 15:12 ] [ ID #1829921 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Claus Reibenstein schrieb:
> Todor Vachkov schrieb:
>
>> In der zweiten Datei sind die Werte wegen der Parameterübergabe in der
>> Funktion schon bekannt. Nun werden aber die Variablen in dem
>> $_0003-String nicht mehr interpoliert und der Benutzer bekommt im
>> Messagebody ihre Namen ausgeschrieben und nicht die übergebenen
>> Werte. Wie kann ich die Interpolation in einem ''-String erzwingen?
>
> Du hast an dieser Stelle keinen ''-String mehr, sondern eine Variable,
> die einen String enthält. An dieser Stelle gibt es keine Unterscheidung
> mehr zwischen '' und "". Diese ist nur bei String-Konstanten relevant,
> also zum Zeitpunkt Deiner Zuweisung des Strings an $_0003.
>
> Du möchtest also einen String, der in einer Variablen gespeichert ist,
> nachträglich interpolieren. Das ist in PHP so nicht vorgesehen. Hier
> könnte eval() helfen, etwa so (ungetestet):
>
> eval('$_0003 = "' . addslashes($_0003) . '";');

Ob die User so privilegiert sind, dass man sie gleich (nahezu)
beliebigen eigenen Code ausführen lassen sollte? Muss der OP für sich
entscheiden...

Daniel
Daniel Fett [ Mi, 26 September 2007 15:23 ] [ ID #1829922 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Todor Vachkov schrieb:

> ich habe eine Datei konfdatei.inc.php, die folgendermaßen aussieht:
> <?php
> ....
> $_0003 =3D 'Guten Tag $vorname $name,\n\nIhr Benutzerkonto ist
> eingerichtet. Ihre Zugangsdaten lauten\n\nBenutzername:
> $username\nPasswort: $password\n\n';
> $_0004 =3D ...;
> $_0005 =3D ...;
> $_0006 =3D ...;
> ....
> ?>
> Diese biete ich privilegierter Benutzern zum Editieren an, damit sie
> z.B. die Begrüßungsform ändern können, sprich alles bis auf die=

> Variablennamen.

Besser:

// 1: firstname; 2: lastname; 3: username; 4: password
define( 'MYAPP_CREDENTIALS', 'Guten Tag %1$s %2$s,

Ihr Benutzerkonto ist eingerichtet. Ihre Zugangsdaten lauten

Benutzername: %3$s
Passwort: %4$s

' );

Dann statt

> function register_user($name, $vorname, $username, $email, $status,
> $purer_login, $ids) {
> ....
> global $_0003; //beinhaltet den Email-Body
> //eigene Funkt. zumVersenden von Mails
> send_mail($emailadd,$subj,$_0003);
> ....
> }

function register_user( $lastname, $firstname, $user, $email, $status,
$pass, $ids )
{
...
$body =3D sprintf( MYAPP_CREDENTIALS,
$firstname, $lastname,
$user, $pass
);
send_mail( $email, MYAPP_CREDENTALS_SUBJECT, $body );
...
}

Vorteil: Konstanten sind von Haus aus global. Außerdem ist durch sprint=
f
eine =C4nderung der Reihenfolge der Parameter im String möglich, ohne a=
n
den Verwendungsstellen etwas zu ändern. Für Bayern könnte das dann =
so
aussehen:

// 1: firstname; 2: lastname; 3: username; 4: password
define( 'MYAPP_CREDENTIALS', 'Grüß Gott %2$s, %1$s,

Ihr Benutzerkonto ist ogrichtet. Ihre Zugangsdaten san

Benutzername: %3$s
Passwort: %4$s

' );

MfG
Niels

--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Niels Braczek [ Mi, 26 September 2007 15:36 ] [ ID #1829923 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Claus Reibenstein schrieb:

> Du möchtest also einen String, der in einer Variablen gespeichert ist,
> nachträglich interpolieren. Das ist in PHP so nicht vorgesehen. Hier
> könnte eval() helfen, etwa so (ungetestet):

Mir fällt gerade noch eine andere Lösung ein:

$namen = array('$vorname', '$name', '$username', '$password');
$werte = array($vorname, $name, $username, $password);
$string = str_replace($namen, $werte, $_0003);

Gruß. Claus
Claus Reibenstein [ Mi, 26 September 2007 16:59 ] [ ID #1829925 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Claus Reibenstein schrieb:
> Mir fällt gerade noch eine andere Lösung ein:
>
> $namen = array('$vorname', '$name', '$username', '$password');
> $werte = array($vorname, $name, $username, $password);
> $string = str_replace($namen, $werte, $_0003);

Sowas in der Art nutze ich auch, hat gegenüber der sprintf Funktion vor
allem den Vorteil, dass ich ein Array übergeben kann. Bei der sprintf
besteht ja soweit ich weiß nur die Möglichkeit, die Variablen
nacheinander der Funktion zu übergeben.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Mi, 26 September 2007 17:03 ] [ ID #1829926 ]

Re: Übergabevon Variablen aus einerKonfigurationsdatei

Ad 2007-09-26, Todor Vachkov <vachkov [at] mail.math.tu-berlin.de> dixit:

><?php
> ...
> $_0003 = 'Guten Tag $vorname $name,\n\nIhr Benutzerkonto ist
> eingerichtet. Ihre Zugangsdaten lauten\n\nBenutzername:
> $username\nPasswort: $password\n\n';
> $_0004 = ...;
> $_0005 = ...;
> $_0006 = ...;
> ...
> ?>
>
> Diese biete ich privilegierter Benutzern zum Editieren an,

Neben den bereits erbrachten Vorschlaegen lohnt sich als
freundliches Entgegenkommen den Benutzern gegenueber und im Sinne
der Fehlervermeidung vielleicht durchaus auch einmal ein Blick auf
ein Templatesystem. Bei mir werden derartige
Benachrichtigungsvorlagen fuer die Nachbehandlung durch Pears
HTML_Template_Sigma erstellt. Das ist recht benutzerfreundlich und
musz nicht nur fuer HTML eingesetzt werden.

Grusz,

Peter Blancke

--
Hoc est enim verbum meum!
Peter Blancke [ Mi, 26 September 2007 18:52 ] [ ID #1829928 ]

Re: Übergabe von Variablen aus einer Konfigurationsdatei

Peter Blancke schrieb:
> Ad 2007-09-26, Todor Vachkov <vachkov [at] mail.math.tu-berlin.de> dixit:
>
> Neben den bereits erbrachten Vorschlaegen lohnt sich als
> freundliches Entgegenkommen den Benutzern gegenueber und im Sinne
> der Fehlervermeidung vielleicht durchaus auch einmal ein Blick auf
> ein Templatesystem. Bei mir werden derartige
> Benachrichtigungsvorlagen fuer die Nachbehandlung durch Pears
> HTML_Template_Sigma erstellt. Das ist recht benutzerfreundlich und
> musz nicht nur fuer HTML eingesetzt werden.

Trotzdem wird man die Texte/Strings in einer eigenen Datei halten
wollen, um sie bei Bedarf einem =DCbersetzer an die Hand geben zu könne=
n.

MfG
Niels

--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Niels Braczek [ Mi, 26 September 2007 20:48 ] [ ID #1829935 ]

Re: Übergabevon Variablen aus einer Konfigurationsdatei

Am Wed, 26 Sep 2007 14:22:26 +0200
schrieb Joerg Behrens <behrens [at] takenet.de>:

> Die Anwort auf den letzten Satz waere "eval()".
> Allerdings ist das
> was du suchst s|printf()
>
> $_0003 =3D "Guten Tag %s %s,\n\nIhr Benutzerkonto ist eingerichtet.
> Ihre Zugangsdaten lauten\n\nBenutzername:"
>
> [..]
>
> send_mail($emailadd,$subj,printf($_0003,$vornamen, $name));

Vielen Dank, J=C3=B6rg!! Das hat mir sehr geholfen.


mfg,
Todor
Todor Vachkov [ So, 30 September 2007 18:54 ] [ ID #1832900 ]
PHP » de.comp.lang.php.misc » Übergabevon Variablen aus einerKonfigurationsdatei

Vorheriges Thema: "On the Fly" generiertes Bild auf Server speichern
Nächstes Thema: mehrere Dateien gleichzeitig hochladen