【问题标题】:Sending Emails to right users using variables PHP使用变量 PHP 向正确的用户发送电子邮件
【发布时间】:2016-03-31 07:39:24
【问题描述】:

我想在单击按钮时向相应的用户发送电子邮件。电子邮件地址存储在我的数据库中,我将它们设置为一个变量,因此它可以在单击按钮时动态发送给正确的用户。我使用了以下代码

$mailquery = "SELECT email FROM tbl_users INNER JOIN tbl_bides ON tbl_users.email = tbl_bides.bidder_id";
while ($mailentry = mysql_fetch_array($mailquery)) {
$mail = $mailentry['email'];
$to = $mail;
$subject = "My subject";
$txt = "Right User!";
$headers = "From: webmaster@example.com" . "\r\n" ."CC:somebodyelse@example.com";
mail($to, $subject, $txt, $headers);
}

这不起作用。
请帮忙!!

【问题讨论】:

  • 请更新您的代码。 mysql_* 函数已被弃用超过 2 年。它们往往会让你对 MySQL 注入敞开心扉。强烈建议将MySQLi()PDO() 与Prepared Statements 结合使用。除此之外:它怎么不起作用?更详细地解释您的问题,以便我们对正在发生的事情有一个大致的了解。
  • “因此它可以在单击按钮时动态发送给正确的用户” - 您需要详细说明。我在下面发布了一个答案,并概述了你没有做什么。如果这不起作用,那么您需要向我们展示更多代码以及动态内容是如何发生的。您可能需要使用WHERE 子句。

标签: php mysql email


【解决方案1】:

您的查询没有被执行。

$mailquery = "SELECT email...

需要包含mysql_query()

$mailquery = mysql_query("SELECT email FROM tbl_users INNER JOIN tbl_bides ON tbl_users.email = tbl_bides.bidder_id");

或者,如果您的查询需要连接:

$mailquery = mysql_query("SELECT email FROM tbl_users INNER JOIN tbl_bides ON tbl_users.email = tbl_bides.bidder_id", $connection);

在将$connection 替换为您可能用于连接的变量时,如果以mysql_ 开头且未知。

确保您已使用 mysql_ 成功连接(尽管您应该移至 mysqli_ 或 PDO)。

另外,我已在您的问题下发表评论,说明您如何使用这种“动态”方法,但未能回复/更新您的问题。

您需要使用WHERE 子句,并使用您正在查询的表/列。

即:WHERE table.column = '$email'


您当前的代码对SQL injection 开放。使用mysqli_* with prepared statements,或PDOprepared statements


然后咨询:


error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存阶段显示错误,而不是在生产阶段。

还要将or die(mysql_error()) 添加到mysql_query(),以防您的查询可能失败。


如果您收到关于弃用的通知,那么您将需要使用 mysqli_ 或 PDO,您应该切换到它们,因为这些 mysql_ 函数已被弃用,并将在未来的 PHP 版本中删除,例如 PHP 7.0

记得从连接到查询使用相同的 MySQL API。


变化:

mail($to, $subject, $txt, $headers);

到:(并使用条件语句)

if(mail($to, $subject, $txt, $headers)){
  echo "Mail was sent and has done its job.";
}

else{
  echo "Error, check your logs.";
}

如果您看到Mail was sent and has done its job.,那么mail() 就是这样做的,它的工作。

【讨论】:

  • 现在是平安夜,我得走了。我明天会回来检查发生了什么,或者没有发生什么。
  • 非常感谢...现在它的工作。我没有输入正确的选择语句。它必须是 $mailquery = mysql_query("SELECT * FROM tbl_users INNER JOIN tbl_bides ON tbl_users.users_id = tbl_bides.bidder_id WHERE bidder_id = $playerid", $con) 或 die(mysql_error());再次感谢:)
  • @Andrew 谢谢你,圣诞快乐,还有很多快乐和幸福,干杯!不客气。我很高兴听到它已解决。我对添加WHERE 子句的效果进行了编辑,这就是关键。一切顺利,安德鲁!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多