PHP表单向所有用户发送邮件而不是一个用户

时间:2016-12-21 14:58:36

标签: php mysql email while-loop

我正在创建一个用户可以创建帖子的网页。其他用户可以通过填写向发布者发送电子邮件的表单来回复帖子。 我使用while循环迭代来显示来自MySQL db的所有帖子,同时显示表单以进行回复。

我遇到的问题是,当我按回复表单上的发送按钮时,数据库中的所有用户都会收到一封电子邮件。它应该工作的方式是,我回复的人应该收到电子邮件。试过其他迭代器。考虑使用对象但却无法理解为什么当我按下发送按钮时mail()函数会向所有用户发送一封电子邮件。

$query = mysql_query("SELECT * FROM msg ORDER by id DESC");

while ($row = mysql_fetch_array($query)){
    print '<div class="block">
                <div id="uMail">
                    <a id="mail" href="'.$row['userMail'].'"> <img src="mail.png" > </a>
                </div>

                <div id="uName">
                    <span id="var">'.$row['userName'].'</span>
                </div>

                <div id="uMsg">
                    <p>'.$row['userMsg'].'</p>
                </div>
            </div>


            <div class="popup">
                <form action="" method="POST">
                    <div id="sName">
                        <input type="text" name="sName" />
                    </div>
                    <div id="sMail">
                        <input type="email" name="sMail" />
                    </div>
                        <textarea name="sMsg"></textarea>
                        <input type="submit" name="send" value="Send" />
                </form> 
            </div>
            ';

    if (isset($_POST["send"])) {
        $usrMail = $row['userMail'];
        $sndrName = mysql_real_escape_string($_POST["sName"]);
        $sndrMail = mysql_real_escape_string($_POST['sMail']);
        $sndrMsg = mysql_real_escape_string($_POST["sMsg"]);

        mail($usrMail, "Hey", $sndrMsg);
        header('location: forma.php');
    }
} 

3 个答案:

答案 0 :(得分:3)

  1. 因为sendmail()在while()内。

  2. 我强烈建议https://github.com/PHPMailer/PHPMailer发送电子邮件,因为mail()无法指定SMTP。

答案 1 :(得分:0)

您在发送一封电子邮件后将用户重定向到forma.php。你应该移动这一行:

header('location: forma.php');
在while循环之外

,因此在发送所有电子邮件后重定向用户

答案 2 :(得分:0)

所以最后我做到了,我只是将提交按钮名称设为$ i,这是$ i ++ in while循环。然后我发了if(isset($ _ POST [“$ i”]))里面有邮件功能和它的工作:) 但是,现在我想制作弹出窗口以便回答,并且不知道如何管理它:)