【问题标题】:how do i send different email notifications for different ways a form was edited in php?如何针对在 php 中编辑表单的不同方式发送不同的电子邮件通知?
【发布时间】:2013-10-31 20:52:41
【问题描述】:

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

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

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

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

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

知道我的意思吗?

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

更新:

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

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

【问题讨论】:

  • so..写一堆条件代码if ($condition_set_1_is_met) { send email type #1 } else if ($condition_set_2_is_met) { send email type #2 } etc....
  • 或者,您可以使用 switch() 函数来渲染不同的 $message$subject 值并运行一次电子邮件发送代码,而不是重复代码 - uk3.php.net/manual/en/control-structures.switch.php
  • 此数据是否存储在数据库中?如果是这样,则在触发提交时检查数据库中使用的更改以及 post 值(如果它们不同),请根据该情况执行 case 语句
  • 是的,信息在数据库中。另外,第二条规则或案例如何否定第一条规则,这意味着如果第二条是真的,第一条也可能是真的,但是如果你在做第二条,就不要做第一条?
  • 不确定我说的对。这是另一种说法。当表单更改并且批准更改为“是”时,第一次编辑时为真,其他所有编辑都为真,因为批准将始终为 1。

标签: php forms email


【解决方案1】:

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

例如;

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

注意,我在此处写了“// ADD FUNCTION FOR EMAIL HERE //”,一个基本的 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。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2018-11-06
    • 2018-11-06
    • 2014-05-29
    相关资源
    最近更新 更多