0

表单有不同的输入/字段。当发生不同的事情时,我想通过电子邮件通知某人。例如,我想在记录被批准时向一个人发送电子邮件,这与下面的代码一起使用,但是如果表单被编辑并出于不同的原因再次提交,这意味着更改其他字段但将已批准的字段保留为已批准,电子邮件通知当那不是被编辑的内容时,会再次发出关于批准的信息。

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

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

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

如果已批准状态已更改,请仅发送有关批准的电子邮件。如果价格发生变化,请仅发送有关价格变化的电子邮件。如果审批和价格发生变化,请发送电子邮件通知审批状态和价格已更改。

明白我的意思了吗?

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 );
}

更新:

从来没有让这个与任何提示、技巧、帮助、建议等一起工作。

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

4

1 回答 1

0

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

例如;

// 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。

于 2013-10-22T20:41:47.197 回答