将变量保存为MYSQL中的变量供以后使用

问题描述:

我有一个电子邮件模板,我将其保存在数据库中。我的问题是消息的某些部分是可变的,意味着这些数据来自当前用户数据。 比如我模板是将变量保存为MYSQL中的变量供以后使用

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

这里$username$email从当前用户的到来,它是从用户不同的用户。 所以问题是如何将它保存在数据库中,以便以后可以在php页面上使用它作为变量。 任何人有任何想法,请帮助我。你的帮助将不胜感激。

+0

什么是你想保存?带有占位符的字符串或其填充值后的结果字符串?无论哪种方式,您都会将其作为任何其他字符串值写入数据库。 – David 2014-09-12 12:43:50

+3

而不是$您可以切换到{例如{用户名},那么您可以在将来使用str_replace替代变量 – Pundit 2014-09-12 12:44:18

+0

我想用占位符保存字符串。 – Vinie 2014-09-12 12:47:42

如果你真的需要整个模板存储在数据库中,你可以使用自己的保存创建常量例如[USERNAME],[EMAIL],然后在php脚本上使用str_replace()

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

但你也可以把这个字符串,并与数据库变量串连,如下所示:

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

字符串中的变量不会被自动评估为变量,只是因为您将它添加到您的php作用域。您需要EVAL字符串,以便将被替换的变量:

$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] 

欲了解更多信息,请参阅http://php.net/manual/en/function.eval.php

+1

在单引号内设置的变量不会插值,除非连接。 '$ str ='这是对$ username的测试。我正在给邮件发送邮件,';'会失败。 '$ str =“这是对$ username的测试,我正在给邮件发送邮件。”;' – 2014-09-12 12:51:53

+1

请注意,使用eval时,有人可能会注入错误的代码。 – 2014-09-12 12:55:55

+0

非常感谢materik。有用。 – Vinie 2014-09-12 12:58:28

您可以使用这样的事情:

$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;