我正在尝试构建一个系统,其中客户端可以在构建电子邮件模板(也存储在数据库中)时使用方形标记内的短代码,然后将其替换为一行PHP代码。例如,[order_date]
将替换为date("l jS F Y", strtotime($OrderDate))
的值,OrderDate
已在代码中进一步定义。
为此,我构建了一个包含两个字段的新数据库表 - SubOriginal
和SubReplacement
。在上面的示例中,[order_date]
位于SubOriginal
字段中,date("l jS F Y", strtotime($OrderDate))
位于SubReplacement
字段中。
然后,当涉及通过电子邮件发送给用户时,我有以下代码:
// Set fields (StackOverflow example - data from a previous db query)
$OrderDate = $row['OrderDate'];
// Get customer order confirmation template
$sql = "SELECT DeliveryTemplateSubject, DeliveryTemplateContent FROM delivery_templates WHERE DeliveryTemplateTemplate='1'";
$set = $link->query($sql);
$row = $set->fetch_row();
$MessageBody = nl2br($row[1]);
// Make template substitutions
$sqlsub = "SELECT * FROM templates_subs";
$setsub = $link->query($sqlsub);
while($rowsub = $setsub->fetch_array(MYSQLI_ASSOC))
{
$replacement = $rowsub['SubReplacement'];
$MessageBody = str_replace($rowsub['SubOriginal'], $replacement, $MessageBody);
}
// Email customer
$subject = $row[0];
mail($CustomerEmail, $subject, $MessageBody);
然而,替换都是以美元符号开头的原始PHP代码。
我哪里错了?