gpt4 book ai didi

存储在 MySQL 中的 PHP 变量未被解析

转载 作者:行者123 更新时间:2023-11-29 01:30:04 24 4
gpt4 key购买 nike

美好的一天,

我的脚本有问题。我正在做的是:

我想给用户发送一封电子邮件。不同类型的邮件有不同的模板,例如一种用于注册确认的设计,一种用于最近的新闻等。所以,我所做的是,我创建了一个表格,并将每个设计及其完整的 HTML 代码存储在名为内容的列中。

为此,我的数据库设计非常简单:

ID    |    type    |    content

1 | signup | <html> ... <body> .. content of email ... </body></html>

所以,上面就是我的数据库。 ID 为 1 的字段现在,当有人注册时,我试图向他发送一封电子邮件,其内容是从上表中提取的。内容字段下的文本如下:

<html>
.
.
<body>
Good Day,

You have successfully created your account.
Please activate your account now by clicking below:

<a href="activate.php?md5=$md5&code=$code">ACTIVATE</a>

</body>
</html>

在上面的代码中,如果您检查激活链接,我使用了 PHP 变量 $md5 和 $code,认为它们对应的值将打印在实际的电子邮件中。但它们是按原样打印的,例如 $md5$code

好吧,我没有做多少研究,也没有从几个论坛上了解到这一点,

第一:虽然我们将 HTML 模板的内容与这些 PHP 变量一起添加到数据库中,但它们已成为该数据库列本身的值,不再被视为 PHP 变量。

第二:一个人声称他已经使用 eval() 函数使其正常工作。我可以使用 eval,因为从安全的角度来看,我没有从用户那里获取任何值(value),而是从数据库中获取任何值(value)。我试过了,但还是没有。

下面是我用 eval() 试过的代码:

$md5    =   $row['md5'];  // These variables values I'm expecting to come in template content
$code = $row['activ_code']; // These variables values I'm expecting to come in template content

ob_start();
eval("\$template_content = \"$template_content\";");
$message = $template_content;
ob_end_clean();

有人可以帮我解决这个问题吗?我不想将完整的模板 (HTML) 放在我使用邮件功能的同一页面上。它使代码看起来很丑陋,而不是保持代码简洁明了。

请帮忙!

最佳答案

使用 str_replace http://php.net/manual/en/function.str-replace.php并将这些变量替换为标签,即类似 %MD5% 的内容。您仍然可以使用 $code,但它不是可读的,并且可能导致错误的文本被替换(考虑一个字符串“this was $codeveloped”)

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) This function returns a string or an array with all occurrences of search in subject replaced with the given replace value.

然后,

$template_content = '<a href="activate.php?md5=%MD5%&code=%CODE%">ACTIVATE</a>';
$template_content = str_replace("%MD5%", $md5, $template_content);
$template_content = str_replace("%CODE%", $code, $template_content);

str_replace 也接受数组作为参数,所以这可能是一个更好的方法

$placeholders = array("%MD5%", "%CODE%");
$values = array($md5, $code);
$template_content = str_replace($placeholders, $values, $template_content);

Eval 是一个潜在的危险并且通常是矫枉过正

关于存储在 MySQL 中的 PHP 变量未被解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com