gpt4 book ai didi

php - 将用户详细信息与 HTML 一起包含在我的数据库中

转载 作者:行者123 更新时间:2023-11-30 00:12:07 25 4
gpt4 key购买 nike

当用户在我的网站上注册时,我会将发送给他们的电子邮件的详细信息(例如他们的电子邮件地址、姓名和电子邮件内容)保存到我的数据库中。然后,脚本(每隔几秒运行一次)根据数据库中存储的详细信息发送电子邮件,然后删除该行,这样电子邮件就不会被多次处理。

我遇到的问题在于将用户的详细信息合并到电子邮件正文中。

下面是我可以毫无问题放入数据库的 HTML 代码片段:

<span style="font-size:1.5em; font-family:Arial">Welcome!</span><br>
<span style="font-size:1.2em">Hi! Lets get your new account set up!</span>

但是,我希望更加用户友好,而不是说“欢迎!”,我希望能够说“欢迎,用户名!”。所以,我尝试了这个:

<span style="font-size:1.5em; font-family:Arial">Welcome, ' . $username . '!</span><br>
<span style="font-size:1.2em">Hi! Lets get your new account set up!</span>

我正在使用 htmlspecialchars() PHP 函数,但上面的代码根本不会插入到数据库中。上面的代码位于变量 $message 中,然后我在尝试插入数据库之前使用 htmlspecialchars() 函数。

我尝试将“.$username.”部分中的所有“更改为”。此将毫无问题地插入数据库;但是在用户收到的电子邮件中,相反看到这样的东西:

  欢迎约克595!
你好!让我们设置您的新帐户!

...用户收到一封如下所示的电子邮件:

  欢迎“.$用户名。”!
你好!让我们设置您的新帐户!

如果您需要,这里是将新行插入数据库的 SQL 查询:

$query = mysql_query("INSERT INTO `mailtosend`
(`id`,`from_email`,`from_name`,`to_email`,`to_name`,`message`,`subject`,`message_nohtml`)
VALUES (NULL, 'emailtosendfrom@mail.com', 'Mail Name', '$email', '$fullname',
'$message', 'Activate your account', 'Activate your account')");

所以,我的问题是:如何将 PHP 变量(例如 $username)合并到 $message 中?

最佳答案

我没有足够的信息来调查为什么 $message var 没有为您进行插值。

这样的东西对我有用:

<?php

$mysqli = new mysqli('host', 'user', 'password', 'database');
if ($mysqli->connect_errno) {
echo 'Failed to connect to MySQL: (' . $mysqli->connect_errno . ') ' . $mysqli>connect_error;
}

$username = 'freddy';
$message = <<<EOT

<span style="font-size:1.5em; font-family:Arial">Welcome, $username!</span><br>
<span style="font-size:1.2em">Hi! Lets get your new account set up!</span>

EOT;
$message = htmlspecialchars($message);

$sql = <<<EOT

INSERT INTO `mailtosend`
(`id`,`from_email`,`from_name`,`to_email`,`to_name`,`message`,`subject`,`message_nohtml`)
VALUES (NULL, 'emailtosendfrom@mail.com', 'Mail Name', ?, ?,
?, 'Activate your account', 'Activate your account')

EOT;

if (!($stmt = $mysqli->prepare($sql))) {
echo 'Prepare failed: (' . $mysqli->errno . ') ' . $mysqli->error;
}

if (!$stmt->bind_param('sss', $email, $fullname, $message)) {
echo 'Binding parameters failed: (' . $stmt->errno . ') ' . $stmt->error;
}

if (!$stmt->execute()) {
echo 'Execute failed: (' . $stmt->errno . ') ' . $stmt->error;
}

$stmt->close();

?>

(加上反 SQL 注入(inject)措施的额外好处。)

更新:我添加了 MySQLi 连接来完成图片。上述代码需要 MySQLi 连接。

bind_param 函数会自动执行,并以最佳方式转义准备好的语句输入字符串。 bind_param 安全并用您提供的变量替换 SQL 语句中的 ?。这是关于“real_escape”与准备好的语句的答案。 mysql_query 正在走渡渡鸟的路,所以我认为最好使用 mysqli 或 PDO。

关于php - 将用户详细信息与 HTML 一起包含在我的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963491/

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