2014-07-18 54 views
0

所以我有一張表格,裏面有電子郵件模板,這些電子郵件模板稍後可以用於發送電子郵件。在php中解析值

結構是: -

for_status  subject   message 
int    text   text 

一個示例項是: -

for_status = 1, 
subject = Transaction Status Changed, 
message = Hi $user->firstname, this is a test message. 

好了,問題是,當我與當前messagesubject,它顯示發送電子郵件在郵件中Hi $user->firstname, this is a test message

而不是顯示,Hi thefirstname here, this is a test message

我在$user變量的同一頁上成功讀取用戶詳細信息。 這裏怎麼回事?

+0

僅僅因爲你在一些文本里面有一個變量並不意味着什麼。除非以某種方式執行該字符串,否則該變量只是一些隨機字符,看起來像一個變量。 –

+0

您需要使用答案中提到的模板/佔位符。 [This](http://stackoverflow.com/questions/3158743/simple-template-var-replacement-but-with-a-twist),[和這個](http://stackoverflow.com/questions/477398/ php-templating-with-str-replace)問題可以提供一些想法。 – undefined

回答

0

PHP將只對您編碼到您自己的PHP文件的字符串執行替換,而不是那些來自數據庫或任何其他源的字符串。如果確實如此,那將是一個巨大的安全風險!

您將需要自己對模板執行替換。

// $message is: Hi %{userFirstName}, this is a test message. 
$message = str_replace('%{userFirstName}', $user->firstname, $message); 
1

當你說「電子郵件模板表」時,電子郵件模板在某種數據庫中的實際文本是什麼?

如果是這種情況,你有$user->firstname在數據庫中,我敢肯定它會直接吐出來。

1

你需要什麼稱爲佔位符。你需要決定有什麼作爲佔位符,我個人使用以下命令:

{%first_name%}, this is a test message. 

然後在你的PHP代碼,你只是有佔位符的數組&值是這樣的:

$arr = array(
    '{%first_name%}' => $user->firstname, 
); 

//and now replace the body 
$body = str_replace(array_keys($arr), $arr, $body); 

有通過使用已編寫的庫或使用正則表達式進行正確解析是一種更好的方法,但我會將其留給您弄清楚。

+0

好吧,這似乎是工作。但是這隻適用於1值。如果在數組中有3個值,它似乎不起作用。 – user3369276

+0

您需要擁有3個佔位符。如果你的意思是3個相同的地方持有人不同的價值是的,它不會工作,因爲它的數組和它的鍵是持有人不能擁有相同的鍵和不同的值 – GGio