如何针对在 PHP 中编辑表单的不同方式发送不同的电子邮件通知


how do i send different email notifications for different ways a form was edited in php?

form具有不同的输入/字段。 我想在发生不同事情时通过电子邮件通知某人。 例如,我想在记录获得批准时向某人发送电子邮件,这适用于以下代码,但是如果出于其他原因编辑并再次提交表单,这意味着更改其他字段但将"批准"字段保留为"已批准",则电子邮件通知将再次发送,告知批准,而这不是编辑的内容。

那么,当"仅批准"字段从"否"更改为"是"并且再次编辑表单并将"已批准"状态保持为"是"不再发送电子邮件通知时,我该如何将其更改为仅发送电子邮件一次?

如果其他字段发生更改,我也想发送另一封电子邮件,但这些其他字段不是零和一,它们是随机文本。

所以基本上我想为在表单中编辑的特定内容发送特定的电子邮件。

如果"已批准"

状态已更改,请仅发送有关"已批准"的电子邮件。 如果价格已更改,请仅发送有关价格更改的电子邮件。 如果审批和价格已更改,请发送电子邮件说明审批状态和价格已更改。

明白我的意思吗?

if ($approved == 1) {
  $to = $email;
  $subject = 'Job# '.$id.' has been approved by an Admin';
  $message = "You can now view job# ".$id."!'n'n.";
  $headers = "From: info@domain.com'r'nReply-To: info@domain.com";
  $mail_sent = @mail( $to, $subject, $message, $headers );
}

更新:

从来没有用任何提示、技巧、帮助、建议等来工作。

我最终只是创建了一个单独的复选框,管理员需要选中该复选框才能在编辑不同内容时向作业所有者发送电子邮件。 一个复选框用于批准电子邮件,另一个用于其他所有内容。 其他一切都可能是不批准,更改价格,更改工作表单中的任何内容。 还添加了一个文本区域框,供管理员在作业所有者收到他/她的电子邮件通知时编写他/她想要澄清的内容。

将数据

从数据库交叉引用到发布的数据将允许您只为您所做的每件事发送电子邮件一次。

例如;

// check the data has been posted
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    // do some checking of data here 
    // (array_key_exists/isset/ctype_digit/ctype_alnum or whatever)
    $id  = $_POST['id'];
    // Construct the query
    $sql = "SELECT * FROM `table` WHERE `id` = '{$id}'";
    // You're possibly using mysqli_, but for arguments sake, I'll use mysql_
    $run = mysql_query($sql); 
    // Check there is a result
    if (mysql_num_rows($run) == 1)
    {
        // Give the query above a variable to call from
        $item = mysql_fetch_assoc($run);
        // Now that you are here and $item is set, you should check your data.
        // For example, if you have posted to approve the item, check that it's 
        // not been approved already
        if ($_POST['approved'] == 1 && $item['approved'] == 0)
        {
            // If you are here, you have opted to approve it, 
            // but it wasn't approve, so send email.
            // ADD FUNCTION FOR EMAIL HERE //
        }
        // Don't bother with an IF clause, since you don't need the code to do anything
    }
}

请注意,我写了"//在此处为电子邮件添加函数//",一个基本的 2 参数电子邮件可以做到。 类似的东西;

function send_item_email($email, $flag)
{
}

在其中,您可以使用标志在发布信息的选项之间"切换"。

function send_item_email($email, $flag)
{
    $subject = 'Generic Subject';
    switch ($flag) 
    {
        case "approved":
            "Your {{ITEM}} has been approved.";
        break;
        case "price":
            "The price of your {{ITEM}} has changed.";
        break;
    }
}

使用电子邮件的函数(如swiftMailer包装器)允许您在表单的更新部分编写最少的代码,同时允许您添加标志以在电子邮件中给出要发送的设置条件。

希望这有帮助。

编辑:鉴于您将批准从 0 更新为 1,要求$approval为 1,这将使它每次都发送出去,而您第一次批准时,它应该失败,因为 PHP 会预先加载变量值进行比较,$approved渲染为 0。