2013-05-26 4 views
-1

J'essaye de faire une tâche simple de stocker un modèle d'email dans une base de données, le récupérant et remplissant des variables dans le modèle avant d'envoyer un email. J'utilise str_replace mais pour une raison quelconque cela ne fonctionne pas pour moi. Pour compliquer le tout, cela fonctionne pour l'une des variables de mon modèle ci-dessous, le {{date}} est rempli, mais tous les autres sont ignorés.str_replace de PHP ne fonctionne pas?

Ce n'est pas un problème avec mes variables POST n'étant pas remplies, je peux même passer une chaîne de texte réel dans str_replace et il ne trouvera toujours pas mes "variables de modèle" et les remplacer. Juste la date un.

Des idées pour lesquelles il aurait un comportement si étrange? D'après ce que je peux voir, le Date n'a rien de différent?

Modèle

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

Code pour modèle de processus

// 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); 

sortie réelle après le traitement

// 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

Vérifiez le serveur et les variables de publication sont ce que vous pensez qu'elles devraient être. 'printr ($ _ POST);' –

Répondre

4

Vous recréerez constamment $admin_body à partir de zéro, en supprimant les précédentes substitutions str_replace() :-D

+0

barrage, manqué cela, correct bien sûr. –

+0

merci, toujours quelque chose de simple heureusement – JasonDavis

+2

note de côté ... cela peut être fait en une seule fois en utilisant des tableaux pour les premier et deuxième paramètres de str_replace. Je crée toujours un tableau comme '$ arr ['{{name}}'] = $ name; $ arr ['{{email}}'] = $ email ... 'et appelle' str_replace (array_keys ($ arr), array_values ​​($ arr), $ admin_template); ' – Orangepill