Php 如何从我的数据库向地址发送电子邮件?

Php 如何从我的数据库向地址发送电子邮件?,php,mysql,email,Php,Mysql,Email,我有一个发送电子邮件的表单,这一切都很好,但现在我想把电子邮件发送到一个存储在mysql数据库中的地址,但我不知道怎么做。无论我试图在semd下面的邮件脚本中将“$to”设置为从数据库中提取的变量,它都不起作用。 谁知道我做错了什么?谢谢 /// Get get recipients email address from database using id $id= $_GET["id"]; $result = mysqli_query($conx, "SELECT email from myt

我有一个发送电子邮件的表单,这一切都很好,但现在我想把电子邮件发送到一个存储在mysql数据库中的地址,但我不知道怎么做。无论我试图在semd下面的邮件脚本中将“$to”设置为从数据库中提取的变量,它都不起作用。 谁知道我做错了什么?谢谢

/// Get get recipients email address from database using id
$id= $_GET["id"];
$result = mysqli_query($conx, "SELECT email from mytable where id='$id'");
while($row = mysqli_fetch_array($result)) {
$to = $row["email"];
}

    if ($_GET["submit"]) {  
        $name =  htmlspecialchars($_GET['name']);
        $email = htmlspecialchars($_GET['email']);
        $message = $_GET['message'];
        $subject = 'Hello There';
        $body = "E-Mail: $email\n Message: $message";
        if (mail($to, $subject, $body)) {

        $result='<div class="alert alert-success">Your email has been sent</div>';
             }else{
        $result='<div class="alert alert-danger">Sorry there was an error sending your message.</div>';
    }
}
?>
///使用id从数据库获取收件人电子邮件地址
$id=$_GET[“id”];
$result=mysqli_查询($conx,“从mytable中选择电子邮件,其中id='$id');
while($row=mysqli\u fetch\u数组($result)){
$to=$row[“电子邮件”];
}
如果($_GET[“submit”]){
$name=htmlspecialchars($_GET['name']);
$email=htmlspecialchars($_GET['email']);
$message=$_GET['message'];
$subject='你好';
$body=“电子邮件:$email\n消息:$Message”;
if(邮件($to$subject$body)){
$result='您的电子邮件已发送';
}否则{
$result='抱歉,发送您的邮件时出错。';
}
}
?>

您应该尝试以下方法:

要从SQL注入中保护此代码,请阅读

///使用id从数据库获取收件人电子邮件地址
$id=(int)$\u GET[“id”];
$result=mysqli_查询($conx,“从mytable中选择电子邮件,其中id='$id');
$row=mysqli\u fetch\u数组($result);
$to=$row[“电子邮件”];
如果($_GET[“submit”]){
$name=htmlspecialchars($_GET['name']);
$email=htmlspecialchars($_GET['email']);
$message=$_GET['message'];
$subject='你好';
$body=“电子邮件:$email\n消息:$Message”;
if(邮件($to$subject$body)){
$result='您的电子邮件已发送';
}否则{
$result='抱歉,发送您的邮件时出错。';
}
}
?> 

如果在if get submit之后放置die($to),会发生什么情况。它应该将to地址回显到屏幕上并停止运行。另外,下面Dan Revah的建议是正确的。让我们看看HTML表单是什么样子。这些都被阅读了吗?抱歉,给你,Fred<代码>他只是问怎么做。不是关于安全性,但这不是提供不安全代码的借口。很多看到这一点的用户会盲目地复制和粘贴代码,而不知道这是不安全的。你的答案应该永远是安全的。我已经用一个MYSQL注入安全相关的问题更新了我的答案。非常感谢John Conde和Istiak Tridip的回复,并提醒大家注意安全性。我已经尝试合并这些更改,但仍然存在相同的问题。如果我尝试使用从数据库获取的变量(电子邮件地址),邮件将不会发送。我可以看到变量在页面上的回音很好,但就好像mail()函数看不到一样。如果我只是将
$更改为=me@email.com';它发送罚款,但不是
$to=$row[“email”]希望这是有意义的,我会在这里发布代码,但似乎我已经用完了字符。我得到了这个工作,我有一些代码检查用户登录状态,这与邮件变量冲突。谢谢
/// Get get recipients email address from database using id
$id= (int) $_GET["id"];
$result = mysqli_query($conx, "SELECT email from mytable where id='$id'");
$row = mysqli_fetch_array($result);
$to = $row["email"];


    if ($_GET["submit"]) {  
        $name =  htmlspecialchars($_GET['name']);
        $email = htmlspecialchars($_GET['email']);
        $message = $_GET['message'];
        $subject = 'Hello There';
        $body = "E-Mail: $email\n Message: $message";
        if (mail($to, $subject, $body)) {

        $result='<div class="alert alert-success">Your email has been sent</div>';
             }else{
        $result='<div class="alert alert-danger">Sorry there was an error sending your message.</div>';
    }
}
?>