Vinie
Vinie

Reputation: 2993

Save variable as variable in MYSQL for later use

I have an email template which i am saving in database. My problem is some part of message are variable means these data are coming from current user data. For Example My Template is

$message="This is test for $username. I am sending mail to $email."

here $username and $email is coming from current users and it is varying from user to user. So problem is how to save it in database so i can use it as variable on php page later. anybody have any idea please help me.your help would be appreciated.

Upvotes: 0

Views: 337

Answers (3)

Mattias Farnemyhr
Mattias Farnemyhr

Reputation: 4238

The variables in the string will not be evaluated as variables automatically just because you are adding it to your php scope. You need to eval the string in order for the variables to be replaced:

$username = 'test';
$email = '[email protected]';
$str = "This is a test for $username. I am sending mail to some person $email.";

echo $str. "\n";
// This is a test for $username. I am sending mail to some person $email.
eval("\$str = \"$str\";");
echo $str. "\n";
// This is a test for test. I am sending mail to some person [email protected].

For more information, see http://php.net/manual/en/function.eval.php

Upvotes: 1

Raphael Müller
Raphael Müller

Reputation: 2200

You can use something like this:

$input = "This is test for {username}. I am sending mail to {email}.";

$tokens = array("username" => $username, "email" => $email);

$tmp = $input;
foreach($tokens as $key => $token)
{
    $tmp = str_replace("{".$key."}", $token, $tmp);
}
echo $tmp;

Upvotes: 2

marian0
marian0

Reputation: 3327

If you really need to store whole template in database, you can save it using your own created constants e.g. [USERNAME], [EMAIL] and then in php script just use str_replace() on them.

$messageTemplate = 'This is test for [USERNAME]. I am sending mail to [EMAIL].';
$message = str_replace(array('[USERNAME]', '[EMAIL]'), array($username, $email), $messageTemplate);

But you can also divide this string and concatenate it with variables from database as follows:

$message = 'This is test for ' . $username . '. I am sending mail to ' . $email . '.';

Upvotes: 3

Related Questions