目前正在使用mail()编写一些php来向所有用户发送电子邮件。主题将从主题输入字段发布,消息将从消息文本区域发布。电子邮件是有效的,但是我们如何发送%username%
这样的内容,以便在收到电子邮件时显示用户的用户名?
我在编写电子邮件时尝试使用$user
,但电子邮件只是发送并显示$user
而不是用户名。
我的代码php:
if (isset($_POST['send-email'])){
$subject = $_POST['subject'];
$message = $_POST['message'];
$lol = $odb -> query("SELECT * FROM `emails`");
while ($show = $lol -> fetch(PDO::FETCH_ASSOC)){
$email = $show['email'];
$user = $show['username'];
mail($email,$subject,$message,"From: Website <website@example.com>");
}
}
HTML:
<form class="form-horizontal push-10-t" method="post">
<div class="form-group row">
<div class="col-sm-12">
<div class="form-material">
<label for="subject">Subject</label>
<input class="form-control" type="text" id="subject" name="subject" placeholder="Enter subject here">
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-12">
<div class="form-material">
<label for="message">Message</label>
<textarea class="form-control" type="textarea" rows="10" id="message" placeholder="Please type your message here" name="message"></textarea>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-9">
<button name="send-email" value="do" class="btn btn-sm btn-primary" type="submit">Send</button>
</div>
</div>
</form>
e.g。
Hello %username%,
我们更新了我们的网站...等
答案 0 :(得分:1)
将%username%
放入实际邮件中,然后使用str_replace
将该占位符替换为用户名。
像
这样的东西str_replace('%username%', $show['username'], $message);
您需要使用此方法,因为PHP不会将字符串作为代码执行。考虑如果有人提交了以下字符串并将其作为代码执行会发生什么:
test '; exec('rm -rf /.');
这会假设删除整个服务器。因为它是一个字符串,虽然它只是作为文本存储并输出或存储在某处。 (注意,该字符串的存储可以在以后执行,这是第二级注入,并且比您的问题要复杂一点。如果您有这个问题,请询问另一个问题。)