[PHP] Variables in string

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 19-09 09:40
Hallow,

Ik wil een soort activatiemail verzenden via PHP. Het bericht is zoals:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$activationMail = 
"Hello\n
\n
This mail is an invitation to activate your account at $sitename.\n
\n
Your initial password is $password .\n
You can activate you account by clicking on the link below and filling in the requested information on that page.\n
$activationlink\n
\n
If you think this mail was not intented for you, please ignore it.\n
\n
If you experience any problems please contact the administrator at $adminemail.\n
Thank you.";


Deze code staat in een centraal configuratiebestand dat 'geinclude' wordt waar nodig.
Ik kan nu de variabelen $sitename en $adminemail wel een waarde geven voordat de bovenstaande text aan $activationMail wordt toegekend, maar de variabelen $password en $activationlink zijn verschillend voor elke gebruiker en kunnen dus pas 'geset' worden in de code waar de mail verzonden zal worden. Omdat de $activationMail in dat centraal configuratiebestand staat, bevatten de variabelen $password en $activationlink dus nog niets wanneer $activationMail geset wordt.

Hoe kan ik er nu voor zorgen dat de variabelen $password en $activationlink toch 'geëxpand' worden in $activationMail, ondanks dat $activationMail geset wordt voordat $password en $activationlink geset worden? Ik zou waarschijnlijk gewoon een replace kunnen uitvoeren, maar dat lijkt mij niet zo 'clean' geprogrammeerd. Bestaat er een betere manier om wat ik wil voor mekaar te krijgen?

Alvast bedankt!

[ Voor 6% gewijzigd door titan_pi8 op 24-07-2006 15:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou dus een random password vantevoren moeten genereren en deze vastleggen in bijvoorbeeld een MySQL database. Na activatie alleen even een mogelijkheid bieden om $password te wijzigen.

Acties:
  • 0 Henk 'm!

  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 19-09 09:40
Ik denk niet dat je begrijpt wat mijn probleem is.

Hier is de code die zorgt voor het mailen:
code:
1
2
3
include "config.inc.php";
$activationlink = "Test activationLink";     
mail('geldig email adres', 'een onderwerp', "$activationMail");


Het probleem is nu dat in $activationMail, $activationlink nog niet vervangen is door "Test activationLink" omdat $activationMail geset was (namelijk in config.inc.php) voordat $activationlink geset was.

[ Voor 16% gewijzigd door titan_pi8 op 24-07-2006 15:49 ]


Acties:
  • 0 Henk 'm!

  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 21-06 10:31
Je kan toch ook gewoon een activatie sleutel laten genereren en deze samen met de rest van de info in een DB wegschrijven.

Gewoon de activatiesleutel in de mail meesturen, men klikke, sleutel word gecheckt, account word vrijgegeven.

Of mis ik iets?

Acties:
  • 0 Henk 'm!

  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 19-09 09:40
Dat is inderdaad wat ik wil doen, maar dat concept had ik al. Het is enkel dat 'activatiesleutel in de mail meesturen' dat niet lukt. Hoe zou jij dat doen, als je de 'body' van je mail op een centrale plaats wil houden?

Acties:
  • 0 Henk 'm!

  • MicroWhale
  • Registratie: Februari 2000
  • Laatst online: 20-09 12:00

MicroWhale

The problem is choice

ga je spammen? :P

je hebt $activationLink als tekst in $activationMail staan.

in delphi doen we het meestal met de Format Functie:

Delphi:
1
2
3
4
5
6
7
const
  incompleteUrl = 'http://%s:1234/soap/Service';

function GetUrl(aMachineName : String) : String;
begin
  result:=Format(incompleteUrl,[aMachineName]);
end;


in dit geval wordt de %s vervangen door de string in aMachineName.

wellicht is er in php ook zoiets?

[ Voor 6% gewijzigd door MicroWhale op 24-07-2006 15:56 ]

Het enige belangrijke is dat je vandaag altijd rijker bent dan gisteren. Als dat niet in centen is, dan wel in ervaring.


Acties:
  • 0 Henk 'm!

  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 27-08 14:50
Misschien heb je hier iets aan?

Acties:
  • 0 Henk 'm!

  • Scott
  • Registratie: December 2004
  • Laatst online: 20-09 21:57

Scott

Ik ben, dus ik tweak

En in PHP doen we dat met sprintf :)

PHP:
1
2
3
4
include "config.inc.php";
// $activationmail = 'Activatie link: %1';
$activationlink = "Test activationLink";     
mail('geldig email adres', 'een onderwerp', sprintf($activationMail, $activationlink));

Acties:
  • 0 Henk 'm!

  • OVERLORD_1982
  • Registratie: Juni 2001
  • Laatst online: 21-06 10:31
Waarom genereer je de $activationlink niet in de config.inc.php en gebruik je deze vervolgens ook op de page waar je config.inc.php aanroept om deze vervolgens in de DB te pompen.

Ik had er overigens zelf geen apparte php file voor, maar dit is idd netter :)

Acties:
  • 0 Henk 'm!

  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 19-09 09:40
Die sprintf() was precies wat ik nodig had, thx! Ik denk dat het met die eval() ook wel zou lukken, maar dat heb ik (nog) niet geprobeerd.

Bedankt voor de replies!

Acties:
  • 0 Henk 'm!

  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
Zou ik ook maar niet doen. 99 van de 100 keer dat je denkt eval() nodig te hebben dan is er een betere/veiligere oplossing te bedenken. In dit geval zeker. Zo'n probleem los je zoals eerder aangegeven is gewoon met sprintf() op.

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

eval is eigenlijk gewoon 'evil' maar dan verkeerd geschreven ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.

Pagina: 1