2013-05-14 3 views
-2

У меня есть строка для отправки электронной почты. Эта строка хранится в базе данных.PHP - строка конкатенации из базы данных

Когда я загружаю строку своей моделью.

//string from db 
Hi {$email} , bla bla bla 

мой контролеры пример.

some function(){ 
     $text = $this->Some_model->get_string(); 

     // this var get from post 
     $email = '[email protected]' 
     echo $text; 
    } 

и нет никаких изменений в строке. с str_replace я не могу получить результат следующим образом.

Привет [email protected], бла-бла-бла

что, если мой случай. У меня есть две или более строки для замены?

пример

Hi {$email}, this is your {$username} 
+0

В чем состоит '$ email'? когда вы получаете от db table –

+0

Что-то вроде этого? 'str_replace (" {$ email} ", $ email, $ dbstring);' –

+1

хорошо, что вопрос довольно неясен –

ответ

1

PHP оленья кожа магически проверять каждую строку если он содержит код, который он может выполнить. Если ваша строка в базе данных фактически содержит Hi {$email} , bla bla bla, тогда PHP просто оставит ее так.

Поэтому вам необходимо вручную переопределить значения в строке, чтобы они соответствовали фактическим значениям. Самый безопасный способ был бы простой str_replace

<?php 
$string = 'Hi {$email} , bla bla bla'; 
$email = '[email protected]'; 
$output = str_replace('{$email}', $email, $string); 
$output = str_replace('{$username}', $username, $output); 
echo $output; 
//Hi [email protected] , bla bla bla 
?> 

Или в вашем коде

<?php 
some function(){ 
    $text = $this->Some_model->get_string(); 
    $email = '[email protected]'; 
    echo str_replace('{$username}', $username, str_replace('{$email}', $email, $text)); 
    //Hi [email protected] , bla bla bla 
} 
?> 

Если вы создаете строку (двойные кавычки), прежде чем поместить в базу данных, значение {$email} бы изменено

<?php 
$email = '[email protected]'; 
$text = "Hi {$email} , bla bla bla"; //notice the double quotes, single qoutes wont work 
echo $text; 
//Hi [email protected] , bla bla bla 
?> 
+0

спасибо hugo, что, если в моем случае у меня есть более двух строк для замены? пример «Привет {$ email}, это ваше имя пользователя. если бы мне пришлось делать цикл str_replace? – rslhdyt

+0

Если его два (или несколько) я просто использовал бы 'str_replace ('{$ username}', $ username, str_replace ('{$ email}', $ email, $ text););'. или разделите их на '$ output' и назовите их одним из другого. Если бы у вас было много переменных, вы могли бы начать думать о других вариантах. –

+0

Спасибо, я ценю ваш ответ – rslhdyt

0

Ваша функция должна быть, как это если у вас есть строка, как этот 'тест'

function get_email_string(){ 
     $text = $this->Some_model->get_string(); 
     $email = '@mail.com' 
     echo $text.$email; 
} 

Выходной

[email protected] 
+0

Я уверен, что он хочет что-то, что заменит '{$ email}' в $ text значением '$ email'. Хотя это не самый лучший вопрос. – andrewsi

0

Таким образом, это не правильно .. Вы можете это сделать.

function emailString(){ 
    $text = "Hi __EMAIL__ , bla bla bla"; 

    $text = str_replace('__EMAIL__','[email protected]'); 
    echo $text; 

}

+0

Почему это правильный путь, а не '{$ email}'? Вы объясните, пожалуйста. – Rikesh

+0

, потому что вы не можете вызывать переменную в строке. – soachishti

0

Я предполагаю, что ваш $text является Hi {$email} , bla bla bla, так как вы написали //string from db вы можете использовать str_replace, чтобы ваш желаемый результат

$email = '[email protected]' 
echo str_replace('{$email}', $email, $text); 

это утаишь

Hi [email protected] , bla bla bla 
Смежные вопросы