2014-09-12 2 views
0

У меня есть шаблон электронной почты, который я сохраняю в базе данных. Моя проблема заключается в том, что часть сообщения является переменной, так как эти данные поступают из текущих пользовательских данных. Для примера Моего шаблонаСохранить переменную как переменную в MYSQL для последующего использования

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

$username здесь и $email исходит от текущих пользователей и варьируются от пользователя к пользователю. Итак, проблема заключается в том, как сохранить его в базе данных, поэтому я могу использовать его как переменную на странице php позже. У кого-нибудь есть идеи, пожалуйста, помогите мне. Ваша помощь будет оценена.

+0

Что вы пытаетесь сохранить ? Строка с заполнителями или результирующая строка после того, как она была заполнена значениями? В любом случае, вы должны записать его в базу данных как любое другое строковое значение. – David

+3

вместо $ вы можете переключиться на {например {username}, тогда вы можете использовать str_replace в будущем для любой замены переменной – Pundit

+0

Я хочу сохранить строку с заполнителями. – Vinie

ответ

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. Я отправляю почту в $ email. ";' –

+1

и, пожалуйста, обратите внимание при использовании eval, чтобы кто-то мог ввести плохой код. –

+0

Большое спасибо матери. Оно работает. – Vinie

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; 
Смежные вопросы