2013-05-26 9 views
-1

Я пытаюсь выполнить простую задачу хранения шаблона электронной почты в базе данных, его извлечения и заполнения переменных в шаблоне перед отправкой электронной почты.PHP str_replace не работает?

Я использую str_replace, но по какой-то причине он не работает для меня. Чтобы усложнить его, он работает для 1 из моих переменных шаблона ниже, {{date}}, который заполняется, но все остальные пропускаются.

Это не проблема с моими переменными POST, которые не заполняются, я могу даже передать настоящую текстовую строку в str_replace, и она все равно не найдет мои «переменные шаблона» и не заменит их. Только дата одна.

Любые идеи, почему у этого было бы такое странное поведение? Из того, что я вижу, дата не имеет ничего другого?

Шаблон

$admin_template = '<table> 
    <tr> 
     <td><strong>Name:</strong></td><td>{{name}}</td> 
    </tr> 
    <tr> 
     <td><strong>Email:</strong></td><td>{{email}}</td> 
    </tr> 
    <tr> 
     <td><strong>Website:</strong></td><td>{{website}}</td> 
    </tr> 
    <tr> 
     <td><strong>Phone:</strong></td><td>{{phone}}</td> 
    </tr> 
    <tr> 
     <td><strong>Source:</strong></td><td>{{source}}</td> 
    </tr> 
    <tr> 
     <td><strong>Budget:</strong></td><td>{{budget}}</td> 
    </tr> 
    <tr> 
     <td><strong>IP:</strong></td><td>{{{ip}}}</td> 
    </tr> 
    <tr> 
     <td><strong>Date Submitted:</strong></td><td>{{date}}</td> 
    </tr> 
    <tr> 
     <td><strong>Message:</strong></td><td>{{message}}</td> 
    </tr> 
    </table>'; 

код для обработки шаблона

// Process Admin Template 
$admin_body = str_replace('{{name}}', $name, $admin_template); 
$admin_body = str_replace('{{email}}', $mailFrom, $admin_template); 
$admin_body = str_replace('{{phone}}', $_POST["phone"], $admin_template); 
$admin_body = str_replace('{{website}}', $_POST["website"], $admin_template); 
$admin_body = str_replace('{{message}}', $_POST["message"], $admin_template); 
$admin_body = str_replace('{{budget}}', $_POST["budget"], $admin_template); 
$admin_body = str_replace('{{source}}', $_POST["source"], $admin_template); 
$admin_body = str_replace('{{ip}}', $_SERVER['REMOTE_ADDR'], $admin_template); 
$admin_body = str_replace('{{date}}', date("Y-m-d H:i:s"), $admin_template); 

Фактический выход после обработки

// Actual Output... 
<table> 
<tr> 
    <td><strong>Name:</strong></td><td>{{name}}</td> 
</tr> 
<tr> 
    <td><strong>Email:</strong></td><td>{{email}}</td> 
</tr> 
<tr> 
    <td><strong>Website:</strong></td><td>{{website}}</td> 
</tr> 
<tr> 
    <td><strong>Phone:</strong></td><td>{{phone}}</td> 
</tr> 
<tr> 
    <td><strong>Source:</strong></td><td>{{source}}</td> 
</tr> 
<tr> 
    <td><strong>Budget:</strong></td><td>{{budget}}</td> 
</tr> 
<tr> 
    <td><strong>IP:</strong></td><td>{{{ip}}}</td> 
</tr> 
<tr> 
    <td><strong>Date Submitted:</strong></td><td>2013-05-26 05:01:14</td> 
</tr> 
<tr> 
    <td><strong>Message:</strong></td><td>{{message}}</td> 
</tr> 
</table> 
+0

проверить сервер и почтовые вывески, как вы думаете, они должны быть. 'printr ($ _ POST);' –

ответ

4

Вы постоянно воссоздаете $admin_body с нуля, отбрасывая предыдущие str_replace() замены :-D

+0

плотина, пропустили это, конечно, конечно. –

+0

спасибо, всегда что-то простое спасибо – JasonDavis

+2

сторона примечание ... это можно сделать за один проход, используя массивы для первого и второго параметров для str_replace. Я всегда просто создаю массив, например '$ arr ['{{name}}'] = $ name; $ arr ['{{email}}'] = $ email ... 'и вызывать' str_replace (array_keys ($ arr), array_values ​​($ arr), $ admin_template); ' – Orangepill

Смежные вопросы