2014-09-12 106 views
0

我有一個電子郵件模板,我將其保存在數據庫中。我的問題是消息的某些部分是可變的,意味着這些數據來自當前用戶數據。 比如我模板是將變量保存爲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

回答

3

如果你真的需要整個模板存儲在數據庫中,你可以使用自己的保存創建常量例如[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 . '.'; 
1

字符串中的變量不會被自動評估爲變量,只是因爲您將它添加到您的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

2

您可以使用這樣的事情:

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