当用户在我的网站上注册时,我会将要发送给他们的电子邮件的详细信息(例如他们的电子邮件地址,姓名和电子邮件内容)保存到我的数据库中。脚本(每隔几秒运行一次)然后根据存储在数据库中的详细信息发送电子邮件,然后删除该行,以便不会多次处理电子邮件。
我遇到的问题在于将用户的详细信息合并到电子邮件正文中。
下面是我可以放入数据库的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。”部分中的所有“to”更改为。将毫无问题地插入到数据库中;但是在用户收到的电子邮件中,看到这样的事情:
欢迎Yorkie595!
嗨!我们来设置你的新帐户吧!
...用户收到一封如下所示的电子邮件:
欢迎“。$ username。”!
嗨!我们来设置你的新帐户吧!
如果您需要它,这里是将新行插入数据库的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')");
所以,我的问题:如何将$ username中的PHP变量合并到$ message中?
答案 0 :(得分:0)
我没有足够的信息来调查为什么$ 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注入措施的附加好处。)
更新:我添加了MySQLi连接以完成图片。上面的代码需要MySQLi连接。
bind_param
自动运行,并以最佳方式转义预准备语句输入字符串。 bind_param
使用您提供的变量保护并替换SQL语句中的?这是关于“real_escape”与准备好的陈述的答案。 mysql_query
正在走向渡渡鸟的道路,所以在我看来最好使用mysqli或PDO。