Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何针对在php中编辑表单的不同方式发送不同的电子邮件通知?_Php_Forms_Email - Fatal编程技术网

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

我如何针对在php中编辑表单的不同方式发送不同的电子邮件通知?,php,forms,email,Php,Forms,Email,表单有不同的输入/字段。当不同的事情发生时,我想用电子邮件通知某人。例如,当记录被批准时,我想给某人发送电子邮件,这与下面的代码一起工作,但是如果表单由于不同的原因被编辑并再次提交,这意味着更改其他字段,但将批准字段保留为已批准,则会再次发送电子邮件通知,告知批准情况,而未编辑此信息 因此,当“仅批准”字段从“否”更改为“是”,并且再次编辑表单并将“批准”状态保持为“是”不会再次发送电子邮件通知时,我如何将此更改为“仅发送一次电子邮件” 另外,我想发送另一封电子邮件,如果其他字段被更改,但这些其

表单有不同的输入/字段。当不同的事情发生时,我想用电子邮件通知某人。例如,当记录被批准时,我想给某人发送电子邮件,这与下面的代码一起工作,但是如果表单由于不同的原因被编辑并再次提交,这意味着更改其他字段,但将批准字段保留为已批准,则会再次发送电子邮件通知,告知批准情况,而未编辑此信息

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

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

所以基本上我想发送特定的电子邮件,这些邮件是以表格形式编辑的

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

知道我的意思吗

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
    }
}
注意,我在这里为EMAIL写了“//添加函数/”,一个基本的2参数EMAIL就可以了。有点像

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包装器)允许您在表单的更新部分编写最少的代码,同时允许您在发送的电子邮件中添加标志以给出设置标准

希望这有帮助


编辑:如果您将approved从0更新为1,要求$approval为1,则每次都会将其发送出去,而您第一次批准时,它应该会失败,因为PHP会预加载要比较的变量值,将$approved呈现为0。

so。。如果($condition\u set\u 1\u is_meted){发送电子邮件类型{1}则编写一组条件代码
,如果($condition\u set\u 2\u is_meted){发送电子邮件类型{2}等。
。或者,您可以使用switch()函数呈现不同的
$message
$subject
值,并运行一次电子邮件发送代码,而不是重复的代码-这些数据是否存储在数据库中?如果是这样,当触发提交时,检查数据库中的更改情况,使用和post值(如果它们不同)进行检查,并在此基础上执行案例陈述是,信息在数据库中。还有,第二条规则或案例如何否定第一条规则,也就是说,如果第二条规则是真的,那么第一条规则也可能是真的,但是如果你做第二条规则,就不要做第一条规则?我不确定我说的对不对。这里有另一种说法。当表单更改且批准更改为“是”时,第一次编辑时为真,每次编辑时为真,因为批准始终为1。