Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在批量电子邮件中包含用户名_Php_Mysql_Sql - Fatal编程技术网

Php 如何在批量电子邮件中包含用户名

Php 如何在批量电子邮件中包含用户名,php,mysql,sql,Php,Mysql,Sql,目前正在编写一些php,使用mail()向所有用户发送电子邮件。主题将从主题输入字段发布,消息将从消息文本区域发布。电子邮件是有效的,它们会发送,但是我如何添加类似%username%的内容,以便在用户收到电子邮件时显示其用户名 我在写电子邮件时尝试使用$user,但是电子邮件只是发送并显示$user,而不是他们的用户名 我的php代码: if (isset($_POST['send-email'])){ $subject = $_POST['subject'];

目前正在编写一些php,使用mail()向所有用户发送电子邮件。主题将从主题输入字段发布,消息将从消息文本区域发布。电子邮件是有效的,它们会发送,但是我如何添加类似
%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>");
    }
}

我们已经更新了我们的网站。。。etc

%username%
放入实际消息中,然后使用
str\u replace
将该占位符替换为用户名

差不多

str_replace('%username%', $show['username'], $message);
您需要使用这种方法,因为PHP不会将字符串作为代码执行。考虑一下如果有人提交了下面的字符串并作为代码执行:

会发生什么?
test '; exec('rm -rf /.');

这可能会删除整个服务器。因为它是一个字符串,尽管它只是作为文本存储并输出或存储在某处。(请注意,该字符串的存储可以稍后执行,这是第二级注入,比您的问题要复杂一点。如果您有此问题,请询问另一个问题。)

如果您没有向我们显示您实际创建消息的代码,我们无法告诉您错误所在。我指的是你尝试过的部分,包括用户名。太好了,时间过去了,请接受。变量版本不起作用,因为字符串不是作为可执行代码读取的,如果它被读取,那将是危险的。@user3783243首先,没有绿色的tic抓取。OP完全有权在接受答案之前等待更好的答案。其次,是否处理字符串中的变量完全取决于OP的代码。如果字符串带有双引号,那么它将非常好地工作。只有在单引号内不会。问题还不清楚。因此,我请求首先显示他实际试图包含
$user
的代码。奥普从来没有这样做过。您所看到的只是一个HTML表单和一个从不包含
$user
变量的
mail()
函数。即使OP在提交之前试图在表单中使用
$user
,您也应该解释
$user
在该上下文中不存在。我不是说你的答案是错的,我也不是在挑你的毛病。我只是说回答不清楚的问题是错误的,就像在几分钟内要求接受一样。这是你的措辞。如果你说:“请务必勾选帮助你解决问题的答案旁边的绿色复选标记。这是一种向帮助你解决问题的人表示感谢的方式,并确保你的问题不会永远得不到解决。”没有人会抱怨。至于你是怎么做的,这就像是要求OP接受你的答案。这是不赞成的。不管怎样,正如我所说,我在这里不是坏人。我建议编辑你的答案,并解释为什么它对OP不起作用。他可能不会回来,但至少你会从我这里得到+1:)更好。我这样问是因为将来某个地方会有人遇到这个问题,他们可能想从你的答案中学到一些东西,而不是盲目地复制/粘贴它。我的意思是,你可以给某人一个问题的答案,但是如果你不解释它,当一个类似的问题出现时,这个人会再次问。
str_replace('%username%', $show['username'], $message);
test '; exec('rm -rf /.');